顺序队列的基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#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);