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 初始化棧...