棧的實現及應用

2021-07-25 01:45:11 字數 1731 閱讀 4989

1.棧定義

棧又稱堆疊,是一種運算受限的線性表,限制是僅僅允許在表的另外一端進行插入和刪除運算。

2.特點

後進先出、cpu快取利用率相對較高、不允許隨意訪問

3.實現方式

棧有兩種實現方式,一種是順序儲存,和陣列類似。一種是鏈式儲存,和單鏈表類似。

(這是在2013編譯器下)

棧裡面有以下幾種函式:

void push(const t& x);

void pop();

t& top();

bool empty();

size_t size();

棧函式定義和實現:

templateclass stack

stack(const stack& s)//拷貝建構函式

}stack& operator=(const stack&s)//賦值運算子過載

_size = s._size;

for (size_t i = 0; i < _size; i++)

return *this;

}~stack()//析構函式

}//介面函式實現

void push(const t& x)//入棧,插入資料

void pop()//刪除資料

t& top()//返回棧頂元素

bool empty()//判空

size_t size()//元素個數

protected:

void _checkcapacity()//判斷容量

delete _a;

_a = tmp;

_capacity = _capacity * 2 + 10;}}

protected:

t * _a;//儲存資料的指標

size_t _size;//儲存資料個數

size_t _capacity;//容量

};

測試函式:

void teststack()

關於棧的乙個小應用,其中有乙個字尾表示式的計算,也叫做逆波蘭表示式,參加運算的運算元總在操作符前面。

字尾表示式求值過程:順序掃瞄表示式的每一項,如果該項是運算元,則將其壓入棧中,如果是操作符,則從棧中退出兩個運算元,形成運算指令,並將運算結果再壓入棧中。

下面簡單的模擬實現一下字尾表示式:

#include

using

namespace

std;

#include

#include

enum type

;struct cell //cell單元儲存裡面的列舉型別和所push的運算元

;int countprn(cell* rpn, size_t n)

else

if (rpn[i]._type == op_symbol)//若為操作符則出棧運算}}

return s.top();

}void testrpn()

, ,

};cout

<< countprn(rpn, sizeof(rpn) / sizeof(rpn[0]));

}int main()

棧的演算法實現及應用

1.棧的順序儲存結構 1 編寫程式,用不同的儲存方法,實現棧的基本操作。2 判斷乙個表示式中的括號 僅有一種括號,小 中或大括號 是否配對。編寫並實現它的演算法。3 若表示式中既有小括號,又有大括號 或中括號 且允許互相巢狀,但不能交叉,寫出判斷這樣的表示式是否合法的演算法。如 2 3 4 3 為合...

Python實現棧,及棧的應用例項

棧 stack 是限定在表尾進行插入或刪除操作的線性表。因此,對於棧來說,表尾端有其特殊含義,稱為棧頂 top 表頭被稱為棧底 bottom 構造空棧 def init self,size self.size size self.stack 輸出棧 def str self return str s...

棧的實現與應用

棧 棧 stack 是限定盡在表尾進行插入或刪除操作的線性表。與線性表類似,棧也有兩種儲存表示方式。下面是順序棧的實現。include include define maxsize 100 typedef char elemtype 定義順序棧 typedef struct sqstack 初始化棧...