什么是堆棧?


類似於隊列,堆棧是個簡單的數據存儲結構。堆棧中數據進出的順序很重要,舉個例子,餐廳的盤子堆,盤子洗完要堆到上面,而不是插到下面的某個位置(相信不會有人那么做)。當廚師要用到盤子時從最上面的開始拿。即最先放在堆里的盤子會被最后一個用到。

定義:堆棧就是只能在一端插入和刪除數據的鏈表,這個端就叫做棧頂(top),最后一個添加的數據第一個被刪除。因此,這也叫后進先出(LAST IN FIRST OUT)鏈表或是先進后出鏈表(FIRST IN LAST OUT)。

對於堆棧有兩種操作:

  • 進棧指令(PUSH):在棧中現有元素頂部添加一個元素,新加入的元素變為最頂端的元素。
  • 出棧指令(POP):取出棧頂元素,刪除棧中的這個元素。

有些情況下,棧的最大長度有限。如果棧中元素已經達到最大長度,再用進棧指令會造成堆棧上溢出(stack overflow),相似的,如果堆棧已空還用出棧指令會造成堆棧下溢出(stack underflow)。

下面是堆棧PUSH和POP操作的示意圖:

stack_vizualization

現實生活的堆棧案例

辦公室中的一天,一個開發者正在開發一個長期的工程項目。這時候老板給他分配了一個新的任務,說這個任務更加重要。開發者將長期任務放在一邊開始這個新的任務。如果這時候電話響了,開發者就要將前兩項任務放在一邊(PUSH)去接電話,當電話接完了,再回到剛才的重要任務(POP),這也完成之后,再繼續(POP)他的長期項目。

堆棧的主要操作:

  • PUSH:向堆棧中加入數據。
  • POP:取出堆棧中的數據。

其他操作:

  • int Top( ):取出棧頂元素。
  • int Size( ):返回棧的長度。
  • int isStackEmpty( ):檢查堆棧是否為空。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM