循环队列 C语言

博客介绍了循环队列用取模方法改善数组存储越界问题。当 rear 或 front 超过数组最大下标时,通过 rear = (rear + 1) % MAXSIZE 和 front = (front + 1) % MAXSIZE 实现轮回,强调要找到元素间关系。

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

循环队列就是用了 取模 的方法来改善了 数组存储越界的问题。

当 rear 或者 front 超过了数组的最大下标时,用 rear = (rear + 1) % MAXSIZE  和 front = (front + 1) % MAXSIZE来实现一个轮回.

就是自己要去学会找到它们之间的关系。

#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 10

typedef int Data;
typedef struct{
	Data data[MAXSIZE];
	int front,rear;
	int lengh; 
}Queue;
//初始化队列 
void init_queue(Queue *queue);
//判断队列是否为空
bool is_empty(Queue *queue);
//判断队列是否已满
bool is_full(Queue *queue);
//入队
bool enqueue(Queue *queue, Data data); 
//出队 
bool dequeue(Queue *queue);
//显示队列首元素
Data get_queue_front(Queue *queue); 
//显示目前队列内的所有元素
void show_queue(Queue *queue); 
int main()
{
	Queue queue;
	printf("初始化环形数组队列,默认容量为10\n");
	init_queue(&queue);
	printf("把0 1 2 3 4 5依次入队\n"); 
	enqueue(&queue,0); 
	enqueue(&queue,1); 
	enqueue(&queue,2); 
	enqueue(&queue,3); 
	enqueue(&queue,4); 
	enqueue(&queue,5); 
	show_queue(&queue);
	printf("出队列3次\n"); 
	dequeue(&queue);
	dequeue(&queue);
	dequeue(&queue);
	show_queue(&queue);
	printf("把6 7 8 9 10 11 12 13依次入队\n"); 
	enqueue(&queue,6); 
	enqueue(&queue,7); 
	enqueue(&queue,8); 
	enqueue(&queue,9); 
	enqueue(&queue,10); 
	enqueue(&queue,11);
	enqueue(&queue,12); 
	enqueue(&queue,13);
	printf("13入队列失败\n");
	show_queue(&queue);
	printf("出队列6次\n");
	dequeue(&queue);
	dequeue(&queue);
	dequeue(&queue);
	dequeue(&queue);
	dequeue(&queue);
	dequeue(&queue);
	show_queue(&queue);
	return 0;
}
//初始化队列 
void init_queue(Queue *queue)
{
	queue->front = 0;
	queue->rear = -1;
	queue->lengh = 0;
}
//判断队列是否为空
bool is_empty(Queue *queue)
{
	if(queue->lengh == 0)
		return true;
	else
		return false;
}
//判断队列是否已满
bool is_full(Queue *queue)
{
	if(queue->lengh == MAXSIZE)
		return true;
	else
		return false;
}
//入队
bool enqueue(Queue *queue, Data data)
{
	if(is_full(queue))
	{
		printf("队列已满,不能入队\n");
		return false;
	}
	queue->data[queue->rear = ++queue->rear % MAXSIZE] = data; 
	queue->lengh++; 
	return true;
}
//出队 
bool dequeue(Queue *queue)
{
	if(is_empty(queue))
	{
		printf("队列空,不能出队\n");
		return false;
	}
	queue->front = (queue->front + 1) % MAXSIZE;
//	printf("front is %d ",queue->front);
	queue->lengh--;
	return true;
}
//显示队列首元素
Data get_queue_front(Queue *queue)
{
	if(is_empty(queue))
	{
		printf("队列空,不能出队\n");
		return false;
	}
	return queue->data[queue->front];
}
//显示目前队列内的所有元素
void show_queue(Queue *queue)
{
	
	int n = queue->lengh;
	int nfront = queue->front;
	printf("队列内目前的元素 "); 
	while(n != 0)
	{
		printf("%d, ", queue->data[queue->front]);
		queue->front = (queue->front + 1) % MAXSIZE;
		n--;
	}
	printf("\n");
	queue->front = nfront;
}
main函数内容
main函数实现内容

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值