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)不符,所以该输出序列不合法!