先上结果:
下面是可执行的代码
#include<bits/stdc++.h>
using namespace std;
struct Node //定义链表结点结构体
{
int data; //数据域
Node* next; //指针域
};
struct Queue //定义队列结构体
{
Node* fron; //队首指针
Node* rear; //队尾指针
};
void Zero(Queue& Q) //初始化
{
Q.fron =NULL; //将队首指针置为空
Q.rear =NULL; //将队尾指针置为空
}
bool Null_(Queue& Q) //判空
{
return (Q.fron==NULL); //如果队首指针为空,则说明队列为空
}
void Push(Queue& Q,int x) //入队
{
Node* p=new Node; //创建新节点
p->data =x; //将入队元素赋给新节点的数据域
p->next =NULL; //将新节点的指针域置为空
if(Null_(Q)) //如果队列为空
{
Q.fron=Q.rear=p; //将队首,队尾指针都 指向新节点
}
else //队列不为空
{
Q.rear->next=p; //将新节点添加到队尾
Q.rear =p; //相当于将新节点变为新的队尾
}
}
int pop(Queue& Q) //入队
{
if(Null_(Q)) //判空
{
cout<<"队列已空"<<endl; //提示
return -1;
}
int x=Q.fron->data; //将要出队的元素的数据赋给 x
Node* p=Q.fron; //将队首指针赋给临时结点
Q.fron =p->next; //使队首指向下下个结点(出队单元的下一个单元)
delete p; //释放出队单元的空间
if(Q.fron==NULL) //如果队首为空
{
Q.rear==NULL; //将队尾也指向空(变为初始状态)
}
return x; //返回出队元素的数据
}
void traverse(Queue& Q) //遍历栈
{
if(Q.fron==NULL) //判空
{
cout<<"队列为空";
return;
}
else
{
Node* p=Q.fron ; //将队首指针赋给临时结点(为了不改变队首的指向)
while(p!=NULL) //判空
{
cout<<p->data<<" "; //输出当前节点的数据
p=p->next; //改变指向(指向下一个结点)
}
cout<<endl;
}
}
int main()
{
int a[100],i,n; //定义变量
Queue Q; //创建队列
Zero(Q); //初始化队列
cout<<"输入入队数据的个数:";
cin>>n;
for(i=0;i<n;i++) //入队
{
cin>>a[i];
Push(Q,a[i]);
}
cout<<"此时队列元素为:";
traverse(Q); //遍历队列
cout<<"输入出队数据的个数:";
cin>>n;
for(i=0;i<n;i++) //出队
{
cout<<pop(Q)<<"出队"<<" ";
if(i==n-1) cout<<endl;
}
cout<<"此时队列元素为:";
traverse(Q); //遍历队列
cout<<"输入入队数据的个数:";
cin>>n;
for(i=0;i<n;i++) //入队
{
cin>>a[i];
Push(Q,a[i]);
}
cout<<"此时队列元素为:";
traverse(Q); //遍历队列
return 0;
}