資料結構和演算法總結--棧
棧的定義
棧是一種操作受限的線性表,只允許在一端進行插入和刪除操作。
棧的特點
先進後出
為什麼需要棧
雖然陣列和連結串列更加靈活,並且都可以滿足只在一端進行插入和刪除操作的需求,但是由於會暴露其他操作,存在引發錯誤操作的風險,所以,當某個資料集合只涉及在一端進行插入和刪除資料,並且滿足先進後出的操作特性時,應首先使用棧這種資料結構。
如何實現一個棧
棧既可以用陣列來實現,也可以用連結串列來實現
用陣列實現的棧,叫順序棧;用連結串列實現的棧,叫鏈式棧
基本操作的效能
入棧時間複雜度O(1), 空間複雜度O(1)
出棧時間複雜度O(1), 空間複雜度O(1)
棧的應用場景
- 函式呼叫
為什麼函式呼叫要用棧來儲存臨時變數?
函式呼叫符合後進先出的特性,用棧來實現最為合適。從呼叫函式進入被呼叫函式,變化的是作用域,從根本上講,只要保證每進入一個新函式,都是一個新的作用域就可以,而實現這個,用棧最合適。進入被呼叫函式,分配一段棧空間給這個函式的變數,在這個函式結束的時候,將棧頂復位,正好回到呼叫函式的作用域。
- 表示式求值(一個棧用於儲存運算元,一個棧用於儲存運算子)
- 括號匹配
相關文章
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 【資料結構】棧和佇列的總結對比資料結構佇列
- 資料結構和演算法-切片實現棧資料結構演算法
- JavaScript 的資料結構和演算法 - 棧篇JavaScript資料結構演算法
- 【PHP資料結構】PHP資料結構及演算法總結PHP資料結構演算法
- 資料結構(棧和佇列)資料結構佇列
- 資料結構—棧和佇列資料結構佇列
- 《資料結構與演算法》——表、棧和佇列資料結構演算法佇列
- 資料結構和演算法面試題系列—棧資料結構演算法面試題
- 資料結構和演算法——棧的面試演算法資料結構演算法面試
- [資料結構與演算法] 邂逅棧資料結構演算法
- 資料結構與演算法分析——棧資料結構演算法
- 資料結構與演算法-5 棧資料結構演算法
- javascript資料結構與演算法-棧JavaScript資料結構演算法
- 資料結構 - 棧資料結構
- 資料結構-棧資料結構
- 資料結構基礎和演算法題系列總結資料結構演算法
- JavaScript 的資料結構和演算法 - 棧程式碼篇JavaScript資料結構演算法
- python演算法與資料結構-棧(43)Python演算法資料結構
- 結構與演算法(02):佇列和棧結構演算法佇列
- 資料結構(1):棧資料結構
- 資料結構之——棧資料結構
- javascript資料結構 -- 棧JavaScript資料結構
- 資料結構之「棧」資料結構
- 資料結構之棧資料結構
- 資料結構與演算法(二)佇列、棧、連結串列資料結構演算法佇列
- 資料結構和演算法資料結構演算法
- 【資料結構】棧(Stack)和佇列(Queue)資料結構佇列
- 資料結構二之棧和佇列資料結構佇列
- 對資料結構和演算法的總結和思考(六)--計數排序資料結構演算法排序
- 對資料結構和演算法的總結和思考(三)--希爾排序資料結構演算法排序
- 資料結構和演算法面試題系列—遞迴演算法總結資料結構演算法面試題遞迴
- 資料結構和演算法面試題系列—隨機演算法總結資料結構演算法面試題隨機
- 資料結構與演算法-棧與佇列資料結構演算法佇列
- 資料結構與演算法——棧(一)【棧的快速入門】資料結構演算法
- 資料結構與演算法整理總結---跳錶資料結構演算法
- 資料結構與演算法整理總結---排序 2資料結構演算法排序
- [資料結構拾遺]字串排序演算法總結資料結構字串排序演算法