首页 > 代码库 > 队列(链式)

队列(链式)

队列,是一种先进先出的线性表,它只允许在队头删除,在队尾插入,链式队列和单链表操作类似,但是有队首指针和队尾指针,下面是链式队列的表示和实现:

#include <iostream>using namespace std;//队列的链式表现与实现struct QNode{    int data;    QNode *next;};struct LinkQueue{    QNode * front;    QNode * rear;};bool InitQueue(LinkQueue &q){    q.front=q.rear=(QNode*)malloc(sizeof(QNode));    if (!q.front)    {        return false;    }    q.front->next=NULL;    return true;}bool DestoryQueue(LinkQueue &q){    while(q.front)    {        q.rear=q.front->next;        free(q.front);        q.front=q.rear;    }    return true;}//插入元素e 队尾元素bool EnQueue(LinkQueue &q,int e){    QNode *p=(QNode*)malloc(sizeof(QNode));    if (!p)    {        return false;    }    p->data=http://www.mamicode.com/e;    p->next=NULL;    q.rear->next=p;    q.rear=p;//队尾指针需要移到最后    return true;}bool DeQueue(LinkQueue &q,int &e){    if (q.front==q.rear)    {        return false;    }    QNode *p = q.front->next;    e=p->data;    q.front->next=p->next;    if (q.rear==p)//队尾指针不能丢 需要指向头结点    {        q.rear=q.front;    }    free(p);    return true;}void PrintQueue(LinkQueue &q){    if (q.front==q.rear)    {        cout<<"sorry ,the queue is empty"<<endl;        return;    }    cout<<"Now print the queue:"<<endl;    QNode *p=NULL;    p=q.front->next;    while(p)    {        cout<<p->data<<endl;        p=p->next;    }}void main(){    LinkQueue lq={0};    if (InitQueue(lq))    {        cout<<"Initial Success!"<<endl;    }    int ElemNum=0;    cout<<"请输入要插入元素的个数:";    cin>>ElemNum;    int Elem=0;    for (int i=0;i<ElemNum;i++)    {        cout<<"请输入要插入第 "<<i+1<<" 个元素:";        cin>>Elem;        if (EnQueue(lq,Elem))        {            cout<<"插入成功"<<endl;;        }    }    PrintQueue(lq);//打印队列    int delnum;    DeQueue(lq,delnum);//删除第一个元素    cout<<"the delete num is :"<<delnum<<endl;    PrintQueue(lq);//打印队列    DestoryQueue(lq);//销毁队列    PrintQueue(lq);//打印队列}

执行结果如下图: