循环链表实现队列
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;
}
#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;
}
相关文章推荐
- C#控制台实现52张扑克牌的分法
- 单链表的实现
- 后缀表达式+栈的应用=四则表达式运算
- vector的用法
- 栈,队列,优先队列的使用
- LA 3135 - Argus
- solr添加IKAnalyzer分词器
- UVA 11995I Can Guess the Data Structure!
- UVA 11991Easy Problem from Rujia Liu?
- HDU 1506Largest Rectangle in a Histogram
- HDU 1003Max Sum
- HDU 1231最大连续子序列
- HDU 2946 Letter Cookies
- HDU 1864最大报销额
- 链队列的综合操作(详解、演示)C语言实现
- 文件加密
- 用while随机求十个数的和
- 慎用mutableCopy
- HDU 2955 Robberies
- CF 275A. Counterexample