/*需要解决的问题: 任务一: 1,请编写压栈和出栈函数,函数头分别为 int push(bds_stack &s,int e)
int pop(bds_stack &s,int &e) 2,用编写好的函数替代程序中的对应代码 任务二:请在任务一的基础上修改程序,使之可以解决解决二位数以上的表达式计算, 任务三:请修改程序,以便其能够检验出不正确的后缀表达式 另:本程序后缀表达式直接写入数组,同学们可以考虑其他后缀表达式的输入方法 */ 程序如下: #include <iostream.h>
typedef int elemtype;
struct sqstack{ elemtype data[20]; int top; }; //定义栈类型
void main() { char bds_hz[]="42 22 3*+4 2/-#"; //后缀表达式 int i=0; int x1,x2,temp; sqstack bds; //定义一个栈 bds.top=-1; //初始化栈顶指针 while (bds_hz[i]!='#') //依次取得后缀表达式中的字符判断并操作 { if (('0'<=bds_hz[i])&&(bds_hz[i]<='9') ) bds.data[++bds.top]=bds_hz[i]-'0'; //如果是操作数,压栈 else {//如果是操作符 x2=bds.data[bds.top--]; //操作数2,出栈 x1=bds.data[bds.top--]; //操作数1,出栈 //计算 switch (bds_hz[i]) { case '+': temp=x1+x2;break; case '-': temp=x1-x2;break; case '*': temp=x1*x2;break; case '/': temp=x1/x2;break; }
bds.data[++bds.top]=temp; //计算结果压栈 } i++; //指针后移
} cout<<bds.data[0]<<endl; //输出表达式结果
}