您当前的位置:首页 > 计算机 > 编程开发 > C语言

双端队列

时间:02-21来源:作者:点击数:

双端队列是指允许两端都可以进行入队和出队操作的队列,如图3-10所示。其元素的 逻辑结构仍是线性结构。将队列的两端分别称为前端和后端,两端都可以入队和出队。 


图3-10  双端队列

在双端队列进队时:前端进的元素排列在队列中后端进的元素的前面,后端进的元素排 列在队列中前端进的元素的后面。在双端队列出队时:无论前端还是后端出队,先出的元素 排列在后出的元素的前面。思考:如何由入队序列a, b, c, d得到出队序列d, c, a, b?

输出受限的双端队列:允许在一端进行插入和删除,但在另一端只允许插入的双端队列 称为输出受限的双端队列,如图3-11所示。


图3-11  输出受限的双端队列

输入受限的双端队列:允许在一端进行插入和删除,但在另一端只允许删除的双端队列 称为输入受限的双端队列,如图3-12所示。而如果限定双端队列从某个端点插入的元素只 能从该端点删除,则该双端队列就蜕变为两个栈底相邻接的栈了。


图3-12  输入受限的双端队列

例如,设有一个双端队列,输入序列为1, 2, 3, 4,试分别求出以下条件的输出序列。
(1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列。
(2)能由输出受限的双端队列得到,但不能由输入受限的双端队列得到的输出序列。
(3)既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列。

解答:

先看输入受限的双端队列,如图3-13所示。假设end1端输入1, 2, 3, 4,那么end2端的 输出相当于队列的输出:1, 2, 3, 4;而end1端的输出相当于栈的输出,n=4时仅通过end1端有14种输出序列(由前面提到的Catalan公式计算得出),仅通过end1端不能得到的输 出序列有4!-14=10种,它们是:
1,4,2,3       2,4, 1,3           3,4,1,2         3,1,4,2              3,1,2,4
4,3, 1,2      4,1,3,2           4,2,3,1           4,2,1,3           4, 1,2,3

通过end1和end2端混合输出,可以输出这10种中的8种,参看下表。其中,SL、XL 分别代表end1端的进队和出队,XR代表end2端的出队。

输出序列 进队出队顺序 输出序列 进队出队顺序
1,4,2, 3 SLXRSLSLSLXLXRXR 3,1,2,4 SLSLSLXLXRSLXRXR
2,4,1,3 SLSLXLSLSLXLXRXR 4,1,2,3 SLSLSLSLXLXRXRXR
3,4,1,2 SLSLSLXLSLXLXRXR 4,1,3,2 SLSLSLSLXLXRXLXR
3,1,4,2 SLSLSLXLXRSLXLXR 4,3,1,2 SLSLSLSLXLXLXRXR

剩下两种是不能通过输入受限的双端队列输出的,即4, 2, 3, 1和4, 2, 1, 3。

再看输出受限的双端队列,如图3-14所示。假设end1端和end2端都能输入,仅end2 端可以输出。如果都从end2端输入,从end2端输出,就是一个栈了。当输入序列为1, 2, 3, 4时,输出序列有14种。对于其他10种不能得到的输出序列,通过交替从end1和end2端 输入,还可以输出其中8种。设SL代表end1端的输入,SR、XR分别代表end2端的输入 和输出,则可能的输出序列及进队和出队顺序见下表。

输出序列 进队出队顺序 输出序列 进队出队顺序
1,4,2,3 SLXRSLSLSRXRXRXR 3,1,2,4 SLSLSRXRXRSRXLXR
2,4,1,3 SLSRXRSLSRXRXRXR 4,1,2, 3 SLSLSLSRXRXRXRXR
3,4,1,2 SLSLSRXRSRXRXRXR 4,2,1,3 SLSRSLSRXRXRXRXR
3, 1,4,2 SLSLSRXRXRSRXRXR 4, 3, 1,2 SLSLSRSRXRXRXRXR

通过输出受限的双端队列不能得到的两种输出序列是4,1,3,2和4,2,3, 1。

综上所述:
1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的是4,1,3,2。
2)能由输出受限的双端队列得到,但不能由输入受限的双端队列得到的是4,2,1,3。
3)既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的是4,2,3,1。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
    无相关信息
栏目更新
栏目热门