前提:栈和队列
栈: 先进后出
队列:先进先出
对于元素1,2,3,4按照顺序进出栈和队列时:
对于入栈,出栈时: 可以进一个元素,出一个元素: 能得到1234出栈顺序,也可以进入几个元素后再开始出栈,比如 进入123后,开始出一个元素3, 再出一个元素2,再进一个元素4,再出栈得到的顺序为 3241
如果出栈或者出队是4开头的,说明是全部元素进入后,才进行的出栈,出队操作。
如果输出序列不是4开头的,说明某个元素进来后就输出了,并不是全部元素进来后才输出
双端受限出队
左端完全受限:
这种情况就相当于栈,先进后出
进入1234 出队顺序为 4321
右端只有输出没有输入
对于上面左端相当于是栈,右边是队列,不过右端只能输出。
如果输出 4123时,顺序为,全部元素进入后,先出4而且是从左端的栈出, 剩余的元素 从右端按照队列出。
对于 4132时,输出第一个元素4,从左端出栈,第二个元素从右端按照先进先出出队列1,剩余23时,均从左端栈出。
第一个出队元素是4,说明是全部元素进入后再去输出的,4输出后,只能1或者3出,因为输入的元素列表中就只剩1,2,3了, 元素2 不能作为第二个输出的元素。
技巧: 对于这种只有一端输入,两端输出时,可以列一个序列 1234 然后,这个序列可以选择是从栈还是从队列中输出,输出后的元素要从序列中进行删除。
右端 只有输入没有输出
输出 4123时,1,4左端输入,2,3右端输入
对于 4132这个顺序,4肯定是左边输入的,1如果是左边输入,则2,3则右端输入,得到4123,得不到4132; 同样,1如果是右边输入的,2,3如果是右边输入得到输出序列有123,如果是左边输入的,则得到 4321 。得不到4132序列
对于序列 4213 呢,24从左端输入,13从右端输入,对于输出队列,左端输出队列 + 右端输出队列。
同理: 4231这个序列是得不到的。
例子:
参考:
数据结构(18)输入受限的双端队列和输出受限的双端队列详解__李白_的博客-CSDN博客
数据结构复习6:双端队列梳理分析_在双端队列中输出受限,当两端输入时,哪一端先输出_Joy_joye的博客-CSDN博客
练习题: 里面有错误的地方,需要自己甄别一下
数据结构复习(栈和队列)_设依次进入循环队列的元素是1 2 3 4 5,则出队的序列是( )_霏ིྀ宇ིྀ的博客-CSDN博客
关于受限的双端队列输入序列1234所得序列问题的详细解答_Srziii的博客-CSDN博客