数据结构 链队列

做一个豁达而努力的自己。

链栈节点的存储结构:

typedef struct QNode
{
    int data;   //存储数据
    QNode *next;  //下一个节点的指针地址
}QNode;

链栈的存储结构:

typedef struct
{
    QNode *front;  //头指针
    QNode *rear;    //尾指针
}LinkQueue;

入队:

Status EnQueue(LinkQueue &q, int e)
{
    QNode *s;
    s = new QNode;
    if(!s)
        return ERROR;
    s->data = e;
    s->next = NULL;
    q.rear->next = s;
    q.rear = s;
    return OK;
}
出队:
Status DeQueue(LinkQueue &q, int &e)
{
    if(q.front == q.rear)
        return ERROR;
    QNode *p;
    p = q.front->next;
    e = p->data;
    q.front->next = p->next;
    if(q.rear == p)    
        q.front = q.rear;
    delete p;
    return OK;
}
代码:
#include <iostream>
using namespace std;
//队列节点的存储结构
typedef struct QNode
{
    int data;   //存储数据
    QNode *next;     //下一个节点的地址指针
}QNode;
//队列的存储结构
typedef struct
{
    QNode *front;   //头指针
    QNode *rear;    //尾指针
}LinkQueue;
//队列的初始化
bool InitQueue(LinkQueue &q)
{
    q.front = q.rear = new QNode;
    if(!q.front)
        return false;
    q.front->next = NULL;
    return true;
}
//入队
bool EnQueue(LinkQueue &q, int e)
{
    QNode *s;
    s = new QNode;  //创建一个节点
    if(!s)
        return false;
    s->data = e;
    s->next = NULL;
    q.rear->next = s;
    q.rear = s;
    return true;
}
//出队
bool DeQueue(LinkQueue &q, int &e)
{
    if(q.front == q.rear)
        return false;
    QNode *p;
    p = q.front->next;
    e = p->data;
    q.front->next = p->next;
    if(q.rear == p)
        q.rear = q.front;
    delete p;
    return true;
}
//打印队列
void PrintQueue(LinkQueue q)
{
    QNode *p;
    p = q.front->next;
    while(p)
    {
        cout << p->data << '\t';
        p = p->next;
    }
    cout << endl;
}
//销毁队列
void DestroyQueue(LinkQueue &q)
{
    while(q.front)
    {
        q.rear = q.front->next;
        delete q.front;
        q.front = q.rear;
    }
}
//清除队列
void ClearQueue(LinkQueue &q)
{
    QNode *p, *s;
    p = q.front->next;
    while(p)
    {
        s = p;
        delete s;
        p = p->next;
    }
    q.rear = q.front;
    q.front->next = NULL;
}
//判断队列是否为空
bool EmptyQueue(LinkQueue q)
{
    if(q.front == q.rear)
        return true;
    return false;
}
//求对头元素
bool GetHead(LinkQueue q, int &e)
{
    if(q.front == q.rear)
        return false;
    e = q.front->next->data;
    return true;
}
int main()
{
    LinkQueue q;
    InitQueue(q);
    int e;
    cout << "输入5个元素:" << endl;
    for(int i = 1; i < 6; i++)
    {
        cin >> e;
        EnQueue(q, e);
    }
    PrintQueue(q);
    cout << "删除一个元素" << endl;
    DeQueue(q, e);
    PrintQueue(q);
    GetHead(q, e);
    cout << "输出对头元素:" << e << endl;
    cout << "销毁队列" << endl;
    ClearQueue(q);
    cout << "销毁成功" << endl;
    return 0;
}




猜你喜欢

转载自blog.csdn.net/qq_37043100/article/details/79888316
今日推荐