學過資料結構的程式猿應該都清楚,棧是一種先入後出,後入先出(lifo)的表。即插入和刪除都只能在乙個位置上進行,即棧頂位置。對棧的基本操作有push(入棧)和pop(出棧)。在一般軟體研發的筆試中,就會經常遇到關於入棧次序一定時,出棧次序有哪些?共有幾種?
其實,此處只要了解一下卡特蘭數的演算法結構,參見:
卡特蘭數
由卡特蘭數的思想可知。若有n個元素順序入棧,則對應的出棧次序共有f(n)=f(0)f(n-1)+f(1)f(n-2)+……+f(n-1)f(0)
(其中f(0)=1;f(1)=1);
舉個例子:
如果說入棧元素次序是abc,則由遞推公式可得出棧次序共有5種。出棧順序分別如下:
abc push pop push pop push pop a入棧→a出棧→b入棧→b出棧→c入棧→c出棧
acb push pop push push pop pop a入棧→a出棧→b入棧→c入棧→c出棧→b出棧
bac push push pop pop push pop a入棧→b入棧→b出棧→a出棧→c入棧→c出棧
bca push push pop push pop pop a入棧→b入棧→b出棧→c入棧→c出棧→a出棧
cba push push push pop pop pop a入棧→b入棧→c入棧→c出棧→b出棧→a出棧
ABCDE 入棧,不可能的出棧次序是?
abcde 入棧,不可能的出棧次序是?如果要列出所有可能的次序再去判斷不可能的次序是一件成本非常高的事情。所以這裡面一定是有規律的。所以規律是 答案中出棧的第乙個元素是在原來的次序中是第幾個,那麼他的前面的元素必然都還在棧中。如edcba是可能的,因為e在第乙個,e是原序列中的最後乙個,那abcd必...
資料結構學習 棧
這一系列部落格的目的在於複習鞏固資料結構的基礎知識,為考研面試筆試做準備,所以重在原理,實踐不是重點。參考書籍有嚴蔚敏老師的 資料結構 c語言版 c c 資料結構與演算法速學速用大辭典 define stacksize 100 typedef int datatype typedef structs...
資料結構學習二 棧
棧 限制插入和刪除操作只能在乙個位置上進行的表。對棧的基本操作有push 進棧 和pop 出棧 前者相當於插入,後者則是刪除。棧也叫作先進後出表。本文使用鍊錶實現棧。pragma once 鍊錶型別宣告 struct node pragma once include node.h 棧定義 m hea...