資料結構演算法 棧

2021-09-27 03:30:35 字數 1213 閱讀 4910

是一種操作受限的線性表,在我們平時的日常生活中,可以看到許多與之相似的場景。比如一層一層疊起來的盤子,我們網上疊的時候,是乙個個乙個向上疊加,我們在取的時候,也是從最上面乙個乙個拿走。不能從中間直接抽取

這種滿足先進者後出,後進者先出的就是結構

因為只允許在一端插入和刪除,所以這是一種操作受限的線性表

在某些特定場景下,我們需要的這種資料結構只涉及在一端的插入和刪除,並且資料滿足先進先出,後進後出的特性的時候就應該首選棧這種資料結構

adt 棧(stack)

data

線性表相同,具有相同的型別,相鄰元素具有前驅和後繼關係

opreation

initstack

(*s)

: 初始化棧

destroystack

(*s)

: 若棧存在,銷毀

clearstack

(*s)

: 清空棧

stackempty

(*s)

: 棧是否為空,空返回 true,否返回 false

gettop

(*s, e)

: 若 s 存在,用 e 返回棧頂的元素

push

(*s,e)

: 插入新元素 e 到棧頂

pop(*s,

*e): 刪除棧頂元素,用 e 返回值

stacklenght

(s): 返回棧的元素個數

endadt

棧既可以用陣列實現,也可以用鍊錶來實現。用陣列實現的棧叫做順序棧,用鍊錶實現的棧叫做鏈式棧

不論是順序棧還是鏈式棧,在入棧和出棧的過程中,只需要一兩個臨時變數儲存空間,所以空間複雜度是 o(1)。由於只設計棧頂元素的資料操作,所以時間複雜度為 o(1)

順序棧的動態擴容,和陣列基本相同,在入棧的過程中,如果申請的儲存空間不夠了,那麼需要對原始的空間進行擴容,這個時候就涉及到資料的搬移操作,最壞情況時間複雜度為 o(n)

需要注意的是,在大多數情況下,入棧操作需要的是 o(1) 的時間複雜度,在經過 n 個 o(1) 的入棧操作之後,需要集中觸發一次時間複雜度為 o(n) 的搬移操作,所以平均情況時間複雜度為 o(1)

資料結構與演算法《棧》

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

資料結構演算法之棧

棧是資料結構中的重要演算法之一,又稱為堆疊,是一種受限制的資料結構,其受限制的地方是只能在結構的尾端進行插入和刪除操作。在可以操作的一端成為棧頂,通常設為top,在最先插入資料的地方成為棧底,當top 棧底就意味著棧空。棧的操作一般有 初始化棧 initstack 進棧 push 出棧 pop 判斷...

資料結構棧 佇列演算法

cpp view plain copy include include include include include 兩個棧實現佇列 using namespace std template class queue int size bool empty void push t value t f...