#include <bits/stdc++.h>
using namespace std;
#define QElemType int
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front1;
QueuePtr rear;
}LinkQueue;
//初始化
void InitQueue(LinkQueue &Q)
{
Q.front1=Q.rear=new QNode;
Q.front1->next=NULL;
}
//打印
void print1(LinkQueue &Q)
{
QueuePtr p;
if(Q.front1==Q.rear)
printf("该队列为空\n");
else
{
p=Q.front1;
printf("此队列当前的元素有:\n");
while(p->next)
{
p=p->next;
printf("%d ",p->data);
}
printf("\n");
}
}
//入队
void EnQueue(LinkQueue &Q,QElemType e)
{
QueuePtr p=new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
//出队
void DeQueue(LinkQueue &Q)
{
QueuePtr p;
if(Q.front1==Q.rear)
printf("队列为空\n");
else
{
p=Q.front1->next;
if(p==Q.rear)
Q.rear=Q.front1;
Q.front1->next=Q.front1->next->next;
free(p);}
}
//取队头元素
QElemType GetHead(LinkQueue &Q)
{
if(Q.front1==Q.rear)
//printf("该队列为空,无队头元素\n");
return 1;
else
{
return Q.front1->next->data;
}
}
int main()
{
LinkQueue Q;
InitQueue(Q);
printf("1.入队 2.出队 3.取队头元素 4.打印 5.退出\n");
int chance,e;
while(1)
{
printf("请选择你要进行的操作\n");
scanf("%d",&chance);
if(chance==5)
break;
switch(chance)
{
case 1:{printf("请输入要入队的元素\n");scanf("%d",&e);EnQueue(Q,e);}break;
case 2:DeQueue(Q);break;
case 3:printf("队头元素为%d\n",GetHead(Q));break;
case 4:print1(Q);break;
}
}
//print1(Q);
}