如果要在C中完成,那么我建议使用prefix或postfix评估技术.有一些技术可以将给定的中缀表达式转换为前缀或后缀表示法.您可以在此处详细了解这些符号及其转换
使用这些,您的等式(5+6*20/4)转换为以下前缀表示法:
+ 5 * 6 / 20 4
Run Code Online (Sandbox Code Playgroud)
Prefix =运算符在任何操作数之前出现
Infix =运算符在操作数之间
Postfix =运算符在两个操作数之后
当它存储在两个堆栈,数字和操作时,这是你得到的:
int nums[] = {4, 20, 6, 5);
char opers[] = {'/', '*', '+'}
Run Code Online (Sandbox Code Playgroud)
注意顺序的逆转.
您现在可以使用简单的push pop技术和优先级来评估它:
继续上面的操作直到你在操作数堆栈上留下一个结果(并且操作符堆栈为空)
试运行以上:
Iteration 1:
Run Code Online (Sandbox Code Playgroud)
应用于'/'4和20给5,将其推回操作数堆栈.
nums = {5, 6, 5};
opers = {'*', '+'};
Run Code Online (Sandbox Code Playgroud)
-
Iteration 2:
Run Code Online (Sandbox Code Playgroud)
应用于'*'5和6给30,将其推回操作数堆栈
nums = {30, 5};
opers = {'+'};
Run Code Online (Sandbox Code Playgroud)
-
Iteration 3:
Run Code Online (Sandbox Code Playgroud)
适用'+'于30和5给35,将其推回操作数堆栈
现在,操作符堆栈为空,操作数堆栈有一个值:35,这是你的答案.
| 归档时间: |
|
| 查看次数: |
2477 次 |
| 最近记录: |