棧的鏈式儲存結構也稱為鏈棧,棧的鏈式儲存結構本質上還是以線性表的鏈式儲存來實現的
,一般來說,鍊錶有頭指標,棧也有棧頂指標,那麼可以把棧頂放在鍊錶的頭部,用頭指標來表示棧頂指標,但是這裡我們不用頭結點儲存棧頂節點,而是讓頭結點的next指標指向棧頂節點。
圖1-棧的鏈式儲存結構
棧的鏈式儲存結構定義如下所示:
//定義鏈棧的結點
typedef
struct stacknode
stacknode;
//定義鏈棧結構
typedef
struct linkstack
linkstack;
鏈棧的4要素:
1. 對於鏈棧來說,基本不存在棧滿的情況
2. 進棧操作,將包含e的節點插入到頭節點之後
3. 出棧操作,取出頭節點之後節點的元素並刪除之
4. 棧空條件為top = null,當鍊棧的棧頂節點top為null,說明鏈棧為空,沒有節點。
對於鏈棧來說,基本不存在棧滿的情況,除非計算機已經沒有記憶體可用。但是鏈棧是有可能為空的,對於鏈棧為空的條件就是棧頂指標top = null。
1.初始化棧initstack(&s)
建立乙個空棧s,然後將棧頂節點top置為null
2.銷毀棧clearstack(&s)
釋放棧s占用的全部儲存空間,q指向下乙個節點,p記錄要釋放的節點
}3.判斷棧是否為空stackempty(s)
棧s為空的條件是s->next==null,說明鏈棧中沒有資料節點。
bool stackempty(listack *s)
4.進棧push(&s,e)
將新資料節點e插入到頭節點之後
5 . 出棧pop(&s,&e)
在棧不為空的條件下,將頭節點後繼資料節點的資料域賦給e,然後將其刪除。
6.取棧頂元素gettop(s,e)
在棧不為空的條件下,將頭節點後繼資料節點的資料域賦給e
棧的順序儲存結構和鏈式儲存結構
在表尾進行插入和刪除操作的線性表 仍然滿足線性表的操作,只是在push和pop有些區別 棧頂 top 允許插入和刪除,另一端稱棧底 bottom 不含任何資料元素的棧叫空棧。棧 後進先出 last in first out 的線性表,簡稱lifo結構。棧的插入稱為進棧,也稱壓棧,入棧。棧的刪除稱為出...
棧 鏈式儲存結構
講完了棧的順序儲存結構,現在來看棧的鏈式儲存結構,簡稱為鏈棧。想想看,棧只是棧頂來做插入和刪除操作,棧頂放在鍊錶的頭部還是尾部?由於單鏈表有頭指標,而棧頂指標也是必須的,所以比較好的辦法是把棧頂放在單鏈表的頭部。都已經有了棧頂在頭部了,單鏈表中常用的頭結點也就失去了意義,通常對於鏈棧來說,是不需要頭...
棧(鏈式儲存結構)
通常由乙個一維陣列和乙個棧頂元素變數組成 如下 define maxsize struct stacknode struct stacknode createstack void push struct stacknode s,elementtype x elementtype pop struct...