题目

数据结构-用栈计算中缀表达式(过程解析)

原则

准备两个栈s、t。
从左向右扫描,遇到数字入栈s,遇到运算符c入栈t,运算符c与t栈顶的比较规则如下:

  1. 运算符c > t 栈顶(优先级),则入栈
  2. 运算符c <= t 栈顶(优先级),则t 出栈一个元素,s 出栈2个元素并计算后将计算后的值入栈s,直到t栈顶优先级大于c
  3. 运算符c 为( ,则入栈,遇到) 时出栈( ) 之间的所有运算符

解析

从左向右扫描:
s、t初始状态:
数据结构-用栈计算中缀表达式(过程解析)
扫描:3
数据结构-用栈计算中缀表达式(过程解析)
扫描:*
数据结构-用栈计算中缀表达式(过程解析)
扫描:2
数据结构-用栈计算中缀表达式(过程解析)
扫描:^
数据结构-用栈计算中缀表达式(过程解析)
扫描:(
数据结构-用栈计算中缀表达式(过程解析)
扫描:4
数据结构-用栈计算中缀表达式(过程解析)
扫描:+
数据结构-用栈计算中缀表达式(过程解析)
扫描:2
数据结构-用栈计算中缀表达式(过程解析)
扫描:*
数据结构-用栈计算中缀表达式(过程解析)
扫描:2
数据结构-用栈计算中缀表达式(过程解析)
扫描:-
由于 - <= t栈顶 * (优先级),则t 出栈
t 出栈 *,s 出栈2、2,计算后入栈s
出栈:
数据结构-用栈计算中缀表达式(过程解析)
2 * 2 = 4,将4入栈s:
数据结构-用栈计算中缀表达式(过程解析)
由于 - <= t栈顶元素 + ,继续出栈
出栈:
数据结构-用栈计算中缀表达式(过程解析)
4 + 4 = 8,将8入栈s:
数据结构-用栈计算中缀表达式(过程解析)
由于 - > ( ,将 运算符c 入栈t :
数据结构-用栈计算中缀表达式(过程解析)

扫描:6

(所以,题目的答案就选第四个)

数据结构-用栈计算中缀表达式(过程解析)

扫描:*
数据结构-用栈计算中缀表达式(过程解析)
扫描:3
数据结构-用栈计算中缀表达式(过程解析)
扫描:)
将( ) 之类的所有元素出栈
t 出栈*,s出栈3、6
数据结构-用栈计算中缀表达式(过程解析)
6 * 3 = 18,将18入栈s:
数据结构-用栈计算中缀表达式(过程解析)
t 出栈-,s出栈18、8:
数据结构-用栈计算中缀表达式(过程解析)
8 - 18 = -10,将-10入栈s:
数据结构-用栈计算中缀表达式(过程解析)
t 出栈 (:
数据结构-用栈计算中缀表达式(过程解析)
扫描:-
由于 - <= ^
t 出栈 ^ ,s 出栈-10、2:
数据结构-用栈计算中缀表达式(过程解析)
2 ^ -10 = 1/1024,将1/1024入栈s:
数据结构-用栈计算中缀表达式(过程解析)
由于 - <= t 栈顶 *
t 出栈 *,s出栈1/1024、3
数据结构-用栈计算中缀表达式(过程解析)
3 * 1/1024 = 3/1024 ,将3/1024入栈s:
数据结构-用栈计算中缀表达式(过程解析)
入栈 -:
数据结构-用栈计算中缀表达式(过程解析)
扫描:5
数据结构-用栈计算中缀表达式(过程解析)
最后,全部出栈计算:
数据结构-用栈计算中缀表达式(过程解析)
3/1024 - 5 = -5117/1024,将-5117/1024入栈s:
数据结构-用栈计算中缀表达式(过程解析)

如有错误,请指正。

完!

相关文章:

  • 2022-01-19
  • 2022-12-23
  • 2022-01-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-06
猜你喜欢
  • 2020-10-08
  • 2022-12-23
  • 2021-10-22
  • 2021-08-28
  • 2023-03-22
  • 2021-10-04
相关资源
相似解决方案