【数据结构】队列(顺序存储结构、链式存储结构) C语言例程



队列(queue)是只允许在一段进行插入操作,而在另一端进行删除操作的线性表。具有先进先出的特点,允许插入的一段称为队尾,允许删除的一端称为队头。

队列

队列的顺序存储结构

顺序存储的不足

首先建立一个长度为n的数组,队列中存储的数据不大于n。在队列中添加一个元素入下图所示

入队列

在队尾后追加一个元素,即可。那么删除一个元素呢?在队头出删除一个元素后,前面会空出一个位置,因此将后面的元素均向前移动一位。

出队列

但是这样会随着队列中的数据越来越多,而使得每次删除一个元素,都需要移动全部元素,对性能影响比较大。

所以不妨可以移动队头,这样操作就简单的多。

出队列_1

为了避免当队列中没有元素和只有一个元素时,队头和队尾重合,不妨将队尾向后移动一位,指向最后一个元素的下一位空位置。

这样的存储方式也有很多问题,第一,当数组第5位添加一个元素时,队尾应该指向哪里?第二,随着队列的元素删除,数组前面的位置出现大量的空位置,因此引入循环队列,将数组的头和尾连接起来,这样就可以很好的处理上述问题。


循环队列

需要注意的是,因为循环队列在队列满员时,队头和队尾是重合的,这显然和空队列时是混淆的,因此我们要保留一个空闲位置,认为此时队列已满。

满队列

现在实现循环队列的代码。

顺序存储结构如下:

#define MAXSIZE (20)
typedef struct
{
   
    int data[MAXSIZE]; //数组,类型为int,可自行定义
    int front; //队头-数组的下标
    int rear; //队尾
}sqQueue;

队列的初始化代码:

/* 初始化为空队列 */
void InitQueue(sqQueue *Q)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值