1. 程式人生 > >棧(stack)的原理和實現簡述

棧(stack)的原理和實現簡述

棧的原理比較簡單易懂,而且相關的資料部落格很多。在這裡,就不過多詳細介紹棧。本篇文章主要簡述棧的基本原理和實現,便於學習和查閱。

棧的原理簡述

棧僅允許在一端進行插入(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;