目錄棧
棧的順序儲存結構
兩棧共享空間:(兩棧空間需求有相反關係時)
棧的鏈式儲存結構(鏈棧) 遞迴
迭代和遞迴的區別:
棧的應用----四則運算表示式求值 佇列
佇列順序儲存的問題
迴圈佇列
佇列的鏈式儲存結構
限定僅在隊尾進行插入和刪除操作的線性表
允許插入和刪除的一端稱為棧頂(top),另一端稱為棧底(bottom),不含任何資料元素的棧稱為空棧(pop = -1)。
棧又稱為先進後出(last in first out)的線性表,簡稱lifo結構
棧的插入操作(push),叫做進棧,也叫壓棧、入棧
棧的刪除操作(pop),叫做出棧,也叫彈棧
陣列有兩個端點,兩個棧有兩個棧底,
讓乙個棧底為陣列的始端,即下標為0處(top=-1時為空)
另乙個棧底為棧的末端,即下標為陣列長度n-1處(top=n時為空)
兩個棧如果增加元素,就向中間延伸
棧頂指標相當於單鏈表頭指標,棧頂放在單鏈表的頭部,(鏈棧為空top=null)
如果棧的使用過程中元素變化不可預料,最好用鏈棧,可控範圍內用順序棧
直接呼叫自己或者間接呼叫自己的函式,成為遞迴函式,
每個遞迴定義必須至少有乙個條件,滿足時遞迴不再執行,即不再引用自身而是返回值推出
1.迭代使用的是迴圈結構,遞迴使用的是選擇結構
2.遞迴能使程式的結構更清晰、更簡潔、更容易讓人理解,從而減少讀懂**的時間
3.但是大量的遞迴呼叫會建立函式的副本,會耗費大量的時間和記憶體
4.迭代則不需要反覆呼叫函式和占用額外的記憶體
字尾(逆波蘭)表示法定義
9 + (3 - 1) × 3 + 10 ÷ 2---->9 3 1 - 3 * + 10 2 / +
是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表
先進先出(first in first out),簡稱fifo
允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭
佇列的抽象資料型別:相鄰元素具有前驅和後繼關係
插入在隊尾加元素,刪除要刪除下標為0的隊頭元素,所有元素都要向前移動。因此引入兩個指標,front指向隊頭元素,rear指向隊尾元素,front = rear是空佇列。隊頭刪除元素,front向後移動,前邊有空閒空間,後邊卻超出陣列長度,產生陣列越界的錯誤,叫做「假溢位」
佇列的頭尾相接的順序儲存結構
這樣空佇列和滿佇列時,都是front = rear?
方法一:設定乙個標誌變數flag,當front == rear,且flag = 0時隊列為空,front == rear,且flag = 1時隊列為滿
方法二:空佇列時,front = rear,滿佇列時,還保留乙個空閒單元,不允許front = rear
就是線性表的單鏈表,只是只能尾進頭出,簡稱為鏈佇列
Leetcode記錄 棧與佇列
想到未來如果換工作 run出去找工作也需要演算法 計畫跟著 隨想錄開始刷題,但是解題過程中發現 隨想錄主要用c j a的 沒有特別的友好,於是記錄下自己做不出的題目以及微調過的 隨想錄題解 class solution else if c else if c else if c else if c ...
棧和佇列 單調佇列 單調棧
講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...
棧和佇列 佇列
佇列 又一種特殊的線性表 佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 允許刪除的一端稱為隊頭 front 允許插入的一端稱為隊尾 rear 當佇列中沒有元素時稱為空佇列。佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾 即不允許 加塞 每次離開的成員總是...