鏈棧,即用鍊錶實現棧儲存結構。
鏈棧的實現思路同順序棧類似,順序棧是將數順序表(陣列)的一端作為棧底,另一端為棧頂;鏈棧也如此,通常我們將鍊錶的頭部作為棧頂,尾部作為棧底,如圖 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 ...