關於給定入棧順序,求所有可能的出棧順序的討論

2021-08-18 13:11:57 字數 744 閱讀 3756

最近學習資料結構,關於給定入棧順序,求所有可能的出棧順序的問題有些迷惑(現在也是),於是搜尋了一些相關的材料。我覺得可能是因為目前我沒有理解問題而無法得出答案。詳情見下。

先給出算所有出棧可能的個數的公式,由卡特蘭數可以得到

n = (2n!)/(n! * (n+1)!)

該公式:

c(2n,n)/(n+1) (c(2n,n)表示2n裡取n),名字叫catalan數。附上wiki的鏈結,寫得很詳細:

附上大牛的思路「

折現法」。

最後附上一道題目及原始碼。

//例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。

//借助乙個佇列和乙個棧結構

public boolean ispoporder(int pusha,int popa)

for(int i=0;iqueue.add(pusha[i]);

}for(int i=0;iint ele = popa[i];

if(!seq.isempty() && seq.peek()==ele)else

if(queue.isempty())

queue.poll(); //將ele元素出佇列,因為要從棧中彈出,就不入棧了}}

return

true;

}

該文章多為摘抄,僅為個人學習所用,侵刪,感謝!

給定入棧順序,輸出所有可能出棧情況及所有情況的總數

乙個長度為n的無重複序列入棧的所有出棧方式 例如1 2 3這三個數字,入棧並出棧共有5種方式,分別為 321 312 231 213 123。那麼對於長度為n的無重複序列中所有的出棧方式有哪些呢?為了設計計算的演算法,我們可以用佇列 queue 來模擬輸入,佇列的輸出則按照原先序列的順序。使用乙個棧...

輸出所有可能的出棧順序

構造棧類結構體 stack void initstack stack s,int n 初始化棧的結構 void copystack stack ss,stack s 複製函式 void outputstack stack s 輸出函式 intstackempty stack s 判斷棧是否為空 vo...

由入棧 出棧序列求所有出棧 入棧序列

給出乙個陣列,代表入棧順序,求所有出棧可能性?給出乙個陣列,代表出棧順序,求所有入棧可能性?這兩題解法相同,可利用全排列求出所有組合,再進行可能性分析。全排列 如下 public list permute int nums 這種方法是什麼意思呢?例如abc,在第0位有三種可能,axx,bxx,cxx...