1.手动实现中缀转后缀
2.代码实现中缀转后缀并计算表达式结果
为了简化问题,假设算术运算符仅由加、减、乘、除4种运算符和左、右括号组成。
step1: 声明栈结构
#include
#include
using namespace std;
#define MaxSize 100
template
struct SeqStack
{
DataType data[MaxSize];
DataType *top;
};
step2: 定义函数TranslateInfixExp
实现中缀表达式转后缀表达式
/* 中缀表达式转后缀表达式 */
void TranslateInfixExp(string exp, string &result)
{
if (exp.empty())
return;
// step1: 定义操作符栈并初始化栈
struct SeqStack opStack;
opStack.top = opStack.data;
// step2: 遍历中缀表达式
char cur;
for (int i = 0; i = '0' && cur
注意:
- 在将中缀表达式转后缀表达式过程中,每输出一个数字字符,需要在其后补一个空格(与其他相邻数字字符隔开),否则一连串数字字符放在一起无法区分是一个数字还是两个数字。
- 遇到数字字符入栈时,若当前运算项位数>1时,需要在当前数字字符入栈后后移一位并重复入栈(代码中switch的default段代码),并在运算项入栈完毕之后需要将索引i回退至后续首个尚未进行优先级判断的运算符上(即非数字字符)。
step3: 定义函数CaculatePostFixExp
实现后缀表达式结果计算
/* 计算后缀表达式结果 */
float CaculatePostFixExp(string exp)
{
float result = 0;
if (exp.empty())
{
cout numStack;
numStack.top = numStack.data;
// step2 : 遍历后缀表达式
char cur;
for(int i=0; i= '0' && cur
注意:
若当前字符为运算符且为减号’-‘时,先出栈的为减数,后出栈的为被减数;对于除法’/’也一样。
step4: main函数调用
int main()
{
string infixExp; // 存储用户输入的中缀表达式
string postfixExp; // 存储转换后的后缀表达式
double result; // 存储后缀表达式计算机结果
cout > infixExp; // 6+(7-1)*3+10/2
cout
输出:
Please enter an infix expression:
6+(7-1)*3+10/2
The infix expression is: 6+(7-1)*3+10/2
The postfix expression is: 6 7 1 - 3 * + 10 2 / +
The postfix expression calculation result is: 29
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net