列表是一種最自然的數據組織方式。上一章已經介紹如何使用 List 類將數據組織成一個列
表。如果數據存儲的順序不重要,也不必對數據進行查找,那么列表就是一種再好不過的
數據結構。對于其他一些應用,列表就顯得太過簡陋了,我們需要某種和列表類似但是更
復雜的數據結構。
棧就是和列表類似的一種數據結構,它可用來解決計算機世界里的很多問題。棧是一種高
效的數據結構,因為數據只能在棧頂添加或刪除,所以這樣的操作很快,而且容易實現。
棧的使用遍布程序語言實現的方方面面,從表達式求值到處理函數調用
4.1 對棧的操作
棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。咖啡廳內
的一摞盤子是現實世界中常見的棧的例子。只能從最上面取盤子,盤子洗凈后,也只能摞
在這一摞盤子的最上面。棧被稱為一種后入先出(LIFO,last-in-first-out)的數據結構。
由于棧具有后入先出的特點,所以任何不在棧頂的元素都無法訪問。為了得到棧底的元
素,必須先拿掉上面的元素。
對棧的兩種主要操作是將一個元素壓入棧和將一個元素彈出棧。入棧使用 push() 方法,出
棧使用 pop() 方法。圖 4-1 演示了入棧和出棧的過程。
另一個常用的操作是預覽棧頂的元素。 pop() 方法雖然可以訪問棧頂的元素,但是調用該方
法后,棧頂元素也從棧中被永久性地刪除了。 peek() 方法則只返回棧頂元素,而不刪除它。