中缀表达式转后缀表达式思路步骤分析
一、初始化两个栈: 运算符栈symbolStack 和 存储中间结果的栈 resultStack;
二、从左到右扫描中缀表达式;
三、遇到操作数时,将其压入到 resultStack中;
四、遇到运算符时,比较期与symbolStack栈顶运算符的优先级;
1). 如果symbolStack为空,或栈顶运算符为左括号"(",则直接将此运算符压入symbolStack栈中;
2). 否则,若优先级比栈顶运算符高,也将运算符压入symbolStack栈中;
3). 否则,(运算符的优先级没有symbolStack栈顶运算符的优先级高)将symbolStack栈顶的运算符弹出并压入到resultStack栈中,再次进入第四步骤与symbolStack栈顶的运算符进行比较;
五、遇到括号时:
1). 如果是左括号"(",则直接压入到resultStack中;
2). 如果是右括号")", 则一次弹出symbolStack栈顶的运算符,并压入到resultStack中,直到遇见左括号为止,此时将这一对括号丢弃(相当于是将左括号弹出并丢弃,然后右括号也一并丢弃不需要入栈了);
六、重复步骤二到五直到表达式的最右边;
七、将symbolStack中剩余的运算符一次弹出并压入resultStack栈中;
八、依次弹出resultStack中的元素并输出,结果的逆序就是中缀表达式对应的后缀表达式;
由于resultStack栈在整个使用过程中并没有使用出栈的操作,可以直接使用数组或者是list来完成数据的存储直接顺序输出就是一个后缀表达式了
借鉴记录使用 视频地址 b站数据结构和算法