【2】5. 双端队列输出合法性

 

1. 概念区分

栈: 只允许从一端插入和删除的线性表。
队列: 只允许从一端插入、另一端删除的线性表。
双端队列: 只允许从两端插入、两端删除的线性表

 

输入受限的双端队列:只允许从一端插入、两端删除的线性表。
输出受限的双端队列:只允许从两端插入、一端删除的线性表。

 

 

 

 

2.  考点

<1> 判断输出序列的合法性

以栈为例分析思路: 输入序列为 1,2,3,4。    如果第一个输出数是3,那么就意味着 1、2 已经入栈,所以后面无论如何都是2比1先出栈,违背这个顺序的都是不合理的!

对于双端队列来说,如果满足栈的输出合法性,那么必然满足双端序列的输出合法性!
所以对于双端队列(输入/ 输出受限的双端队列),只需要在栈不合法的输出序列中进行判断哪些对于双端队列是可能的! 

 

比如对于输入受限的双端队列:
输出序列 => 4,2,1,3。  先输出了4,说明 1、2、3 已经入栈,这是无论从左边输出还是右边输出都不可能是2先输出! 故不合法。

 

再比如对于输出受限的双端队列(假设只能右边输出):
输出序列为 1,4,2,3 。  1 先进先出,然后插入完成后顺序只能为 3,2,4(因为只能右端输出)。接下来就是判断能不能从两边交替插入形成这样的顺序。 分析后是可以的,所以这个输出序列是合法的!

 

比如: 输出序列为  3,1,2,4  => 2,1,3  该顺序插入这三个,然后右端输出 3 和 1,再左端插入 4 ,最后按序输出 2 和 4。 即3124
如果输出序列是: 4,1,3,2 => 4先输出,说明1 2 3已经入队,因为只能从右端输出,所以插入操作完成后必然顺序是 2,3,1,4。经分析(1 2)不符,所以该输出序列不合法!

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值