课程设计 栈之 后缀表达式求值 中缀表达式转后缀表达式

通过栈实现中缀表达式转后缀表达式的算法,包括预处理输入的后缀表达式,遇到操作数直接输出,栈空时运算符入栈,左括号入栈,右括号触发连续出栈直到遇到左括号,以及处理运算符的优先级。使用C++ STL栈模板完成转换,重点在于理解算法逻辑。
摘要由CSDN通过智能技术生成
题目描述
为了便于处理表达式,常常将普通表达式(称为中缀表示)转换为后缀{运算符在后,如X/Y写为XY/表达式。在这样的表示中可以不用括号即可确定求值的顺序,如:(P+Q)*(R-S) → PQ+RS-*。后缀表达式的处理过程如下:扫描后缀表达式,凡遇操作数则将之压进堆栈,遇运算符则从堆栈中弹出两个操作数进行该运算,将运算结果压栈,然后继续扫描,直到后缀表达式被扫描完毕为止,此时栈底元素即为该后缀表达式的值。输入
输入一行表示后缀表达式,数与数之间一定有空格隔开(可能不只一个空格),最后输入@表示输入结束。


数据保证每一步的计算结果均为不超过100000的整数。


输出
输出一个整数,表示该表达式的值.
样例输入

14  3 20 5 / *8 - + @

样例输出

18

题目已经告知可以使用栈。(1.自己模拟出栈这种数据结构 2.使用C++ STL的内容 )本题相对简单,只是在输入一行后缀表达式的时候要进行预处理,将字符型的运算符号和运算数字整理好即可

include <cstdio>
#include <malloc.h>
#include <cstring>
using namespace std;
#define STACK_INIT_SIZE 10
#define STACK_INCREMENT 2
#define OVERFLOW 0
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
char opera[100005];
typedef int Status;
typedef  int SElemType;
struct SqStack
{
    SElemType *base;   //在栈构造之前和销毁之后,base=NULL
    SElemType  *top;     //栈顶指针
    int stacksize;     //当前分配的存贮空间
};
//S.top=存储的地址,*S.top=存储的内容
void InitStack(SqStack &S);
i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值