循环链表实现队列

来源:互联网 发布:最基本的网络通信协议 编辑:程序博客网 时间:2024/05/21 11:42
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针),编写相应队列初始化,入队,出队。 

#include<iostream>#define datetype intusing namespace std;struct QNode ///声明队列结点类型{datetype date;QNode *next;};struct Lqueue{QNode *rear;};///声明队列类型void initQueue(Lqueue &Q){Q.rear = new QNode;Q.rear->next = Q.rear;}bool emptyQueue(Lqueue &Q){return Q.rear->next->next == Q.rear->next ? 1 : 0;}void pushQueue(Lqueue &Q, datetype &x){QNode *p = new QNode;p->date = x; p->next = Q.rear->next;Q.rear->next = p;Q.rear = p;}datetype popQueue(Lqueue &Q){datetype x;QNode *p;p = Q.rear->next->next;///p要指向取下的结点x = p->date; ///保存结点数据if (p == Q.rear){///当队列中只有一个节点时 p结点出队后 要将队尾指针指向头节点Q.rear = Q.rear->next;Q.rear->next = p->next;}else Q.rear->next->next = p->next;delete(p);return x;}int main(){int n, a;Lqueue Q;initQueue(Q);cout << "请输入队列的元素数目" << endl;cin >> n;cout << "请输入每个结点的值" << endl;for (int i = 1; i <= n; i++){cin >> a;pushQueue(Q, a);}cout << "输出:" << endl;while (!emptyQueue(Q))cout << popQueue(Q) << endl;return 0;}

循环链表实现队列 - 风未定 - Principal Guan
0 0
原创粉丝点击