#include<iostream>
using namespace std;
template <class T>
class Stack{
public:
void clear();
bool push();
bool pop(T& item);
bool ttop(T& item);
bool isEmpty();
bool isFull();
};
template <class T>
class arrStack : public Stack <T> {
private:
int mSize;
int top;
T *st;
public:
arrStack(int size){
mSize=size;
top=-1;
st=new T [size];
}
arrStack(){
top=-1;
}
~arrStack(){
delete [] st;
}
bool push(const T item){
if(top==mSize-1){
cout<<"overflow\n";
return false;
}
else{
st[++top]=item;
return true;
}
}
bool pop(T & item){
if(top==-1){
cout<<"stack is empty\n";
return false;
}
else {
item = st[top--];
return true;
}
}
bool ttop(T & item){
if(top==-1){
cout<<"stack is empty\n";
return false;
}
else{
item=st[top];
return true;
}
}
};
int readint(char s){
int temp=0;
temp=s-'0';
while(cin>>s){
if(s==','){
break;
}
temp*=10;
temp+=s-'0';
}
return temp;
}
//by sdu_cst_lqvir
int main(){
int num;
int temp1,temp2;
char c;
arrStack<int> ans(10000);
while(cin>>c){
if(c=='#') break;
if(c==',') continue;
if(c>='0'&&c<='9'){
num=readint(c);
ans.push(num);
continue;
}
switch (c){
case '+':
ans.pop(temp1);
ans.pop(temp2);
ans.push(temp1+temp2);
break;
case '-':
ans.pop(temp1);
ans.pop(temp2);
ans.push(temp2-temp1);
break;
case '*':
ans.pop(temp1);
ans.pop(temp2);
ans.push(temp1*temp2);
break;
case '/':
ans.pop(temp1);
ans.pop(temp2);
ans.push(temp2/temp1);
break;
};
}
int res;
ans.pop(res);
cout<<res<<endl;
return 0;
}
数据结构与算法实验:用栈实现后缀表达式计算
最新推荐文章于 2024-04-21 12:45:57 发布