天天看點

Java程式設計:棧

棧的一個實際需求

請輸入一個表達式

計算式:[722-5+1-5+3-3] 點選計算【如下圖】

Java程式設計:棧

請問: 計算機底層是如何運算得到結果的? 注意不是簡單的把算式列出運算,因為我們看這個算式 <code>7 * 2 * 2 - 5</code>, 但是計算機怎麼了解這個算式的(對計算機而言,它接收到的就是一個字元串),我們讨論的是這個問題。-&gt; 棧

棧的介紹

棧的英文為(stack)

棧是一個<code>先入後出(FILO-First In Last Out)</code>的有序清單。

棧(stack)是限制線性表中元素的插入和删除隻能線上性表的同一端進行的一種特殊線性表。允許插入和删除的一端,為<code>變化的一端,稱為棧頂(Top)</code>,另一端為<code>固定的一端,稱為棧底(Bottom)</code>。

根據棧的定義可知,最先放入棧中元素在棧底,最後放入的元素在棧頂,而删除元素剛好相反,最後放入的元素最先删除,最先放入的元素最後删除

圖解方式說明出棧(pop)和入棧(push)

Java程式設計:棧

棧的應用場景

子程式的調用:在跳往子程式前,會先将下個指令的位址存到堆棧中,直到子程式執行完後再将位址取出,以回到原來的程式中。

處理遞歸調用:和子程式的調用類似,隻是除了儲存下一個指令的位址外,也将參數、區域變量等資料存入堆棧中。

表達式的轉換[中綴表達式轉字尾表達式]與求值(實際解決)。

二叉樹的周遊。

圖形的深度優先(depth一first)搜尋法。

棧的快速入門

用數組模拟棧的使用,由于棧是一種有序清單,當然可以使用數組的結構來儲存棧的資料内容,下面我們就用數組模拟棧的出棧,入棧等操作。

實作思路分析,并畫出示意圖

Java程式設計:棧

數組模拟棧代碼實作:

下一篇: Swift 數組