循环队列——基础知识很重要

被NVIDA鄙视情理之中的事情,这么简单的基础知识都没掌握,还是静下心好好看书吧。

 

 

基础知识,基础知识,基础知识,细节一定要研究透彻。

 

 

 

循环队列

 

循环队列一般都是用数组来实现的。

为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。

 

 

循环队列边界条件处理:

循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列是"空"还是"满"。

  

解决这个问题的方法至少有两种:

  ① 另设一布尔变量以区别队列的空和满;

  ②另一种方式就是数据结构常用的: 队满时:(rear+1)%n=front,n为队列长度(所用数组大小),由于rear,front均为所用空间的指针,循环只是逻辑上的循环,所以需要求余运算。

 

 

 

Q[0...............M-1],M个元素的数组。队列为空时,队头FRONT与队尾REAR相等。每插入一个元素,REAR增1;每删除一个元素,FRONT减1。

作循环队列用时不能将其填满,因为满了的话REAR标志又与队头标志FRONT相等了,与队列为空时的标志一样,冲突了。

所以要牺牲一个元素的空间了。LENGTH最大只能为M-1;队列满时,(REAR+1)%M == FRONT 就可以用作队列满的判断依据。

经过多次的入队和出队操作后队头和队尾元素都是不确定的,只能在队列满时根据队尾的位置推.

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值