链式存储mysql_链栈:栈的链式存储结构
前面講完了棧的順序存儲(chǔ)結(jié)構(gòu),我們現(xiàn)在來看看棧的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),簡(jiǎn)稱為鏈棧。
鏈棧是沒有附加頭結(jié)點(diǎn)的運(yùn)算受限的單鏈表。棧頂指針就是鏈表的頭指針。
棧是用棧頂來做插入和刪除操作,那么對(duì)于鏈棧的棧頂放在鏈表的頭部還是尾部呢?
單鏈表有頭指針,而棧頂指針也是必須的,那干嗎不讓它倆合二為一呢,所以比較好的辦法是把棧頂放在單鏈表的頭部。另外,都已經(jīng)有了棧頂在頭部了,單鏈表中比較常用的頭結(jié)點(diǎn)也就失去了意義,通常對(duì)于鏈找來說,是不需要頭結(jié)點(diǎn)的。
所以鏈棧的結(jié)構(gòu)是這樣的:
對(duì)于鏈棧來說,基本不存在棧滿的情況,除非內(nèi)存已經(jīng)沒有可以使用的空間,如果真的發(fā)生,那此時(shí)的計(jì)算機(jī)操作系統(tǒng)已經(jīng)面臨死機(jī)崩潰的情況,而不是這個(gè)鏈棧是否溢出的問題。
但對(duì)于空棧來說,鏈表原定義是頭指針指向空,那么鏈棧的空其實(shí)就是 top=NULL 的時(shí)候。
鏈棧的結(jié)構(gòu)
對(duì)于棧來說,結(jié)構(gòu)體定義需要定義兩部分。一個(gè)是 top 指針,一個(gè)是存儲(chǔ)數(shù)據(jù)。那么鏈棧又應(yīng)該如何設(shè)計(jì)結(jié)構(gòu)體呢?
與順序棧有點(diǎn)區(qū)別,我們先看看以前單鏈表的結(jié)構(gòu)體吧。
單鏈表的結(jié)構(gòu)體定義:
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList; /* 定義LinkList */
鏈棧其實(shí)也是個(gè)鏈表,所以可以參考它的實(shí)現(xiàn),棧的結(jié)點(diǎn)定義為:
/* 鏈棧結(jié)構(gòu) */
typedef struct StackNode
{
SElemType data;
struct StackNode *next;
} StackNode,*LinkStackPtr;
以上是鏈棧的一個(gè)結(jié)點(diǎn)定義,但是我們還需要加入一個(gè)棧頂指針,所以完整的定義為:
typedef int Status;
/* SElemType類型根據(jù)實(shí)際情況而定,這里假設(shè)為int */
typedef int SElemType;
/* 鏈棧結(jié)構(gòu) */
typedef struct StackNode
{
SElemType data;
struct StackNode *next;
} StackNode,*LinkStackPtr;
typedef struct
{
LinkStackPtr top;
int count;
} LinkStack;
這里怎么多聲明了一個(gè)變量 count?用來干什么的嗎?
記錄棧中元素個(gè)數(shù),也可以將元素個(gè)數(shù)屬性放在LinkStack類型中定義。
結(jié)構(gòu)體定義完畢之后,后面就可以通過編程來熟悉鏈棧的操作了。
延伸閱讀
此文章所在專題列表如下:
總結(jié)
以上是生活随笔為你收集整理的链式存储mysql_链栈:栈的链式存储结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python json 不好用_Pyth
- 下一篇: java使用impala存放多条sql_