您的位置:首页 > 其它

循环链表实现队列

2016-04-21 18:56 337 查看
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针),编写相应队列初始化,入队,出队。 
#include<iostream>
#define datetype int
using 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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: