~~~~~~~ 生活中我们通常使用中缀表达式进行计算,而在数据结构与算法中,往往使用后缀表达式的频率较高,下面为大家介绍如何通过栈这一结构,将中缀表达式转换为后缀表达式。
~~~~~~~ 具体步骤:
(为操作方便,本例方法中传入的中缀表达式与转化后的后缀表达式均通过对应的List形式保存)
- 初始化一个栈
s1
,用于存放运算符;初始化链表s2
,用于存放转化的结果 - 从左至右遍历表达式,遇到运算数就添加到
s2
中 - 遇到运算符时:
1)如果s1
为空或者栈顶元素为(,直接加入s2
;
2)若优先级比栈顶运算符的优先级高,直接加入s2
;
3)若优先级小于或等于栈顶运算符的优先级,栈顶运算符出栈并加入到s2
中,然后从步骤3-1开始继续与新的栈顶运算符进行比较; - 遇到括号时,左括号直接压入
s1
,如果是右括号,依次弹出s1
栈顶的运算符并加入s2
,直至遇到左括号,此时将这对括号丢弃 - 遍历完成后,将
s1
中剩余的运算符依次弹出并加入s2
- 此时得到的
s2
,即为相应后缀表达式对应的链表
~~~~~~~ 举例:
~~~~~~~~~~~~~~