彻底搞懂双端队列及输入/输出受限的双端队列

双端队列相关概念

双端队列:两端都可以进行入队和出队操作的队列。
栈:限制其一端既不允许插入也不允许删除。
普通队列:限制其一端不允许插入,而限制另一端不允许删除。

在这里插入图片描述
输入限制的双端队列:限制一端只能进行删除操作,而另一端不做限制,也就是说插入(输入)操作受到了限制。
在这里插入图片描述

输出限制的双端队列:限制一端只能进行插入操作,而另一端不做限制,也就是说删除(输出)操作受到了限制。
在这里插入图片描述

双端队列应用

设有一个双端队列,元素进入该队列的顺序是1,2,3,4试分别求出满足下列条件的输出序列。
1.不可能通过输入受限的双端队列输出的序列是?

先使左端既不能输入,也不能输出,即成了一个栈,看此时不可能的输出序列有10种。
在这里插入图片描述
现在把左端的限制重新放开,就可以导出这10种中的一部分,剩下的就是不可导出的部分了。
在这里插入图片描述
下面一第一组1、4、2、3输出序列为例说明:

在这里插入图片描述

注:其中I代表输入操作,OL代表从左端输出,OR代表从右端输出。

显然第一组是可以输出的,其他同理就不在此赘述了。
下面再以第八组4、2、1、3为例说明:
在这里插入图片描述
显然4输出后,无论从左端还是右端都无法输出2,所以这组不可输出。
同理第九组也不可输出。
所以最后不可能通过输入受限的双端队列输出的序列是第八组4、2、1、3和第九组4、2、3、1

2.不可能通过输出受限的双端队列输出的序列是?

与第一问同理,先使左端既不能输入,也不能输出,即成了一个栈,看此时不可能的输出序列有10种。
在这里插入图片描述
下面还是以第一组1、4、2、3输出序列为例说明:
在这里插入图片描述
由于2先于3出队,而且只能从右端输出,所以3只能从左端入队。
显然第一组是可以输出的,其他同理就不在此赘述了。
下面再以第七组4、1、3、2为例说明:

在这里插入图片描述
显然1输出后,本应先输出的3却只能跟在2后边输出,所以这组不可输出。
同理第九组也不可输出。
所以最后不可能通过输入受限的双端队列输出的序列是第七组4、1、3、2和第九组4、2、3、1

3.既不能由输入受限的双端队列得到,也不能由输出受限的双端队列的输出序列?

只有第九组4、2、3、1

发布了128 篇原创文章 · 获赞 689 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/zag666/article/details/105587005