循环队列的基本操作 严蔚敏版的c语言实现

本文详细介绍了循环队列的基本操作模拟实现,包括队列初始化、入队、出队、计算队列长度及打印队列元素等核心功能。通过具体代码示例展示了如何使用C语言进行循环队列的创建和管理,特别关注了队列满和空的判断条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行的结果

 运行结果说明:

1.为了清清楚楚的表示队首队尾,我设置的打印函数把对应的队头队尾进行了打印

2.按照循环队列的知识,少使用一个位置,通过(q.rear+1)%MAXQSIZE==q.front来判断是否满,因此系统第一次插入的时候最后一个位置随机了一个大数

//循环队列的基本操作模拟实现
#include<stdio.h>
#include<stdlib.h> 
#define MAXQSIZE 10
typedef struct {
	int *base;
	int front;
	int rear;
}SqQueue;

//队列初始化 
int InitQueue(SqQueue &q){
	q.base=(int*)malloc(MAXQSIZE*sizeof(int));
	if(!q.base){
		exit(-1);
	}
	q.rear=q.front=0;
}

//入队的操作
int EnQueue(SqQueue &q,int e) {
	//判断是否满 
	if((q.rear+1)%MAXQSIZE==q.front){
		printf("当前的队列已满");
		return 0;
	}
	//入队 
	q.base[q.rear]=e;
	//修改队尾坐标 
	q.rear=(q.rear+1)%MAXQSIZE;
	return 1;
}

//出队的操作
int DeQueue(SqQueue &q,int &e){
	//判断是否空 
	if(q.rear==q.front){
		return 0;
	}
	//接收出队元素 
	e=q.base[q.front];
	//修改队头坐标 
	q.front=(q.front+1)%MAXQSIZE;	
} 

//队列的长度计算
int QueueLength(SqQueue q){
	return (q.rear-q.front+MAXQSIZE)%MAXQSIZE;
} 

//从头至尾打印元素
void print(SqQueue q){
	printf("\n");
	for(int i=0;i<MAXQSIZE;i++){
		
		printf("%d",q.base[i]);
		if(i==q.rear){
			printf("队尾");
		}
		if(i==q.front){
			printf("队头"); 
		}
		printf("\n");
	}
} 
int main(){
	SqQueue q;
	InitQueue(q);
	for(int i=0;i<9;i++){
		EnQueue(q,i);
	}
	printf("当前的队列长度为:%d",QueueLength(q));
	print(q);
	int e;
	DeQueue(q,e);
	DeQueue(q,e);
	DeQueue(q,e);
	EnQueue(q,11);
	EnQueue(q,12);
	EnQueue(q,13);
	EnQueue(q,13);   //队列已满,失败 
    
	 print(q);
	 return 0;
	
	
}
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值