数据结构之循环队列(顺序表实现)

#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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值