資料結構和演算法學習 棧

2021-10-06 04:45:32 字數 911 閱讀 6235

棧是一種重要的線性結構,可以說是線性表的一種具體形式

官方定義:棧是乙個後進先出的線性表,它要求只在表尾進行刪除和插入操作

棧是一種特殊的線性表(順序表、鍊錶),操作上有一些特殊要求:

1.棧的元素必須「後進先出」。

2.棧的操作只能在這個線性表的表尾進行。

注:對於棧來說,表尾稱為棧的棧頂(top),相應的表頭稱為棧底(bottom)

棧的插入操作稱為push,叫做進棧/壓棧/入棧。類似子彈上膛的過程

棧的刪除操作稱為pop,叫做出棧/彈棧/。如同彈夾中子彈出夾。

棧本質是線性表,有兩種儲存形式,棧的順序儲存結構和棧的鏈式儲存結構。常用的是棧的順序儲存結構。棧的順序儲存結構

棧的順序儲存結構:最開始棧中沒有任何資料,叫做空棧。此時棧底就是棧頂,之後資料從棧頂進入,棧頂棧底分離,整個棧的當前容量變大。資料出棧時從棧頂彈出,棧頂下移,整個棧的當前容量減小。

入棧操作又稱壓棧,要在棧頂進行,每次向棧中壓入乙個資料,top指標+1,直到棧滿為止。

出棧就是從棧頂取出資料,棧的當前容量-1,指標下移

清空乙個棧就是將棧中的元素全作廢,但棧本身物理空間並不發生改變。只需要將棧頂指向棧底。原來的資料還存在,但是讀取不到。

銷毀乙個棧則是釋放掉該棧所佔據的物理記憶體空間。從棧底乙個個往上銷毀/釋放各個單元。(不從棧頂開始是因為棧頂上還有未賦值的單元,從棧頂銷毀則其上方無法被銷毀)

計算棧的當前容量:就是計算棧中元素的個數,只需返回棧頂-棧底即可

棧的最大容量是指該棧佔據記憶體空間的大小,指棧能夠容納多少資料,它與棧的當前容量不是乙個概念。

可以用棧來實現二進位製到十進位制的轉化,比如棧內放二進位制資料,之後乙個乙個彈出並乘2的次數次冪,就能得到十進位制數。

如果用棧來進行二進位製到八進位制的轉換,需要兩個棧,乙個棧放二進位制數,每彈出三個組合成乙個八進位制數,存放到另乙個棧中。

資料結構和演算法學習筆記 棧

引入問題 如何實現瀏覽器的前進後退功能?如何理解棧?後進者先出,先進者後出,這個就是典型的 棧 結構 當某個資料集合只設計在一端插入和刪除資料,並且滿足後進先出的特性,我們就應該首選 棧 這種資料結構 如何實現乙個棧?用 陣列實現的叫順序棧 用鍊錶實現的鏈式棧 基於陣列實現的順序棧 public c...

資料結構和演算法學習重點

1 資料結構是指一組資料的儲存結構 2 演算法就是運算元據的方法 3 資料結構和演算法是相輔相成的,資料結構是為演算法服務的,而演算法要作用在特定的資料結構之上。資料結構和演算法解決的是如何更省 更快地儲存和處理資料的問題,因此,我們就需要乙個考量效率和資源消耗的方法,這就是複雜度分析方法。在學習資...

資料結構和演算法學習筆記

資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。程式設計 資料結構 演算法 簡單來說資料結構就是關係,元素相互之間存在的一種或多種特定關係的集合。1.1 邏輯結構和物理結構 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條...