版权声明:转载请注明出处 https://blog.csdn.net/doubleguy/article/details/84075351
#include<bits/stdc++.h>
typedef int Status;
using namespace std;
typedef struct QNode{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;//队头指针
QueuePtr rear;//队尾指针
}LinkQueue;
Status InitQueue(LinkQueue &q){
q.front = q.rear = new QNode;
q.front->next = NULL;
return 1;
}
Status EnQueue(LinkQueue &q,int e){
QNode *p = new QNode;
p->data = e;
p->next = NULL;
q.rear->next = p;
q.rear = p;
return 1;
}
Status DeQueue(LinkQueue &q,int &e){
if(q.front == q.rear)
return 0;
QNode *p = q.front->next;
e = p->data;
q.front->next = p->next;
if(q.rear == p)
q.rear = q.front;//当最后一个元素被删除,队尾指针指向头结点
delete p;
}
int GetHead(LinkQueue q){
if(q.front != q.rear)
return q.front->next->data;
exit(-2);
}
void PrintQueue(LinkQueue q){
if(q.rear == q.front)
return ;
q.front = q.front->next;
while(1){
cout<<q.front->data<<" ";
if(q.rear == q.front)
break;
q.front = q.front->next;
}
cout<<endl;
}
int main(){
int status;
int e;
int n;
LinkQueue q;
status = InitQueue(q);
if(status)
cout<<"链队初始化成功,你已经创建了一个空链队!"<<endl;
cout<<"请输入你想入队的元素的个数:";
cin>>n;
cout<<"请输入"<<n<<"个数:";
for(int i=0;i<n;i++){
cin>>e;
status = EnQueue(q,e);
if(status)
cout<<e<<"入队成功!"<<endl;
cout<<"当前队列中的元素依次为:";
PrintQueue(q);
}
cout<<"当前队头元素为:"<<GetHead(q)<<endl;
cout<<"请输入你想出列的元素个数:";
cin>>n;
for(int i=0;i<n;i++){
status = DeQueue(q,e);
if(status){
cout<<"出队成功,出队的元素为:"<<e<<endl;
}
cout<<"当前队列中的元素依次为:";
PrintQueue(q);
}
cout<<"当前队头元素为:"<<GetHead(q)<<endl;
return 0;
}