#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define QueueSize 50
typedef char QueueData;
typedef struct queue
{
QueueData data[QueueSize];
int rear,front;
}SeqQueue;
void Menu()
{
printf("\n");
printf("|…………………………………………|\n");
printf("| 1、建立|\n");
printf("| |\n");
printf("| 2、显示|\n");
printf("| |\n");
printf("| 3、入队|\n");
printf("| |\n");
printf("| 4、出队|\n");
printf("| |\n");
printf("| 5、取队头元素|\n");
printf("| |\n");
printf("| 6、退出|\n");
printf("|…………………………………………|\n");
printf("\n");
printf("请选择菜单项,按回车键完成选择:"); }
//模块1 建立
void Set(SeqQueue *&Q)
{
Q=(SeqQueue*)malloc(sizeof(SeqQueue));
if(Q==NULL)
{
printf("存储空间分配失败!\n");
exit(1);
}
else
{
printf("存储空间分配成功!\n");
}
Q->front=Q->rear=-1; //置空队列
int i=0;
printf("请输入数据,按回车键结束:\n");
fflush(stdin);
do
{
Q->rear++;
scanf("%c",&Q->data[i]);
}
while(Q->data[i++]!='\n');
Q->rear=i-1;
}
//模块2 显示
void Show(SeqQueue *Q)
{
int i=0;
for(i=Q->front+1;Q->data[i]!=Q->data[Q->rear];i++) {
printf("%c",Q->data[i]);
}
}
//模块3 判断队空
int Empty(SeqQueue *Q)
{
return Q->rear==Q->front;
}
//模块4 判断队满
int Full(SeqQueue *Q)
{
return (Q->rear+1)%QueueSize==Q->front;
}
//模块5 入队
int In(SeqQueue *Q,QueueData x)
{
printf("请输入要入队的元素:");
fflush(stdin);
scanf("%c",&x);
if(Full(Q))
{
return 0;
}
else
{
Q->rear=(Q->rear+1)%QueueSize;
Q->data[Q->rear-1]=x;
return 1;
}
}
//模块6 出队
int Out(SeqQueue *Q,QueueData x)
{
if(Empty(Q))
{
return 0;
}
else
{
Q->front=(Q->front+1)%QueueSize;
x=Q->data[Q->front];
printf("出队的元素是:%c\n",x);
return 1;
}
}
//模块7 取队头元素
int FetchFront(SeqQueue *Q,QueueData x)
{
if(Empty(Q))
{
return 0;
}
else
{
x=Q->data[(Q->front+1)%QueueSize];
printf("队头元素是:%c",x);
return 1;
}
}
//模块8 主函数
int main()
{
SeqQueue *Q;
int i,m;
QueueData x;
while(1)
{
system("cls");
Menu();
scanf("%d",&i);
system("cls");
switch(i)
{
case 1:
Set(Q);
m=1;
printf("\n");
system("pause");
break;
case 2:
if(m==1)
{
Show(Q);
printf("\n");
system("pause");
}
else
{
printf("请先建立!\n");
system("pause");
}
break;
case 3:
if(m==1)
{
printf("原始的队列为:");
Show(Q);
printf("\n");
In(Q,x);
printf("现在的队列为:");
Show(Q);
printf("\n");
system("pause");
}
else
{
printf("请先建立!\n");
system("pause");
}
break;
case 4:
if(m==1)
{
printf("原始的队列为:");
Show(Q);
printf("\n");
Out(Q,x);
printf("现在的队列为:");
Show(Q);
printf("\n");
system("pause");
}
else
{
printf("请先建立!\n");
system("pause");
}
break;
case 5:
if(m==1)
{
FetchFront(Q,x);
printf("\n");
system("pause");
}
else
{
printf("请先建立!\n");
system("pause");
}
break;
case 6:
exit(1);
break;
default:;
printf("该菜单项不存在,请重新输入!");
printf("\n");
system("pause");
break;
}
}
}。