3. 双端队列
3.1. 定义
双端队列:只允许从两端插入、两端删除的线性表。
输入受限的双端队列:只允许从一端插入、两端删除的线性表。
输出首先的双端队列:只允许从两端插入、一端删除的线性表。
3.2. 问题
若数据元素输入序列为:1,2,3,4,则哪些输出序列是合法的?哪些是非法的?
\[A^{4}_{4}=4!=24 \]
3.2.1. 对栈合法的序列
1,x,x,x | 2,x,x,x | 3,x,x,x | 4,x,x,x |
---|---|---|---|
1,2,3,4 | 2,1,3,4 | ||
1,2,4,3 | 2,1,4,3 | ||
1,3,2,4 | 2,3,1,4 | 3,2,1,4 | |
1,3,4,2 | 2,3,4,1 | 3,2,4,1 | |
1,5,3,2 | 2,4,3,3 | 3,4,2,1 | 4,3,2,1 |
卡特兰数:
\[\frac{1}{n+1} C^{n}_{2n} =\frac{1}{4+1} C^{5}_{8} =14 \]
3.2.2. 对输入受限的双端队列合法的序列
1,x,x,x | 2,x,x,x | 3,x,x,x | 4,x,x,x |
---|---|---|---|
1,2,3,4 | 2,1,3,4 | 3,1,2,4 | 4,1,2,3 |
1,2,4,3 | 2,1,4,3 | 3,1,4,2 | 4,1,3,2 |
1,3,2,4 | 2,3,1,4 | 3,2,1,4 | |
1,3,4,2 | 2,3,4,1 | 3,2,4,1 | |
1,4,2,3 | 2,4,1,1 | 3,4,1,2 | 4,3,1,2 |
1,5,3,2 | 2,4,3,3 | 3,4,2,1 | 4,3,2,1 |
3.2.3. 对输出受限的双端队列合法的序列
1,x,x,x | 2,x,x,x | 3,x,x,x | 4,x,x,x |
---|---|---|---|
1,2,3,4 | 2,1,3,4 | 3,1,2,4 | 4,1,2,3 |
1,2,4,3 | 2,1,4,3 | 3,1,4,2 | |
1,3,2,4 | 2,3,1,4 | 3,2,1,4 | 4,2,1,3 |
1,3,4,2 | 2,3,4,1 | 3,2,4,1 | |
1,4,2,3 | 2,4,1,1 | 3,4,1,2 | 4,3,1,2 |
1,5,3,2 | 2,4,3,3 | 3,4,2,1 | 4,3,2,1 |