队列与栈

 队列与栈

环形队列

环形队列中有队列头head和队列尾tail;

队空条件

head=tail (head所在位置=tail所在位置)

队内存储 

tail的位置始终在存储内容的下一格

        如果此时整个队伍全部存满,那么tail将会与head在同一位置,此种情况与队空条件完全一致无法判断是队空还是队满。

因上述原因统一规定,存储内容比实际内容少一格视为队满

队满判断条件

(tail+1)% size=head;

即队尾位置+1的结果再与队列的总位置数(size)取余,如果余数等于head所在位置则视为队满。

例如

        上图中存储到6的位置此时tail在7的位置,此环形队列总共8个位置,根据公式

(7+1)% 8=0(8÷8取余=0) head在0的位置;此时head的位置与计算结果相等则说明队满。

注:head有时未必会在0的位置,此时公式仍然成立。

题目类型

已知队头位置,队内存储了几个数据,以及队列存储总个数,求队尾的位置。

队头位置0+存储数量3=队尾3

已知队头位置6是,队内存储了5个数据,队列存储总个数是8,求解队尾所在的位置

 

此时再用上述方法

队列头6+存储数据个数5=11;11已经超出了队列存储总数,此时需要除以队列存储总数取余进行修正

 队列头6+存储数据个数5=11;11%队列存储总数8取余=3才是队尾所在位置

        上面例题中队头位置0+存储数量3=队尾3,也可以进行修正,3%11%队列存储总数8取余还是为3并不矛盾。        

例题一

元素按照a,b,c顺序进栈,可能的出栈序列

全部进栈然后出来,出栈序列是c,b,a 

逐个进栈出栈,得出栈序列a,b,c 

a,b先进栈然后出栈,c再进栈出栈,得出栈序列b,a,c 

综上,以某一种固定顺序入栈,可以得到的出栈顺序可能是多种。

例题二

题目中,经常自己设定队列出入队方式进行考察,根据不同题目要求灵活处理

        进入队列的顺序是e1,e2,e3,e4 

选项A:

e1,e2,e3,e4 从左端依次进入如下图

然后依次出队列可得序列:e4,e3,e2,e1 故选项A可得

选项B: 

从左端进入e1,e2,从右端进入e3,再从左端进入e4如下图

然后依次出队列可得序列:e4,e2,e2,e3 故选项B可得

选项C:

从左端进入e1,从右端进入e2,再从左端进入e3,e4如下图

 然后依次出队列可得序列:e4,e3,e1,e2 故选项C可得

选项D:无论从哪端进入都无法形成此序列,也无法得到此输出序列,故D选项不可得

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值