類似於隊列,堆棧是個簡單的數據存儲結構。堆棧中數據進出的順序很重要,舉個例子,餐廳的盤子堆,盤子洗完要堆到上面,而不是插到下面的某個位置(相信不會有人那么做)。當廚師要用到盤子時從最上面的開始拿。即最先放在堆里的盤子會被最后一個用到。
定義:堆棧就是只能在一端插入和刪除數據的鏈表,這個端就叫做棧頂(top),最后一個添加的數據第一個被刪除。因此,這也叫后進先出(LAST IN FIRST OUT)鏈表或是先進后出鏈表(FIRST IN LAST OUT)。
對於堆棧有兩種操作:
- 進棧指令(PUSH):在棧中現有元素頂部添加一個元素,新加入的元素變為最頂端的元素。
- 出棧指令(POP):取出棧頂元素,刪除棧中的這個元素。
有些情況下,棧的最大長度有限。如果棧中元素已經達到最大長度,再用進棧指令會造成堆棧上溢出(stack overflow),相似的,如果堆棧已空還用出棧指令會造成堆棧下溢出(stack underflow)。
下面是堆棧PUSH和POP操作的示意圖:
現實生活的堆棧案例
辦公室中的一天,一個開發者正在開發一個長期的工程項目。這時候老板給他分配了一個新的任務,說這個任務更加重要。開發者將長期任務放在一邊開始這個新的任務。如果這時候電話響了,開發者就要將前兩項任務放在一邊(PUSH)去接電話,當電話接完了,再回到剛才的重要任務(POP),這也完成之后,再繼續(POP)他的長期項目。
堆棧的主要操作:
- PUSH:向堆棧中加入數據。
- POP:取出堆棧中的數據。
其他操作:
- int Top( ):取出棧頂元素。
- int Size( ):返回棧的長度。
- int isStackEmpty( ):檢查堆棧是否為空。