日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

链式存储mysql_链栈:栈的链式存储结构

發(fā)布時(shí)間:2023/12/1 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链式存储mysql_链栈:栈的链式存储结构 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前面講完了棧的順序存儲(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。