順序棧的實現依靠陣列,而陣列需要事先宣告長度,一次性地靜態地分配記憶體空間。這樣就給我們帶來很多不便。因為我們事先並不能精確地估計棧所需的大小,估計大了浪費空間,估計小了後果就嚴重了,導致程式無法正常執行。所以我們通常使用鏈棧這種資料結構。
鏈棧用鍊錶作為儲存結構,棧初始化時僅需給棧頂指標分配記憶體空間,而後每當有資料入棧時再為該資料分配空間,這樣實現了記憶體空間的動態分配。理論上棧的大小可以是無限大的(小心撐爆你的記憶體)。不存在順序棧的諸多問題。
鏈棧將棧頂top看作頭結點,鏈棧的建立就是頭插法建立鍊錶
程式實現:依次把0-9壓棧,再依次出棧並列印。
#include #include #include /*** 鏈棧:相當於頭插法的鍊錶 ***/
#if 0
typedef int elementtype;
typedef struct node stacknode, *linkstack;
void initstack(linkstack top)
int isempty(linkstack top)
int push(linkstack top, elementtype element)
int pop(linkstack top, elementtype *element)
void gettop(linkstack top, elementtype *element)
void main()
int ivalue;
while (!isempty(s))
system("pause");
return;
}#endif
/* 鏈棧的初始化、出棧、入棧、取頂元素、判斷棧頂是否為空 */
typedef int elemtype;
typedef struct linkstack
lstack;
/* 鏈棧的初始化 */
void initstack(lstack *top)
/* 棧是否為空 */
bool isempty(lstack *top)
/* 取鏈棧棧頂元素 */
int gottop(lstack *top, elemtype &value)
else exit(1);
}bool push(lstack *top, elemtype &value)
void pop(lstack *top)
else }
int main()
printf("輸出鏈棧元素 !\n");
棧操作之棧鏈
資料結構 棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂 top 另一端為棧底 bottom 棧底固定,而棧頂浮動 棧中元素個數為零時稱為空棧。插入一般稱為進棧 push 刪除則稱為退棧 pop 棧也稱為後進先出表。作業系統 由編譯器自動分配釋放 存放函式的引數...
鏈棧的基本操作
初始化乙個資料元素為整形的鏈棧,並實現進棧 出棧 獲得棧頂元素等操作。通過控制台將1,2,3,4,5進棧,出棧兩次,獲得棧頂元素並輸出,6進棧,列印棧內的所有內容。include include define maxsize 100 define ok 1 define error 0 using ...
鏈棧的基本操作
鏈棧,即用鍊錶實現棧儲存結構。鏈棧的實現思路同順序棧類似,順序棧是將數順序表 陣列 的一端作為棧底,另一端為棧頂 鏈棧也如此,通常我們將鍊錶的頭部作為棧頂,尾部作為棧底,如圖 1 所示 圖 1 鏈棧示意圖 將鍊錶頭部作為棧頂的一端,可以避免在實現資料 入棧 和 出棧 操作時做大量遍歷鍊錶的耗時操作。...