棧跟陣列和鍊錶一樣也是一種線性表,只有前後節點,並且一一對應。區別就是棧的操作受限,只能從一頭插入元素或者刪除元素。不像陣列和鍊錶可以任意讀取和刪除。
讀取的操作叫t pop
插入的操作叫 push(t t)
棧的底層實現可以是陣列或者鍊錶。底層是陣列的棧叫順序棧,底層是鍊錶的棧叫鏈式棧
順序棧的最大的特點是,底層使用陣列儲存資料。只能使用固定大小的陣列,當陣列容量滿時,需要申請乙個更大的陣列(一般是1.5倍),然後原始陣列的資料copy到新的陣列,然後在新的陣列上插入新的資料
使用鍊錶儲存資料,不會有資料儲存限制
棧資料結構一般用在語法分析或者是歷史追蹤上比較多。
比如分析輸入的佔位符「{}"是否合法,例如分析:"你好,"。可以利用棧,在遍歷上面的訊息模版時,可以把左符號「{","[","("進行入棧操作,然後遇到右符號出棧乙個元素,然後進行匹配。如果匹配則繼續,如果不匹配報錯。
1+4+3/3+2*4。執行當前公式,可以建立兩個棧,第乙個棧儲存資料,第二個棧儲存運算符號。遍歷計算公示,數字直接入棧,當遇到計算符號比符號棧的棧頂元素優先順序高時入棧,當遇到計算符號比棧頂元素優先順序低或者相等,出棧當前計算符棧的棧頂計算符,然後出棧數字棧的兩個棧頂元素計算,得倒數字壓入數字棧的棧頂。直到計算完結
瀏覽器瀏覽,錯誤堆疊
資料結構與演算法3 棧
1.棧的定義 示意圖 2.棧的基本運算 棧的幾種狀態 最大長度maxsize為4 棧空 壓棧 棧滿 出棧 3.棧的儲存結構 棧有兩種表示方法 順序儲存和鏈式儲存 3.1 順序棧 順序棧資料型別的c語言描述如下 define maxsize 100typedef intdatatype typedef...
資料結構與演算法 (3)單調棧
單調棧即滿足單調性的棧,在單調棧中,從棧頂到棧底的元素是嚴格遞增或者遞減的。單調棧的維護是o n o n o n 的時間複雜度的,因為所有的元素只會進棧一次且出棧後再也不會進棧了。單調棧中元素進棧的過程如下 分析 如上圖所示,當遍歷到某些柱子時,當前柱子會和之前的某個柱子形成凹坑而接住雨水。當柱子數...
資料結構與演算法《棧》
概念 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使...