資料結構與演算法 棧

2021-10-24 21:09:22 字數 1252 閱讀 7375

棧是一種線性表僅在表尾進行插入和刪除的線性表,稱為棧頂。是按照先進後出的原則儲存資料,後進者先出,先進者後出,這就是典型的「棧」結構。

當某個資料集合只涉及在一端插入和刪除資料,並且滿足後進先出、先進後出的特性,我們就應該首選「棧」這種資料結構。

用陣列實現的棧,我們叫作順序棧,用鍊錶實現的棧,我們叫作鏈式棧。

陣列棧的實現**

// 基於陣列實現的順序棧

public

class

arraystack

// 入棧操作

public boolean push

(string item)

// 出棧操作

public string pop()

}

陣列棧的時間空間複雜度分析不管是順序棧還是鏈式棧,我們儲存資料只需要乙個大小為 n 的陣列就夠了。在入棧和出棧過程中,只需要一兩個臨時變數儲存空間,所以空間複雜度是 o(1)。(空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的量度, 臨時!)

如果要實現乙個支援動態擴容的棧,我們只需要底層依賴乙個支援動態擴容的陣列就可以了。當棧滿了之後,我們就申請乙個更大的陣列,將原來的資料搬移到新陣列中。

對於出棧操作來說,我們不會涉及記憶體的重新申請和資料的搬移,所以出棧的時間複雜度仍然是 o(1)

但是,對於入棧操作來說,情況就不一樣了。當棧中有空閒空間時,入棧操作的時間複雜度為 o(1)。但當空間不夠時,就需要重新申請記憶體和資料搬移,所以時間複雜度就變成了 o(n)。

入棧操作的均攤時間複雜度就為 o(1)。均攤時間複雜度一般都等於最好情況時間複雜度。

區域性變數和方法呼叫儲存在棧記憶體中,物件儲存在堆記憶體中。

參考部落格

單調棧的應用和案例詳解

題型總結——棧的應用

資料結構與演算法《棧》

概念 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使...

棧(資料結構與演算法)

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...

資料結構與演算法 棧

後進先出 lifo last in first out 最後插入的元素最先出來,是一種 操作受限 的線性表,只允許在端插入和刪除資料 順序棧 用陣列實現,順序棧需要動態擴容,在初始化時需要給定乙個固定大小的陣列,當棧大於固定大小時需要擴充陣列的大小。templateclass myarraystac...