高分求助;C++数据结构问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 09:09:18
利用栈将下列表达式转为后缀形式,画出栈中元素的变化过程及各次结果。
① b*(d-c)+a
② a+b*(c-d)-e/f

符号 左边坚行为表达式顺序, 每行代表每步栈的状态和屏幕上的输出
基实就是保证栈底是最低优先级,高优先级的先输出, (分为两个优先级

b 栈空 输出 b
* 栈* 输出 b
( 栈*( 输出 b (的引用优先级大于*, 但栈内优先级最小
d 栈*( 输出 bd
- 栈*(- 输出 bd -的引用优先级大于(的栈内优先级
c 栈*(- 输出 bdc
) 栈* 输出 bdc- 发现), 则弹出栈内符号直到弹出(为止
+ 栈+ 输出 bdc-* 因为+的优先级小于*, 所以先弹出*,+再入栈
a 栈+ 输出 bdc-*a+ 最后输出栈中剩余符号

二式就不写了, 方法类式
abcd-*+ef/-

下面是我写的程序, 栈直接用的stl stack, vs2005下测式通过

#include <stack>

//定义符号的类型
enum precedence{
LPAREN = 0,
RPAREN,
PLUS,
MINUS,
TIMES,
DIVIDE,
MOD,
EOS,
OPERAND,
};
//定义符号字符
static char notation[] = {'(', ')', '+', '-', '*', '/', '%', 0};

//(, ), +, -, *, /, %, eos结束符
//定义符号的栈内优先级
static int isp[] = {0, 19, 12, 12, 13, 13, 13, 0};

//定义符号的引入优先级, 两者主要