棧是先進先出的一種資料結構。本文是以靜態陣列為儲存結構的棧的實現。
棧的adt如下:
資料元素集合:乙個元素的有序序列,只能在棧頂進行入棧和出棧的操作;
基本方法:
1.stack ():建立乙個空棧;
2.empty ():檢查棧是否為空;
3.push ():在棧頂新增乙個元素;
4.top () :提取棧頂元素;
5.pop () :刪除棧頂元素;
基本操作演算法描述如下:
1.建構函式:
編譯器將為資料成員myarray 和 top分配記憶體,這樣stack 的建構函式只需要執行建立乙個空棧所需要的初始化工作;因為top是指向棧頂的,所以很自然地通過將top賦值為-1就可標誌乙個空棧;
2.判空函式:
由於top是指向棧頂的,所有判斷棧是否為空只需判斷top是否為-1即可;
3.入棧函式:
如果myarray還沒有滿 (即top < max)
(1)將top加一;
(2)將值儲存到myarray[top]
否則處理入棧失敗操作
4.提取棧頂元素函式:
如果棧為非空,返回myarray[top]中的值;否則指示棧空;
5.刪除棧頂元素函式:
如果棧非空,top減一;否則指示棧空;
具體**:
#include //#include "stack.h"
using namespace std;
#define max 10 //棧的最大容量
typedef int stackelement;
//棧的類宣告部分
class stack
;//棧的實現部分
stack::stack () : top (-1) {} //
bool stack::empty () const
void stack::push (const stackelement & item)
else
cerr << "push error\n";
}void stack::display (ostream & out) const
cout << "stack contents: \n";
s.display (cout);
cout << "stack empty ? " << s.empty () << endl;
cout << "top item : " << s.top() << endl;
while (!s.empty ())
cout << "stack empty ?\n" << s.empty () << endl;
cout << "top value " << s.top () << endl;
return 0;
}
資料結構 棧(靜態棧和動態棧)
棧的性質 後進先出 lifo 棧可以分為兩種 靜態棧和動態棧 兩種棧的實現都可以復用單鏈表的 其中靜態棧可以復用順序表的 動態棧可以復用單鏈表的 其實可以從頭到尾實現乙個棧資料結構,但是那樣做是沒有意義的。復用的思想是工程中常見的,而且基於已經測試過的 就減少了中間會遇到的其它問題。首先是靜態棧的實...
陣列模擬棧資料結構
棧又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素。2 先進後出 後進先出 3 棧具有記憶功能 4 棧頂通常用 top 表示,棧底...
資料結構之線性結構 棧結構(靜態棧的實現)
1,棧的定義 所謂 棧 就是一種可以實現後進先出的資料儲存結構。舉個栗子 我們生活中常見的與棧結構很類似的就是我們裝羽毛球的球筒。我們買羽毛球是通常是要買上一筒羽毛球備用。棧結構有兩種主要的操作,乙個入棧,另乙個是出棧。羽毛球入筒的過程就好比是入棧,羽毛球出筒的過程就好比是出棧。這兩個過程模擬得非常...