資源簡介
自己打的代碼
測試通過
注釋很全
運算部分是逆波蘭實現(xiàn)的
歡迎學習交流
代碼片段和文件信息
/*******************************************************************************
測試數(shù)據(jù):
輸入:5*(3+2)!
輸出:5#3#2#+*
??????The?result?is:25
********************************************************************************/
#include
using?namespace?std;
/*********************************棧的抽象類的定義****************************/
//template?
class?stack?{
????public:
????????virtual?bool?isEmpty()?=?0;
????????virtual?void?push(const?int&?d)?=?0;
????????virtual?int?pop()?=?0;
????????virtual?int?top()?=?0;
};
/*******************************順序棧類的定義********************************/
//template?
class?seqStack:public?stack?{
????public:
??????seqStack(int?initSize?=?10);????//構(gòu)造函數(shù),默認棧的容量為10
??????bool?isEmpty();???//判斷棧是否為空
??????void?push(const?int&?d);?//進棧函數(shù)
??????int?pop();???//出棧函數(shù)
??????int?top();???//返回棧頂元素
??????~seqStack();??//析構(gòu)函數(shù)
???????
//????private:
??????int?*data;???//棧頂指針
??????int?maxSize;??//棧的容量
??????int?top_p;????//棧頂指針
??????void?resize();????//將棧的容量擴大一倍
??int?trans(char?exp[]);//四則運算
};
/*********************************順序棧類的實現(xiàn)******************************/
seqStack::seqStack(int?initSize)?{
????maxSize?=?initSize;
????data?=?new?int[maxSize];
????top_p?=?-1;
????cout?<“\nCreate?stack?success!\n“;
}
bool?seqStack::isEmpty(){
????return?top_p?==?-1;
}
void?seqStack::resize()?{
????maxSize?*=?2;
????int*?tmp?=?data;
????data?=?new?int[maxSize];
????for?(int?i?=?0;?i?<=?top_p;?++i)?{
????????data[i]?=?tmp[i];
????}
????delete?tmp;
}
void?seqStack::push(const?int&?d)?{
????if?(top_p?==?maxSize-1)?throw?0;
????data[++top_p]?=?d;
????cout<“\nPush?data?success!\n“;
}
int?seqStack::pop()?{
????//如果棧為空,拋出異常值0
????if?(top_p?==?-1)?{
????????throw?0;
????}
????return?data[top_p--];
}
int?seqStack::top()?{
????//如果棧為空,拋出異常值0
????if?(top_p?==?-1)?{
????????throw?0;
????}
????return?data[top_p];
}
?seqStack::~seqStack()?{
????delete?[]data;
?????
}
/*********************************trans函數(shù)的實現(xiàn)******************************/
/**********************exp算數(shù)表達式???postexp后綴表達式***********************/
int?seqStack::trans(char?exp[])
?{
?char?postexp[10];//注意只有10位
?char?ch;
?int?i=0j=0;
?top_p=-1;
?ch=exp[i];
?i++;
?for(;ch!=‘!‘;)//輸入嘆號結(jié)束
?{
?switch(ch)
?{
?case?‘(‘:????//“(”情況
?{
?top_p++;?data[top_p]=ch;?break;
?}
?case?‘)‘:{???//“)”情況
?while(data[top_p]!=‘(‘)
?{
?postexp[j]=data[top_p];
?j++;?
?top_p--;
?}
?top_p--;
?break;
??}
- 上一篇:超市收銀POS機C++
- 下一篇:超全的網(wǎng)絡爬蟲資料含源代碼c++
評論
共有 條評論