23 棧的鏈式儲存結構和基本運算實現

2021-08-20 17:13:15 字數 1820 閱讀 9812

棧的鏈式儲存結構也稱為鏈棧,棧的鏈式儲存結構本質上還是以線性表的鏈式儲存來實現的,一般來說,鍊錶有頭指標,棧也有棧頂指標,那麼可以把棧頂放在鍊錶的頭部,用頭指標來表示棧頂指標,但是這裡我們不用頭結點儲存棧頂節點,而是讓頭結點的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...