队列的链式实现:
#include<iostream>
using namespace std;
int e;
typedef struct QNode{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
bool InitQueue(LinkQueue &Q){//初始化
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return true;
}
bool EnQueue(LinkQueue &Q,int e){//入队列
QNode *p;
p=new QNode;
p->data=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;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
delete p;
return true;
}
int GetHead(LinkQueue &Q){//取队首元素
if(Q.front!=Q.rear){
return Q.front->next->data;
}
}
bool IsEmpty(LinkQueue Q){//判断队列是否为空
if(Q.front==Q.rear)
return true;
return false;
}
void Show(LinkQueue Q){ //输出所有元素
if(Q.front==Q.rear){
cout<<"队列空"<<endl;
}
else
cout<<"所有元素出栈结果如下"<<endl;
while(!IsEmpty(Q)){
cout<<GetHead(Q)<<" ";
DeQueue(Q,e);
}
}
void menu(){
getchar();
getchar();
system("cls");
cout<<"请依次输入0~5"<<endl;
cout<<"0 : 初始化链队列"<<endl;
cout<<"1 : 元素入队列"<<endl;
cout<<"2 : 元素出队列"<<endl;
cout<<"3 : 取队列顶元素"<<endl;
cout<<"4 : 所有元素按顺序出队列"<<endl;
cout<<"5 : 退出"<<endl;
}
int main(){
int choose;
cout<<"请依次输入0~5"<<endl;
cout<<"0 : 初始化链队列"<<endl;
cout<<"1 : 元素入队列"<<endl;
cout<<"2 : 元素出队列"<<endl;
cout<<"3 : 取队列顶元素"<<endl;
cout<<"4 : 所有元素按顺序出队列"<<endl;
cout<<"5 : 退出"<<endl;
LinkQueue Q;
int off=0;
while(cin>>choose){
switch(choose){
case 0:{
if(InitQueue(Q)){
cout<<"初始化成功"<<endl;
}
else
cout<<"初始化失败"<<endl;
menu();
continue;
}
case 1:{
if(!InitQueue(Q)){
cout<<"队列还未初始化"<<endl;
}
else {
int num;
puts("请输入要入队列的数据,按Crtl+Z停止输入");
while(scanf("%d",&num)!=EOF){
EnQueue(Q,num);
}
cin.clear();
puts("输入完毕");
}
menu();
continue;
}
case 2:{
if(IsEmpty(Q)){
cout<<"队列为空"<<endl;
}
else {
cout<<GetHead(Q)<<"出队列";
DeQueue(Q,e);
cout<<"队列内剩余元素"<<endl;
if(!IsEmpty(Q))
Show(Q);
else
cout<<"队列空"<<endl;
}
menu();
continue;
}
case 3:{
if(IsEmpty(Q)){
cout<<"队列为空"<<endl;
}
else {
cout<<"队列顶元素为"<<GetHead(Q)<<endl;
}
menu();
continue;
}
case 4:{
if(!IsEmpty(Q))
Show(Q);
else
cout<<"队列空"<<endl;
menu();
continue;
}
case 5:{
cout<<"退出成功"<<endl;
off=1;
break;
}
default :{
cout<<"无此选项,请重新选择"<<endl;
menu();
continue;
}
}
if(off==1)
break;
}
return 0;
}