資料結構與演算法 6 鏈棧

2021-10-04 17:25:15 字數 1436 閱讀 3109

順序棧的問題在於怎樣恰當的分配空間,當棧中元素數目變化範圍較大或者不清楚棧中的資料元素數目時,可以考慮鏈式儲存結構,用鏈式儲存結構實現的棧稱為鏈棧。

鏈棧通常用單鏈表表示,因此其節點結構與單鏈表相同。由於棧的插入和刪除操作只能在一端進行,對於單鏈表來講,在首端進行插入和刪除比在尾端相對容易一些,因此,將單鏈表的首端作為棧頂,其結構如下圖所示。

鏈棧的基本操作的具體實現演算法如下。

#include

#include

#include

typedef

int stackentry;

//結點結構體,和單鏈表結點一樣

typedef

struct node

stacknode,

*stacknodeptr;

//鏈棧結構體,只有乙個結點指標成員

typedef

struct stack

stack,

*stackptr;

typedef

enum status

status;

//經常需要生成新的結點,方便起見,封裝成函式

stacknodeptr makenode

(stackentry elem)

else

return np;

}status stack_push

(stackptr s, stackentry elem)

else

return outcome;

}bool stack_empty

(stackptr s)

status stack_pop

(stackptr s, stackentry* elem)

else

return outcome;

}status stack_top

(stackptr s, stackentry* elem)

else

return outcome;

}//定義乙個結點作為棧底,而不是null

status stack_init

(stackptr s)

else

return outcome;

}void

stack_clear

(stackptr s)

s->top->next =

null;}

void

stack_print

(stackptr s)

printf

("\n");

}int

main()

return0;

}

對比順序棧,可以看到鏈式棧的實現設計更多的指標操作,較為容易出錯。由於實際應用中,一般而言,棧的資料元素不會特別多,現在記憶體也白菜價,多分配點空間也沒啥。因此,選用簡單的順序儲存結構足矣。

資料結構 棧 鏈棧

棧的插入和刪除只在棧頂進行操作,在單鏈表中,頭指標是單鏈表的必須元素 而在棧中,棧頂指標也是鏈棧的必須元素,且一般將棧頂放在單鏈表的頭部。線性表有順序儲存結構和鏈式儲存結構,棧屬於線性表的一種,也具有順序儲存結構和鏈式儲存結構。對於棧的鏈式儲存結構,一般稱之為鏈棧。棧的特點 先進後出 棧函式實現 1...

資料結構 鏈棧

編寫乙個程式,實現鏈棧 假設棧中元素型別為char 的各種基本運算。並完成下面功能 1 初始化鏈棧s 2 判斷鏈棧s是否非空 3 依次進鏈棧元素a,b,c,d,e 4 判斷鏈棧s是否非空 5 輸出鏈棧長度 6 輸出從棧頂到棧底元素 7 輸出出鏈棧序列 8 判斷鏈棧s是否非空 9 釋放鏈棧。inclu...

資料結構 鏈棧

鏈式儲存的棧稱為鏈棧,結構如下圖 鏈棧無滿棧問題,空間可擴充,但有棧空問題,棧空的條件為top next null。進棧與入棧僅在棧頂進行,鏈式棧的棧頂在棧表頭。鏈棧的定義如下 struct stacknode class stack 建立頭結點 stack void push int item 入...