資料結構 棧(靜態陣列)

2021-06-22 16:58:27 字數 1425 閱讀 3880

棧是先進先出的一種資料結構。本文是以靜態陣列為儲存結構的棧的實現。

棧的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,棧的定義 所謂 棧 就是一種可以實現後進先出的資料儲存結構。舉個栗子 我們生活中常見的與棧結構很類似的就是我們裝羽毛球的球筒。我們買羽毛球是通常是要買上一筒羽毛球備用。棧結構有兩種主要的操作,乙個入棧,另乙個是出棧。羽毛球入筒的過程就好比是入棧,羽毛球出筒的過程就好比是出棧。這兩個過程模擬得非常...