循环队列的基本操作实现(详细全面)

循环队列的基本操作实现
预备知识
判断队空:Q.frontQ.rear
判断队满:(Q.rear+1)%MAXSIZE
Q.front
队头加一:Q->front- (Q->front+l) MAXSIZE;
队尾加一:q->rear=(q->rear + 1) % LENGTH;
计算队长:(q.rear-q.front+LENGTH)%LENGTH;

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
 //队列的顺序存储结构 
typedef struct SqQueue{
	int *base;
	int front;
	int rear;
}SqQueue; 
// 初始化 
int InitSqQueue(SqQueue *q){
	q->base=(int*)malloc(MAXSIZE*sizeof(int));
	if(!q->base){
		return 0;
	}
	q->front=q->rear=0;
	printf("初始化成功!\n");
	return 1;
}
//返回队列的长度 
int Queuelength(SqQueue q){
	return (q.rear-q.front+MAXSIZE)%MAXSIZE;
}
//入队 
int EnQueue(SqQueue *q){
	int e;
	//判断是否队满
	if((q->rear+1)%MAXSIZE==q->front){
		printf("队满\n");
		return 0;
	}
	printf("请输入入队元素\n");
	scanf("%d",&e);
	q->base[q->rear]=e;
	q->rear=(q->rear+1)%MAXSIZE;
	printf("入队成功\n");
	return 0;
}
//出队 
int OutQueue(SqQueue *q){
	//判断是否为空 
	if(q->front==q->rear){
		printf("队列为空!\n");
		return 0;
	} 
	printf("%d出队\n",	q->base[q->front]);
	q->front=(q->front+1)%MAXSIZE;
	return 1;
}

//取队头元素
int getQueueFront(SqQueue q){
	if(q.front!=q.rear){//非空 
		return q.base[q.front];
	}else{
		printf("队列为空\n");
	} 
}

//取队尾元素
int getQueueRear(SqQueue q){
	if(q.front==q.rear){//空 
		printf("队列为空\n");
	}
	if(q.rear==0){
		q.rear=MAXSIZE-1;
		return q.base[q.rear];
	}
	q.rear--; 
	return q.base[q.rear];
}


//判断队是否为空
void isEmpty(SqQueue q){
	if(q.front==q.rear){//为空 
		printf("队列为空\n");
	}else{
		printf("不为空\n");
	}
}
//判断队是否为满 
void isFull(SqQueue q){
	if((q.rear+1)%MAXSIZE==q.front){//已满 
		printf("队列已满\n");
	}else{
		printf("队列未满\n");
	};
}
//遍历队列 
void bianli(SqQueue q){
	while(q.front!=q.rear){
		printf("%d ",q.base[q.front]);
		q.front=(q.front+1)%MAXSIZE;
	}
	printf("\n");
}
int main(){
	SqQueue Q;
	int k,j;
	while (1) {
		printf("1.入队\n");
		printf("2.出队\n");
		printf("3.初始化\n");
		printf("4.求队列长度\n");
		printf("5.取队头元素\n");
		printf("6.取队尾元素\n");
		printf("7.判断是否为空\n");
		printf("8.判断是否队满\n");
		printf("9.遍历队列\n");
		printf("请输入你的选择\n");
		scanf("%d", &k);
		switch (k) {
		case 1:EnQueue(&Q); break;
		case 2:OutQueue(&Q); break;
		case 3:InitSqQueue(&Q);break;
		case 4:j=Queuelength(Q);printf("队列长度为%d\n",j);break;
		case 5:j=getQueueFront(Q);printf("队头元素为%d\n",j);break;
		case 6:j=getQueueRear(Q);printf("队尾元素为%d\n",j);break;
		case 7:isEmpty(Q);break;
		case 8:isFull(Q);break;
		case 9:bianli(Q);break;
		}
	}
	return 0;
} 

若有不足或建议欢迎在评论区指出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值