鏈棧的基本操作

2022-07-26 02:09:13 字數 1424 閱讀 5947

鏈棧,即用鍊錶實現棧儲存結構。

鏈棧的實現思路同順序棧類似,順序棧是將數順序表(陣列)的一端作為棧底,另一端為棧頂;鏈棧也如此,通常我們將鍊錶的頭部作為棧頂,尾部作為棧底,如圖 1 所示:

圖 1 鏈棧示意圖

將鍊錶頭部作為棧頂的一端,可以避免在實現資料 "入棧" 和 "出棧" 操作時做大量遍歷鍊錶的耗時操作。

鍊錶的頭部作為棧頂,意味著:

因此,鏈棧實際上就是乙個只能採用頭插法插入或刪除資料的鍊錶。

例如,將元素 1、2、3、4 依次入棧,等價於將各元素採用頭插法依次新增到鍊錶中,每個資料元素的新增過程如圖 2 所示:

圖 2 鏈棧元素依次入棧過程示意圖

c語言實現**為:

//鍊錶中的節點結構

typedef structlinestacklinestack;

//stack為當前的鏈棧,a表示入棧元素

linestack* push(linestack * stack,int a)

例如,圖 2e) 所示的鏈棧中,若要將元素 3 出棧,根據"先進後出"的原則,要先將元素 4 出棧,也就是從鍊錶中摘除,然後元素 3 才能出棧,整個操作過程如圖 3 所示:

圖 3 鏈棧元素出棧示意圖

因此,實現棧頂元素出鏈棧的 c 語言實現**為:

//棧頂元素出鏈棧的實現函式

linestack * pop(linestack * stack)else

free(p);

}else

return stack;

}**中通過使用 if 判斷語句,避免了使用者執行"棧已空卻還要資料出棧"錯誤操作。

本節,通過採用頭插法運算元據的單鏈表實現了鏈棧結構,這裡給出鏈棧及基本操作的c語言完整**:

#include

#include

typedef structlinestacklinestack;

linestack* push(linestack * stack,int a)

linestack * pop(linestack * stack)else

free(p);

}else

return stack;

}int main()

程式執行結果為:

彈棧元素:4 棧頂元素:3

彈棧元素:3 棧頂元素:2

彈棧元素:2 棧頂元素:1

彈棧元素:1 棧已空

棧內沒有元素

鏈棧基本操作

棧基本概念 棧 stack 是限定在表尾進行插入和刪除操作的線性表 或單鏈表 只能在一段進行插入和刪除,因此不存在,在中間進行插入 棧頂 top 允許插入和刪除的一端。而另一端稱為棧底 bottom 空棧 不含任何資料元素的棧。後進先出 兩個基本操作 棧的插入操作 push 叫做進棧,或壓棧,或入棧...

鏈棧基本操作

棧 stack 是限定在表尾進行插入和刪除操作的線性表 或單鏈表 只能在一段進行插入和刪除,因此不存在,在中間進行插入 棧頂 top 允許插入和刪除的一端。而另一端稱為棧底 bottom 空棧 不含任何資料元素的棧。後進先出 棧的插入操作 push 叫做進棧,或壓棧,或入棧 刪除操作 pop 叫做出...

鏈棧的基本操作

初始化乙個資料元素為整形的鏈棧,並實現進棧 出棧 獲得棧頂元素等操作。通過控制台將1,2,3,4,5進棧,出棧兩次,獲得棧頂元素並輸出,6進棧,列印棧內的所有內容。include include define maxsize 100 define ok 1 define error 0 using ...