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