#include<stdio.h>
#include<stdlib.h>
struct Queue {
int * Data; // 动态分配存储空间
int Front; // 队头
int Rear; // 队尾
int Size; // 队列中元素个数
int MaxSize; // 队列最大容量
};
void Push(struct Queue*Q,int x){
if(Q->Size==Q->MaxSize){
printf("该队列为满\n");
}
else{
Q->Data[Q->Rear++]=x;
Q->Size++;
if(Q->Rear==Q->MaxSize-1)
Q->Rear=0;//循环队列
}
}
int Pop(struct Queue*Q){
if(Q->Size==0){
printf("该队列为空\n");
}
else{
int n;
n=Q->Data[Q->Front++];
if(Q->Front==Q->MaxSize-1){
Q->Front=0;//循坏队列
}
Q->Size--;
return n;
}
}
int Print(struct Queue*Q){
int i,j;
i=Q->Front;
if(Q->Size==0){
printf("该队列为空\n");
return 0;
}
for(j=0;j<Q->Size;j++){
printf("%d ",Q->Data[i++]);
if(i==Q->MaxSize-1)
i=0;
}
}
int main(){
struct Queue * Q;
Q=(struct Queue*)malloc(sizeof(struct Queue));
Q->MaxSize=200;
Q->Data=(int *)malloc(sizeof(int *)*Q->MaxSize);
Q->Front=Q->Rear=0;
Q->Size=0;//循环队列的初始化
while(1){//循环一直不会停止,除非输入4,结束循环
printf("---输入数字(1~3)选择功能---\n");
printf("1:输入一个整数并入队");
printf("2:出队");
printf("3:输出队列中的元素");
printf("4:退出程序\n");
int a,b;
scanf("%d",&a);
switch(a){
case 1:
scanf("%d",&b);
Push(Q,b);
printf("\n");
break;
case 2:
Pop(Q);
printf("\n");
break;
case 3:
Print(Q);
printf("\n");
break;
}
if(4==a)
break;
}
return 0;
}
循环队列的C语言
最新推荐文章于 2024-08-21 16:59:25 发布