棧(stack)的原理和實現簡述
阿新 • • 發佈:2019-01-24
棧的原理比較簡單易懂,而且相關的資料部落格很多。在這裡,就不過多詳細介紹棧。本篇文章主要簡述棧的基本原理和實現,便於學習和查閱。
棧的原理簡述
棧僅允許在一端進行插入(push)和刪除(pop)運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。
插入:向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;
刪除:從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
簡而言之,最後入棧的一組資料可以最先被取出,這種行為也被叫做LIFO:Last In First Out,即後進先出。
棧的實現
1.標頭檔案
#include<stack>
使用棧時要記住寫上這個標頭檔案。
2.定義
stack<Data_Type> name;
Data_Type為棧要儲存資料的型別,name為要給棧取的名字。
例如:
stack<int> s; // 命名為s的棧用來儲存整型資料
stack<double> s2; // 命名為s2的棧用來儲存雙精度浮點型資料
3.入棧
s.push(Data_Type);
Data_Type要與定義棧時資料型別相匹配。
例如:
s.push(1);
4.出棧
s.pop();
刪除棧頂元素。
注意,這個操作只能刪除棧頂元素,並不能返回棧頂元素。
5.訪問棧頂元素
s.top();
返回棧頂元素。
注意:這個操作只能返回棧頂元素,並不能刪除棧頂元素。
6.判斷是否為空
s.empty();
如果棧是空的,則返回邏輯真,否則返回邏輯假。
7.返回棧中元素個數
s.size();
返回當前棧中儲存資料的個數。
8.賦值
存在兩個型別相同的棧時,用賦值號即可完成賦值。
例如:
stack<int> s1;
s1 = s2;
9.判斷兩個棧是否相等
用相等符號即可。
s == s1;