3.栈混洗
n个数据(a
1
,a
2
,…,a
n
)依次进栈,并随时可能出栈,按照其出栈次序得到的每一个
序列(a
k1
,a
k2
,…,a
kn
)称为一个栈混洗。
现在考虑有三个元素(i,j,k)按照先后次序压入栈中,则可能的栈混洗有:(i,j,
k)、(k,j,i)、(i,k,j)、(j,i,k)、(j,k,i)。(k,i,j)必然非栈混洗。
一般地对于长度为n的输入序列,每一个栈混洗都对应n次push和n次pop构成的合法序
列,反之,由n次push和n次pop构成序列,只要满足“任一前缀中的push不少于pop”这个
限制,则该序列也必然对应于一个栈混洗。
对于上述三个数据的栈混洗,可以推广到栈混洗的甄别的一般情况:对于任何
1<=i<j<k<=n,(k,i,j)必然非栈混洗,其余为栈混洗。推广到更为一般的序列(1,2,3
,…,i,…j,…k,…n),形如(…k,…i,…,j…)的序列必然不是栈混洗。
栈混洗 操作1 操作2 操作3 操作4 操作5 操作6
(i, j, k) push(i) pop(i) push(j) pop(j) push(k) pop(k)
(k ,j, i) push(i) push(j) push(k) pop(k) pop(j) pop(i)
(i, k, j) push(i) pop(i) push(j) push(k) pop(k) pop(j)
(j, i, k) push(i) push(j) pop(j) pop(i) push(k) pop(k)
(j, k, i) push(i) push(j) pop(j) push(k) pop(k) pop(i)
评论0
最新资源