資料結構 棧的順序儲存

2021-10-04 02:36:30 字數 1234 閱讀 4458

棧是一種後進先出的資料結構,也就是說他不像陣列那樣子,可以在中間插入,棧只能夠在上乙個存入資料的後面再存資料,而且只能取現進去的資料。棧簡稱lifo結構。

棧是限定僅在表位進行插入和刪除操作的線性表。允許插入和刪除的一端叫棧頂,另一端叫棧底,不含任何元素的叫空棧

棧的插入操作,叫做進棧,也稱作壓棧,入棧。

棧的刪除操作,叫做出棧,也叫作彈棧。

棧裡面有乙個top變數來指示棧頂元素在陣列中的位置,而且棧的大小是先定義好的,和陣列很相似。這裡還可以引入了乙個棧底bottom的變數,如果有這個變數,要清空棧和銷毀棧會變得很方便,(s -> top = s -> bottom)就可以清空棧。但是很多時候並沒有使用過棧底變數,高階語言封裝的棧就是標準棧,我這裡就用的標準棧。一般top = -1就表示是乙個空棧,top必須小於maxsize。

//棧的結構定義

typedef

int selemtype;

/*selemtype 型別根據實際情況而定,這裡假設為int*/

typedef

struct

sqstack;

/*順序棧的初始化*/

intinitstack

(sqstack *s)

進棧就是把top這個棧頂指標上移,把元素放入棧頂的空間裡。

/*插入元素e為新的棧頂元素*/

status push

(sqstack *s, selemtype e)

s->top++

;//棧頂指標增加1

s->data[s->top]

= e;

//將新插入元素賦值給棧頂空間

return ok;

}

出棧也很簡單,就是把top減一。因為沒有任何迴圈,所以這兩個操作的時間複雜度都是o[1]。

/*出棧操作*/

status pop

(sqstack *s, selemtype *e)

1.只能在棧頂進行增減操作,後進先出。因為這一點可以進行一些順序結構的判定,比如括號的匹配問題。

2.缺點是:要先定義棧的大小,如果資料太多就容易溢位。

ps:本部落格**參考程杰《大話資料結構》

資料結構(棧 順序儲存 )

棧是特殊的線性表,規定插入和刪除在同一端進行 進行插入和刪除的那一端成為棧頂,另一端為棧底 插入為進棧,刪除為出棧 先進後出 ps 例如 abc進棧 出棧共有幾種情況 上溢 超出規定的空間大小還進行插入操作 下溢 棧中元素已經用完了還進行刪除操作 include include include de...

順序儲存 資料結構 棧

備註 以列表為基礎進行對此的封裝,以便達到棧的效果及作用 1 2棧的順序儲存結構 3重點 4 56 自定義棧異常 7class stackerror exception 8pass910 基於列表實現順序棧 11class sstack 12def init self 13 約定列表的最後乙個元素為...

資料結構 棧的順序儲存

include include using namespace std define size 10 pragma warning disable 4996 typedef struct l list void openlist list l 初始化棧 void insertlist list l,...