链队

来源:互联网 发布:张学良戒毒的故事知乎 编辑:程序博客网 时间:2024/06/05 07:53
#include <iostream>using namespace std;typedef struct QNode{    int data;    struct QNode *next;}QNode,*QueuePtr;typedef struct{    QueuePtr front;    QueuePtr rear;}LinkQueue;void InitQueue(LinkQueue &Q)//初始化队列,构造一个空队列{    Q.front = Q.rear =new QNode;    Q.front->next = NULL;}void EnQueue(LinkQueue &Q,int e) //链队的入队,插入元素e为队列新的队尾元素{    QNode *p = new QNode;    p->data = e;    p->next = NULL;    Q.rear->next = p;    Q.rear = p;}bool IsEmpty(LinkQueue &Q)//判空{    if(Q.front == Q.rear)        return true;    return false;}bool DeQueue(LinkQueue &Q,int &e)//出队,队头元素出队,并用e返回其值{    if(IsEmpty(Q))        return false;    QNode *p = Q.front->next;    e=p->data;    Q.front->next = p->next;    if(Q.rear == p)        Q.rear = Q.front;    delete p;    return true;}bool QueueTraverse(LinkQueue &Q)//遍历{    if(IsEmpty(Q))        return false;    QNode *p = Q.front->next;    while(p!=NULL)    {        cout<<p->data<<endl;        p=p->next;    }    return true;}int main(){    LinkQueue k;    InitQueue(k);    EnQueue(k,3);    EnQueue(k,5);    EnQueue(k,7);    QueueTraverse(k);    cout<<endl<<IsEmpty(k)<<endl<<endl;    QNode *p = k.front;    while(p!=NULL)    {        int e;        DeQueue(k,e);        cout<<e<<endl;        p=p->next;    }    cout<<endl<<IsEmpty(k)<<endl<<endl;}