鏈式儲存mysql 鏈棧 棧的鏈式儲存結構

2021-10-19 21:33:30 字數 1379 閱讀 7841

前面講完了棧的順序儲存結構,我們現在來看看棧的鏈式儲存結構,簡稱為鏈棧。

鏈棧是沒有附加頭結點的運算受限的單鏈表。棧頂指標就是鍊錶的頭指標。

棧是用棧頂來做插入和刪除操作,那麼對於鏈棧的棧頂放在鍊錶的頭部還是尾部呢?

單鏈表有頭指標,而棧頂指標也是必須的,那幹嗎不讓它倆合二為一呢,所以比較好的辦法是把棧頂放在單鏈表的頭部。另外,都已經有了棧頂在頭部了,單鏈表中比較常用的頭結點也就失去了意義,通常對於鏈找來說,是不需要頭結點的。

所以鏈棧的結構是這樣的:

對於鏈棧來說,基本不存在棧滿的情況,除非記憶體已經沒有可以使用的空間,如果真的發生,那此時的計算機作業系統已經面臨宕機崩潰的情況,而不是這個鏈棧是否溢位的問題。

但對於空棧來說,鍊錶原定義是頭指標指向空,那麼鏈棧的空其實就是 top=null 的時候。

鏈棧的結構

對於棧來說,結構體定義需要定義兩部分。乙個是 top 指標,乙個是儲存資料。那麼鏈棧又應該如何設計結構體呢?

與順序棧有點區別,我們先看看以前單鏈表的結構體吧。

單鏈表的結構體定義:

typedef struct node

elemtype data;

struct node *next;

}node;

typedef struct node *linklist; /* 定義linklist */

/* 鏈棧結構 */

typedef struct stacknode

selemtype data;

struct stacknode *next;

} stacknode,*linkstackptr;

以上是鏈棧的乙個結點定義,但是我們還需要加入乙個棧頂指標,所以完整的定義為:

typedef int status;

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

typedef int selemtype;

/* 鏈棧結構 */

typedef struct stacknode

selemtype data;

struct stacknode *next;

} stacknode,*linkstackptr;

typedef struct

linkstackptr top;

int count;

} linkstack;

這裡怎麼多宣告了乙個變數 count?用來幹什麼的嗎?

記錄棧中元素個數,也可以將元素個數屬性放在linkstack型別中定義。

結構體定義完畢之後,後面就可以通過程式設計來熟悉鏈棧的操作了。

延伸閱讀

棧的鏈式儲存

線性表的順序儲存來模擬棧時,在尾部新增或者刪除元素,不會涉及到陣列的元素大量移動 用線性表的鏈式儲存來模擬棧的線性儲存,在頭部新增或刪除,不用從頭到尾遍歷 linkstack.h ifndef my linkstack h define my linkstack h typedef void lin...

C 棧 鏈式儲存

ifndef my linkstack h define my linkstack h typedef void linkstack linkstack linkstack create void linkstack destroy linkstack stack void linkstack cl...

棧 鏈式儲存結構

講完了棧的順序儲存結構,現在來看棧的鏈式儲存結構,簡稱為鏈棧。想想看,棧只是棧頂來做插入和刪除操作,棧頂放在鍊錶的頭部還是尾部?由於單鏈表有頭指標,而棧頂指標也是必須的,所以比較好的辦法是把棧頂放在單鏈表的頭部。都已經有了棧頂在頭部了,單鏈表中常用的頭結點也就失去了意義,通常對於鏈棧來說,是不需要頭...