题目:编写程序,做一个菜单,用户可以通过菜单选择:
1、输入一个整数并入队
2、出队
3、输出队列中的元素。
(菜单界面类似下图)
注意:入队前要判断队列是否已满;出队前要判断队列是否为空。
1.基于数组的循环队列结构声明
struct Queue {
int * Data; // 动态分配存储空间
int Front; // 队头
int Rear; // 队尾
int Size; // 队列中元素个数
int MaxSize; // 队列最大容量
};
2.创建队列空间:
struct Queue*Creat(int MaxSize){
struct Queue*Q;
Q=malloc(sizeof(struct Queue));
Q->Data=malloc(sizeof(int)*MaxSize);
Q->Front=Q->Rear=0;
Q->Size=0;
Q->MaxSize=MaxSize;
return Q;
}
3.元素入队:
void EnQueue(struct Queue*Q,int x){
if(Q->Size==Q->MaxSize){
printf("队列已满!\n");
}
if(Q->Rear==Q->MaxSize){//如果rear指向最后位置,则将其折回指向第一个元素
Q->Rear=0;
}
Q->Data[Q->Rear++]=x;//将元素x存入队列,并将rear加1
Q->Size++;//存入数据后队列的元素个数增加
}
4.元素出队:
int Out(struct Queue *Q){
if(Q->Front!=Q->Rear){//如果Rear和Front指向不同的地方则继续
Q->Front++;//将第一个元素出队
Q->Size--;//出队后队列元素个数减1
return Q->Data[q->Front-1];//返回出队的元素
}
return -1;如果Rear和Front指向不同的地方则队列无元素
}
5.输出队列元素:
void Print(struct Queue*Q){
int k=Q->Front;
while(k!=Q->Rear)
{
printf("%d ",Q->Data[k]);//输出队列元素
k++;//连续输出
}
}
实验源代码:
#include<stdio.h>
struct Queue {
int * Data; // 动态分配存储空间
int Front; // 队头
int Rear; // 队尾
int Size; // 队列中元素个数
int MaxSize; // 队列最大容量
};
//创建空队列
struct Queue*Creat(int MaxSize){
struct Queue*Q;
Q=malloc(sizeof(struct Queue));
Q->Data=malloc(sizeof(int)*MaxSize);
Q->Front=Q->Rear=0;
Q->Size=0;
Q->MaxSize=MaxSize;
return Q;
}
//入队
void EnQueue(struct Queue*Q,int x){
if(Q->Size==Q->MaxSize){
printf("队列已满!\n");
}
if(Q->Rear==Q->MaxSize){
Q->Rear=0;
}
Q->Data[Q->Rear++]=x;
Q->Size++;
}
//出队
int Out(struct Queue *q){
if(q->Front!=q->Rear){
q->Front++;
q->Size--;
return q->Data[q->Front-1];
}
return -1;
}
void Print(struct Queue*Q){
int k=Q->Front;
while(k!=Q->Rear)
{
printf("%d ",Q->Data[k]);
k++;
}
}
int main(){
struct Queue*Q;
Q=Creat(100);
printf("---输入数字(1~3)选择功能---\n");
printf("1:输入一个整数并入队 2:出队 3:输出队列中的元素 4:退出程序\n");
int m,n;
scanf("%d",&m);
int i,temp;
while(m!=4){
if(m==1) {
printf("请输入一个整数:");
scanf("%d",&n);
EnQueue(Q,n);
}
if(m==2){
temp=Out(Q);
if(temp!=-1)
printf("出队成功,出队的元素是%d:\n",temp);
else
printf("队列为空,出队失败!\n");
}
if(m==3) {
printf("输出队列元素为:");
Print(Q);
printf("\n");
}
printf("---输入数字(1~3)选择功能---\n");
printf("1:输入一个整数并入队 2:出队 3:输出队列中的元素 4:退出程序\n");
scanf("%d",&m);
i++;
}
}
实验结果示范: