/***********************************************/
用向量實(shí)現的棧:
template <typename T>
struct Stack : private std::vector<T> { //向量棧從向量類(lèi)模板派生;
typedef std::vector<T> Base; //vector的別名為Base;
Stack(void) : Base(void) { } //構造空棧;
bool empty(void)const{ return Base::empty();} //判空函數;
int size(void)const{ return Base::size(); } //返回棧中元素個(gè)數;
T& top(void){ return Base::back(); } //返回對棧頂元素的引用;
void pop(void){ Base::pop_back(); } //彈棧;
void push(T const& v){ Base::push_back(v); } //壓棧;
void clear(void){ Base::clear(); } //清空函數;
};
向量棧類(lèi)是從向量類(lèi)派生出來(lái)的類(lèi)結構,它只具有向量類(lèi)模板
容器的某些功能;是一種后進(jìn)先出的容器結構;
/***********************************************/
/******************************************************/
Lstack用單量表實(shí)現的棧:
template <typename T>
struct Lstack : private Slist<T> { //單鏈表棧從單鏈表類(lèi)模板中私有派生;
typedef Slist<T> Base; //單鏈表類(lèi)型的別名Base;
Lstack(void) : Base(void){ } //構造空棧;
bool empty(void)const{ return Base::empty(); }//判空函數;
int size(void)const{ return Base::size(); } //返回棧中元素個(gè)數;
T& top(void){ return Base::front(); } //返回對棧頂元素的引用;
void pop(void){ Base::pop_front(); } //彈棧;
void push(T const& v){ Base::push_front(v); } //壓棧;
void clear(void){ Base::clear(); } //清空函數;
};
單鏈表棧類(lèi)是單鏈表類(lèi)模板的派生類(lèi),之有它的部分功能;
是后進(jìn)先出的存儲結構,只能操作棧頂節點(diǎn);
/*****************************************************/
/*****************************************************/
用不同進(jìn)制輸出整數(棧的應用)
string print(int value, int base = 10)
{
string digit_char = "0123456789ABCDEF";
string result = "";
if(value < 0)
{
value = -value;
result += "-";
}
stack<char> stk;
do{
stk.push(digit_char[value % base]);
value /= base;
} while(value > 0);
while(!stk.empty())
{
result += stk.top();
stk.pop();
}
return result;
}
/********************************************************/
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。