棧的鏈式儲存結構就是使用鍊錶儲存棧中資料元素,此時的棧稱為鏈棧。通常採用帶頭結點的單鏈表儲存棧。棧的操作許可權在棧頂進行,可將頭節點指標指向棧頂節點,如用top指標指向頭結點,稱為top結點。
a(n-1)
a1a0
圖1.1 棧的邏輯結構
圖1.2 棧的鏈式儲存結構
struct node
tpedef struct node stacknode;
stacknode *top;
top結點的指標指向棧頂元素,棧頂元素用top->next來引用,當top->next==null時表示為空。棧不為空時,top->next->data表示棧頂元素的值。鏈棧不會出現棧滿的情況,只要有可用空間就可以申請元素來放新元素。故不需要事先估計棧的最大容量。
初始化如圖,及建立乙個空的鏈棧,只有top結點,其指標域為空。top結點需要申請才可以得到,**如下:
stacknode * initstack()
已知乙個資料元素x以及鏈棧top,要求完成x進棧要求,如圖所示
分析:假設棧中資料元素型別為整形,虛線代表p進棧後的指標指向。top的指標域指向棧頂元素,每個結點存放乙個資料元素。x進棧需要先為x申請乙個結點空間p並賦值為x,再將p插入到top結點之後,類似單鏈表中的插入結點到表頭。x所在節點p插入到top結點之後,成為了新的棧頂結點。
出棧及刪除棧頂結點。只要棧是非空的,刪除top結點所指向的元素,操作類似於單鏈表中刪除指定節點的後繼。操作思路如圖
演算法中先判斷棧是否為空,空棧無法出棧,在棧不空的情況下,刪除top指標域所指向的結點並釋放空間,即棧頂節點。
鏈棧的操作實際上還是單鏈表的操作,只是在操作中需要注意棧的操作要點即可。鏈棧解決了順序棧的不足之處(「上溢」)。在實際中,通常是根據情況考慮選用順序棧還是鏈棧。例如:當棧中元素最大個數可確定,且變化不大時,可選用順序棧;當棧中元素個數不可估計,或者長度變化較大時,可選用鏈棧。
資料結構之棧的鏈式儲存7 (入棧,出棧等
本次操作採用不帶頭結點的頭插法,方便在棧頂進行入棧和出棧操作 如下 棧只限於在末尾插入或者刪除,建立頭插法不帶頭結點方法較簡單實現 include include using namespace std templatestruct node templateclass linkstack 構造空棧...
入棧和出棧問題
首先要知道對n個元素入棧,其出棧順序共有多少種情況?這個結果是 2n n 1 n n 即如果有3個元素,那麼出棧的順序共有5中情況。a b c 的順序入棧,那麼出棧情況如下 1 abc 2 bac 3 bca 4 cba 5 acb 出棧問題歸根到底為 先入後出原則。如果第乙個出棧的為a,那麼bc還...
棧 鏈式結構 C語言
棧 由於是鏈式結構的棧,所以棧的容量基本上可是等於無限。include includetypedef int datatype typedef struct node stack void init stack stack stack 壓棧 void stack push stack stack,d...