#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct Queue{
int *base;
int front;
int rear;
}queue;
//初始化
bool InitQueue(queue *p){
p->base = (int *)malloc(sizeof(queue));
if(!p->base) exit(0);
p->front=p->rear=0;
return 1;
}
//求队列长度
int QueueLength(queue *p){
return (p->rear-p->front+MAXSIZE)%MAXSIZE;
}
//队空判断
bool QueueEmpty(queue *p){
return p->front==p->rear;
}
//队满判断
bool QueueFull(queue *p){
return (p->rear+1)%MAXSIZE==p->front;
}
//入队
int EnQueue(queue *p,int e){
if(QueueFull(p)) return 0;
p->base[p->rear]=e;
p->rear=(p->rear+1)%MAXSIZE;
return 1;
}
//出队
int DeQueue(queue *p,int e){
if(QueueEmpty(p)) return 0;
e = p->base[p->front];
p->front = (p->front+1)%MAXSIZE;
return e;
}
//获取队头元素
int GetHead(queue *p){
if(QueueFull(p)) return 0;
printf("队头元素为:%d\n",p->base[p->front]);
}
//销毁
bool QueueDestory(queue *p){
free(p->base);
}
//清空
bool QueueClear(queue *p){
p->front=p->rear;
}
//遍历输出
int Print(queue *p){
if(QueueFull(p)) return 0;
printf("此时队列元素为:\n");
while(p->front!=p->rear){
printf("%d ",p->base[p->front]);
p->front = (p->front+1)%MAXSIZE;
}
printf("\n");
}
//菜单
void menu(){
printf("-----------------------------\n");
printf("-1.清空队列 2.销毁队列-\n");
printf("-3.入队 4.出队-----\n");
printf("-5.获取队头元素 6.遍历输出-\n");
printf("-7.获取队列长度 8.正常退出-\n");
printf("-----------------------------\n");
}
int main(void)
{
struct Queue queue;
InitQueue(&queue);
while(1){
menu();
printf("请输入选项:\n");
int option;
scanf("%d",&option);
if(option==8) break;
switch(option){
case 1:QueueClear(&queue);break;
case 2:QueueDestory(&queue);break;
case 3:
int n;
printf("请输入要存入数字的个数及数字:\n");
scanf("%d",&n);
for(int i=0;i<n;i++){
int j;
scanf("%d",&j);
EnQueue(&queue, j);
}
break;
case 4:
int i;
DeQueue(&queue,i);
printf("元素%d出队\n",i);
break;
case 5:GetHead(&queue);break;
case 6:Print(&queue);break;
case 7:
int len = QueueLength(&queue);
printf("队列长度为:%d\n",len);
break;
}
}
return 0;
}
数据结构之循环队列(顺序表实现)
最新推荐文章于 2023-02-22 20:34:00 发布