1
0
mirror of https://github.com/Didnelpsun/CS408.git synced 2026-02-13 23:55:58 +08:00
This commit is contained in:
Didnelpsun
2022-11-04 23:07:11 +08:00
parent f12a7a28de
commit 3019299f72
2 changed files with 40 additions and 25 deletions

View File

@@ -83,12 +83,21 @@
5. 遇到运算符,依次弹出栈中优先级高于或等于当前运算符的所有运算符并加入后缀表达式,若碰到左括号或栈空停止,之后再将当前运算符入栈。
6. 处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀运算符。
后缀表达式计算的程序实现:
<!-- 后缀表达式计算的程序实现:
1. 从左往右扫描下一个元素,直到处理所有元素。
2. 若扫描到操作数则压入栈,并回到$1$,若扫描到运算符则执行$3$。
3. 扫描到运算符则弹出两个栈顶元素,执行相应操作,运算结果压入栈,回到步骤一。
4. 先出栈的是右操作数,后出栈的是左操作数。
4. 先出栈的是右操作数,后出栈的是左操作数。 -->
使用栈进行中缀转后缀的手算方法:
1. 设定运算符栈。
2. 从左到右遍历中缀表达式的每个数字和运算符。
3. 若当前字符是数字,则直接输出成为后缀表达式的一部分。
4. 若当前字符为运算符,则判断其与栈顶运算符的优先级,若优先级大于栈顶运算符,则进栈;若优先级小于等于栈顶运算符,退出栈顶运算符成为后缀表达式的一部分,然后将当前运算符放入栈中。
5. 若当前字符为“(”,进栈。(不会影响其他非)符号的入栈出栈,在(前的符号不会因为(入栈而弹出,在)后的符号也不用判断是否弹出,直接入栈。
6. 若当前字符为“)”,则从栈顶起,依次将栈中运算符出栈成为后缀表达式的一部分,直到碰到“(”。将栈中“(”出栈,不需要成为后缀表达式的一部分,然后继续扫描表达式直到最终输出后缀表达式为止。
使用栈进行中缀表达式求值的程序实现:
@@ -96,7 +105,7 @@
2. 首先置操作数栈为空,表达式起始符“#”为运算符栈的栈底元素。
3. 依次读入表达式中每个字符,若是操作数则进操作数栈,若是运算符则和运算符栈栈顶元素比较优先级,若栈顶元素优先级高于即将入栈的元素,则栈顶元素出栈(优先级高的先出栈,再把优先级低的放进来),操作数栈弹出两个操作数和运算符一起进行运算,将运算后的结果放入操作数栈,直至整个表达式求值完毕(即运算符栈顶元素和要放入元素均为“#”)。
如果我们将后缀表达式转换为中缀表达式计算,可以从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合并为一个操作数。
<!-- 如果我们将后缀表达式转换为中缀表达式计算,可以从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合并为一个操作数。 -->
#### 前缀表达式

File diff suppressed because one or more lines are too long