C语言数据结构-队列顺序存储法

本文介绍了循环队列这一特殊线性表的数据结构,详细阐述了其只允许在队尾插入、队头删除的特性。文章通过C语言实现了一个循环队列的例子,包括入队列和出队列的操作,并解释了如何利用一维数组和front、rear变量来管理队列状态。循环队列优化了存储,避免了数组满和空的情况。

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

    队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头

 只能在一端插入,一端删除 ,先进先出,后进后出

      队列的顺序存储结构通常由一个一维数组和记录队列头元素位置的变量front以及记录队列尾元素位置的变量rear组成

       我们采用循环队列 ,这种队列对于n个元素的数组,只用了n-1个位置 ,并且规定front与rear相等时,队列空,且 rear不能加到front那个位置,所以少用了一个元素 。

//刚开始时,当队列空时,front和rear都为-1,当新增一个结点时,rear加1,front不变;当删除一个结点时,front加1,rear不变 
//也就是说front实际上指向队列的头一个结点的再前面一个 
//rear指向队列的最末尾元素

#include <stdio.h>
#include <malloc.h>
#define MaxSize <存储数据元素的最大个数>

//队列(Queue)是具有一定操作约束的线性表
//只能在一端插入,一端删除 ,先进先出,后进后出

//队列的顺序存储结构通常由一个一维数组和记录队列头元素位置的变量front以及记录队列尾元素位置的变量rear组成

struct QNode{
	ElementType Data[MaxSize];
	int front;
	int rear;
}; 

typedef struct QNode *Queue;

//刚开始时,当队列空时,front和rear都为-1,当新增一个结点时,rear加一,front不变;当删除一个结点时,front加一,rear不变 
//也就是说front实际上指向队列的头一个结点的再前面一个 
//rear指向队列的最末尾元素

 //我们采用循环队列 ,这种队列对于n个元素的数组,只用了n-1个位置 ,因为规定front与rear相等时,队列空,且 rear不能加到front那个位置,所以少用了一个元素 
 
 //入队列
 
 void AddQ(Queue PtrS,ElementType item)
 {
 	if((PtrS->rear+1)%MaxSize==PtrS->front){
 		printf("队列满了");
 		return;
	 }
	 
	 PtrS->rear=(PtrS->rear+1)%MaxSize;//这是取余操作,最多只能与MaxSize相同大小,那么取余为0,其它的相当只是加1而已 
	 PtrS->Data[PtrS->rear]=item;
  } 
 
 
 //出队列
 
 ElementType DeleteQ(Queue PtrQ)
 {
 	if(PtrQ->front==PtrQ->rear)
 	{
 		printf("队列空");
 		return ERROR;
	 }else{
	 	PtrQ->front=(PtrQ->front+1)%MaxSize;
	 	return PtrQ->Data[PtrQ->front];
	 }
  } 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

76博ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值