链式存储mysql_链栈:栈的链式存储结构
前面講完了棧的順序存儲結構,我們現在來看看棧的鏈式存儲結構,簡稱為鏈棧。
鏈棧是沒有附加頭結點的運算受限的單鏈表。棧頂指針就是鏈表的頭指針。
棧是用棧頂來做插入和刪除操作,那么對于鏈棧的棧頂放在鏈表的頭部還是尾部呢?
單鏈表有頭指針,而棧頂指針也是必須的,那干嗎不讓它倆合二為一呢,所以比較好的辦法是把棧頂放在單鏈表的頭部。另外,都已經有了棧頂在頭部了,單鏈表中比較常用的頭結點也就失去了意義,通常對于鏈找來說,是不需要頭結點的。
所以鏈棧的結構是這樣的:
對于鏈棧來說,基本不存在棧滿的情況,除非內存已經沒有可以使用的空間,如果真的發生,那此時的計算機操作系統已經面臨死機崩潰的情況,而不是這個鏈棧是否溢出的問題。
但對于空棧來說,鏈表原定義是頭指針指向空,那么鏈棧的空其實就是 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類型中定義。
結構體定義完畢之后,后面就可以通過編程來熟悉鏈棧的操作了。
延伸閱讀
此文章所在專題列表如下:
總結
以上是生活随笔為你收集整理的链式存储mysql_链栈:栈的链式存储结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python json 不好用_Pyth
- 下一篇: java使用impala存放多条sql_