當時我在學習這個的時候也是非常不理解這個問題,乙個棧的壓入和彈出序列的判斷一看不就知道了麼,還去判斷幹嘛。只要符合後進先出的規則就行。但是我在這裡簡單說一下這個壓入和彈出序列是怎麼回事。就是我們給定假設的兩個序列,乙個為壓入序列,乙個為彈出序列。然後我們再通過乙個輔助的棧,把壓入序列的資料乙個乙個push()進入臨時的輔助棧中,如果棧頂元素剛好和彈出序列的資料一樣,那麼我們就彈出,如果不一樣我們就將壓入序列的資料繼續壓入臨時棧中,直到到達序列結束。如果壓入序列結束,臨時棧全部資料彈出那麼就是乙個彈出壓入或者彈出序列。直接上圖理解一下:
**如下:
public我上邊的**使用的陣列來對序列進行實現。arr1表示壓入序列,arr2表示彈出序列。關鍵我們需要抓住的是在壓入時進行迴圈的彈出比較就行了,借助於乙個臨時棧對演算法進行實現。boolean ispoporder(int arr1,int
arr2)
//建立乙個臨時的輔助棧
stacks = new stack<>();
//將資料壓入棧中並進行比較
for(int i = 0,j = 0;i
}return
s.isempty();
}
js資料結構和演算法(二)棧和佇列
棧和佇列都是動態的集合,在棧中,可以去掉的元素是最近插入的哪乙個。棧實現了後進先出。在佇列中,可以去掉的元素總是在集合中存在的時間最長的那乙個。佇列實現了先進先出的策略。棧的官方定義 棧 stack 是乙個後進先出 last in first out,lifo 的線性表,它要求只在表尾進行刪除和插入...
資料結構和演算法之二 棧和佇列
上一文中,我們學習了陣列和鍊錶,它們兩個是儲存資料的最底層結構,是功能完全的線性表。棧和佇列是受限的線性表,啥叫功能完全,功能受限呢?陣列和鍊錶,我們可以對裡面任意位置上的元素進行任意的操作,不受任何限制,而棧和佇列,其內部也是陣列或鍊錶實現,但是對外暴露的操作介面是有限的,棧只能在棧頂進行壓棧和出...
資料結構之棧和佇列
棧 stack 是限定僅在表尾進行插入和刪除操作的線性表。我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出 last in first out 的線性表,簡稱lifo結構。棧的插入操作,叫做進棧,也稱壓棧 入棧。類似子彈入彈夾。...