队列学习(3)

1. 循环队列和栈都是线性结构,是逻辑结构的一种.而存储结构是数据在计算机中的表示,循环队列在计算机内是顺序存储结构,栈在计算机内可是以顺序也可以是链式.所以循环队列和栈都是线性逻辑结构,不能说循环队列和栈是存储结构,只能说它们在计算机内的存储结构

 

2.循环队列解决的是“假溢出”问题,但是仍然会出现真正的溢出问题。(假溢出是下标溢出,真溢出指的是空间溢出)

循环队列面临着数组可能会溢出的问题。

 

3.大小为MAX的循环队列中,f为当前队头元素位置,r为当前队尾元素位置(最后一个元素的位置),则任意时刻,队列中的元素个数为 (r-f+MAX+1)%MAX.

 

分析:教材上说的 (也是大家记住的)求队列公式为: (rear-front+Max)%Max。该公式中的 rear指向队尾元素的下一个位置 ,而本题中r 指 向队尾元素位置

 

如果不是循环队列的话,那么队列中的元素显然是rear-front+1;因为是循环队列,即队尾元素的索引有可能比队头元素要小,所以结果就是(rear-front+1+MAX)%MAX.

 

4.循环两列放在一维数组A[0……M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端均可以进行入队和出队操作,队列中最多能容纳M-1个元素。初始时为空,判断队空和队满。

分析:循环队列的相关条件和公式:
队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度:
1.队空条件:rear==front
2.队满条件:(rear+1)%QueueSIze==front
3.计算队列长度:(rear-front+QueueSize)%QueueSize
4.入队:(rear+1)%QueueSize
5.出队:(front+1)%QueueSize

 

 

当队列为空时,end1表示队头,end2表示队尾的下一个位置,如果end1==end2.可以得出队列中是没有元素的。
当队列为满时,因为end2指向队尾下一个位置,而这个队被放在一个一维数组中,所以最多容纳M-1个元素,如果容纳了M个,队尾指针end2就变成了野指针,因为指向的就不是数组内元素。
end1==(end2+1),这样想,假如队满,队头end1在0位置,队尾元素在M-2位置,end2在M-1位置。所以得出(end2+1)modM。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值