//顺序存储的队列
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
#define MaxSize 10
//定义队列储存类型
typedef struct node{
ElemType data;
struct node *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
//初始化队列
bool InitQueue(LinkQueue &q){ //传引用更加方便
q.front=q.rear = (LinkNode*)malloc(sizeof(struct node));
q.front=NULL;
//printf("初始化成功!\n");
return true;
}
//判断队列是否为空
bool QueueEmpty(LinkQueue q){
if(q.front==q.rear)
return true;
return false;
}
//入队操作
bool EnterQueue(LinkQueue &q,ElemType x){
LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
q.rear->next = s;
q.rear = s;
return true;
}
//出队操作
bool OutQueue(LinkQueue &q,ElemType &j){ //j用来保存出队数据 引用传递
if(QueueEmpty(q))
return false;
LinkNode *p = q.front->next;
j = p->data;
q.front->next = p->next;
if(q.rear==p)
q.front=q.rear;
free(p);
return true;
}
int main(){
LinkQueue q;
//LinkNode *t = q.front;
int j,x;
int n,N,count1,temp=1;
int choice;
bool flag1,flag2,flag3;
while(temp){
printf("======队列的顺序存储操作演示=======\n");
printf("1. 初始化一个队列\n");
printf("2. 进队操作\n");
printf("3. 出队操作\n");
printf("4. 判断队列是否为空\n");
//printf("5. 读取整个队列\n");
printf("5. 退出顺序表操作演示程序\n");
printf("===========================\n");
printf("\n输入1-5,选择所需功能号:");
scanf("%d", &choice);
printf("\n您选择的功能号为:%d\n", choice);
switch(choice)
{
case 1:
if (InitQueue(q))
printf("\n队列初始化成功!\n");
else
printf("\n队列创建失败!\n");
system("pause");
break;
case 2:
printf("请输入你要进队个数n(n>=1):\n");
scanf("%d",&n);
for(count1 = 0;count1<n;count1++){
printf("请输入第%d个数\n",count1+1);
scanf("%d",&x);
if(flag1=EnterQueue(q,x)){
printf("%d成功进队\n",x);
}
else
printf("入队失败!\n");
}
system("pause");
break;
case 3:
printf("请输入你要出队的个数N(N>=1):\n");
scanf("%d",&N);
for(count1 = 0;count1<N;count1++){
if(flag2=OutQueue(q,j)){
printf("%d出队成功\n",j);
}
else if(QueueEmpty(q)) {
printf("队空!\n");
}
else
printf("出队失败!\n");
}
system("pause");
break;
case 4:
if(flag3=QueueEmpty(q))
printf("队空!\n");
else
printf("队不空!\n");
system("pause");
break;
// case 5:
// // LinkNode *t = q.front;
// while(t->next)
// {
// printf("%d ",t->data);
// t=t->next;
// }
// printf("\n");
// system("pause");
// break;
case 5:
printf("欢迎再次使用\n");
temp = 0;
break;
}
}
return 0;
}