1、中缀转后缀,后缀求值13070319张乐2015.4.211、 需求分析明确规定:需要运用栈来实现对中缀表达式转换为后缀表达式,并且再次输入后缀表达式,得出结果。输入形式、输入值的范围;中缀表达式的输入,操作数必须不为负数,并且表达式以=结束输入输出形式;第一次输出后缀表达式,接着输出后缀表达式求得的值程序功能;中缀表达式转换为后缀表达式,后缀表达式求值测试数据:10(20-10)+10=2、 概要设计ADT 定义:class arrStackprivate:int mSize; /栈最多存放元素个数int top; /栈顶指针T *st; /存栈元素的数组public:arrStack(in
2、t sizee) /创建定长顺序栈的实例mSize = sizee;top = -1;st =new TmSize;arrStack( ) arrStack( ) void clear( ) bool isEmpty( )bool push(const T item)bool pop(Ttop = -1;st =new TmSize;arrStack( ) /清空top = -1;arrStack( ) /销毁delete st;void clear( ) /清空top = -1;bool isEmpty( ) /若栈已空返回 trueif(top=-1)return true;return
3、false;bool push(const T item) /入栈 O(1)/*if (top=(mSize-1) /若上溢T *newst = new T mSize*2 ; /扩容到 2 倍for(int i = 0; iin;while(in!=)ai=in;cinin;i+;ai=;i=0;while(ai!=)cout=0s(100);int newope,ope1,ope2,e;char c;coutc,c!=)switch(c)case +: ope2=s.gettop();s.pop(e);ope1=s.gettop();s.pop(e);s.push(ope1+ope2);b
4、reak;case -: ope2=s.gettop();s.pop(e);ope1=s.gettop();s.pop(e);s.push(ope1-ope2);break;case *: ope2=s.gettop();s.pop(e);ope1=s.gettop();s.pop(e);s.push(ope1*ope2);break;case /: ope2=s.gettop();s.pop(e);ope1=s.gettop();s.pop(e);s.push(ope1/ope2);break;default:cin.putback(c);cinnewope;s.push(newope);b
5、reak;cout#includeusing namespace std;template class arrStackprivate:int mSize; /栈最多存放元素个数int top; /栈顶指针T *st; /存栈元素的数组public:char a100;char b100;arrStack(int sizee) /创建定长顺序栈的实例mSize = sizee;top = -1;st =new TmSize;arrStack( ) /清空top = -1;arrStack( ) /销毁delete st;void clear( ) /清空top = -1;bool isEmpt
6、y( ) /若栈已空返回 trueif(top=-1)return true;return false;bool push(const T item) /入栈 O(1)/*if (top=(mSize-1) /若上溢T *newst = new T mSize*2 ; /扩容到 2 倍for(int i = 0; iin;while(in!=)ai=in;cinin;i+;ai=;i=0;while(ai!=)cout=0s(100);int newope,ope1,ope2,e;char c;coutc,c!=)switch(c)case +: ope2=s.gettop();s.pop(e
7、);ope1=s.gettop();s.pop(e);s.push(ope1+ope2);break;case -: ope2=s.gettop();s.pop(e);ope1=s.gettop();s.pop(e);s.push(ope1-ope2);break;case *: ope2=s.gettop();s.pop(e);ope1=s.gettop();s.pop(e);s.push(ope1*ope2);break;case /: ope2=s.gettop();s.pop(e);ope1=s.gettop();s.pop(e);s.push(ope1/ope2);break;default:cin.putback(c);cinnewope;s.push(newope);break;cout m(100);m.input();i=m.trans();Caculator();