理论基础 —— 队列

【概述】

队列(Queue)是一种特殊的线性表,是只能在一端插入在另一端删除的特殊线性表。它按照先进先出的原则存储数据,先进入的数据被压入队首,最后的数据在队尾。

由于队列满足先进先出,后进后出的性质,因此也被称为先进先出表(FIFO)或后进后出表(LILO)

当队列中元素个数为零时称为空队列

【逻辑结构】

队列是一种特殊的线性表,其允许插入(入队)的一端称为队尾(tail),允许删除(出队)的一端称为队首(head)。 

当队列满时再插入元素,将发生上溢,当队列为空时删除元素,将发生下溢。

【队列的顺序存储结构】

队列可用数组来存储,数组的下界为队首位置,数组的上界为队尾位置,在队列的运算中需设置另两个指针:队首指针 head,指向队首元素的前一个位置;队尾指针 tail,指向队尾元素所在位置,两个指针初值设为 0,表示队列为空。

当队列经过一定的入队、出队操作后,队列的低端存在一部分的空闲空间,而队列的高端空间已被用尽,此时尽管数组中还有空间,但由于队列的入队操作只会插入到数组尾部,此时继续入队会发生假溢出

由于假溢出会造成极大的空间浪费,因此可以对其进行克服:

  • 将队列中所有元素均向低地址区移动,但这样十分浪费时间
  • 将存储队列的数组头尾相接,当存放到 n 地址后,下一个地址就翻转为 1

一般来说,队列的顺序存储结构常采用第二种方法,即循环队列

具体操作为对头指针、尾指针进行取模:

  • rail=(rear+1) mod MAXSIZE
  • head=(front+1) mod MAZSIZE

【队列的链式存储结构】

队列的链接存储结构为链队列,其利用单链表来实现队列的链式存储,队首指针即为链表的头指针。

由于其空间是动态扩展的,因此一般不存在上溢的问题,只有当内存没有可用空间时才会出现队列满,但每个元素都需要一个指针域,从而产生了结构性开销。

【实现】

  1. 循环队列:点击这里
  2. 链队列:点击这里
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值