#include
#include
typedef struct QNode{
int data;
struct QNode *next;
} LinkNode;//每个结点的定义
typedef struct{
LinkNode *front, *rear;
}LinkQuene;//采用链表结构的队列
void InitQuene(LinkQuene &Q)//带有头结点的队列
{
Q。
front=(LinkNode *)malloc(sizeof(QNode));
Q。rear=Q。front;
}
bool EmptyQuene(LinkQuene Q)
{
if(Q。
front==Q。rear)
return true;
else
return false;
}
void QueneTraverse(LinkQuene Q)
{
if(EmptyQuene(Q)==false)
{
LinkNode *p=Q。
front->next;
printf("
当前队列的遍历序列为:");
while(p!=Q。rear)
{
printf("%d->",p->data);
p=p->next;
}
printf("%d
",p->data);
}
}
void EnQuene(LinkQuene &Q, int e)
{
LinkNode *p=(LinkNode *)malloc(sizeof(QNode));
if(!p)
exit(0);
p->data=e;
p->next=NULL;
Q。
rear->next=p;
Q。rear=p;
}
void DeQuene(LinkQuene &Q, int &e)
{
LinkNode *p;
if(EmptyQuene(Q))
{ printf("队列为空!
");
exit(0);
}
p=Q。
front->next;
e=p->data;
Q。front->next=p->next;
if(Q。rear==p)
Q。rear=Q。
front;
free(p);
}
void menu()
{
printf("
***************************
");
printf("**[1]新建队列 **
");
printf("**[2]入队列 **
");
printf("**[3]出队列 **
");
printf("**[4]遍历整个队列 **
");
printf("**[0]退出 **
");
printf("***************************
");
printf("请输入命令:
");
}
void main()
{
LinkQuene Q;
InitQuene(Q);
int a,order;
char ans,temp;
while(1)
{
menu();
ans='n';
scanf("%d",&order);
switch(order)
{
case 1:
do{
printf("请输入队列的元素:
");
scanf("%d",&a);
fflush(stdin); //清空键盘缓冲区(过滤回车)
EnQuene(Q,a);
printf("是否继续添加元素?(Y/N)");
scanf("%c",&ans);
fflush(stdin);
}while(ans=='y' || ans =='Y');
QueneTraverse(Q);
break;
case 2:
if( EmptyQuene(Q))
{
printf("队列为空!
");
break;
}
do{
printf("请输入添加到队列的元素:
");
scanf("%d",&a);
fflush(stdin);
EnQuene(Q,a);
printf("是否继续添加元素?(Y/N)");
scanf("%c",&ans);
fflush(stdin);
}while(ans=='y' || ans =='y');
QueneTraverse(Q);
break;
case 3:
if(EmptyQuene(Q))
{
printf("队列为空!
");
break;
}
else{
do{
DeQuene(Q,a);
fflush(stdin);
printf("元素%d已经出队列
",a);
if(EmptyQuene(Q)==false)
{
printf("是否继续出队列?(Y/N)");
scanf("%c",&ans);
}
else
{
printf("队列已空!
");
break;
}
}while(ans=='y' || ans =='y');
QueneTraverse(Q);
break;
}
case 4:
if(EmptyQuene(Q))
{
printf("队列为空!
");
break;
}
QueneTraverse(Q);break;
case 0:
exit(0);
default:
printf("您输入的命令有误!
");
}
}
}。
全部