中缀表达式转后缀表达式c语言
时间: 2023-11-20 14:53:00 浏览: 101
中缀表达式是指运算符位于两个操作数之间的表达式,例如:3 + 4 * 5。而后缀表达式是指运算符位于操作数之后的表达式,例如:3 4 5 * +。将中缀表达式转换为后缀表达式的过程称为中缀表达式转后缀表达式。
以下是中缀表达式转后缀表达式的步骤:
1. 创建一个空栈和一个空字符串。
2. 从左到右扫描中缀表达式的每个元素。
3. 如果当前元素是数字,则将其添加到输出字符串中。
4. 如果当前元素是左括号,则将其压入栈中。
5. 如果当前元素是右括号,则将栈中左括号之后入栈的运算符全部弹栈输出,同时左括号出栈但是不输出。
6. 如果当前元素是运算符,则比较其与栈顶运算符的优先级:
a. 如果栈为空或栈顶为左括号,则将当前运算符压入栈中。
b. 如果当前运算符优先级高于栈顶运算符,则将当前运算符压入栈中。
c. 如果当前运算符优先级低于或等于栈顶运算符,则将栈顶运算符弹出并添加到输出字符串中,然后重复步骤6直到当前运算符优先级高于栈顶运算符或栈为空。
7. 如果扫描完中缀表达式后,栈中还有运算符,则将它们依次弹出并添加到输出字符串中。
8. 输出字符串即为后缀表达式。
以下是c语言实现中缀表达式转后缀表达式并求得计算结果的步骤:
1. 创建一个空栈和一个空字符串。
2. 从左到右扫描中缀表达式的每个元素。
3. 如果当前元素是数字,则将其添加到输出字符串中。
4. 如果当前元素是左括号,则将其压入栈中。
5. 如果当前元素是右括号,则将栈中左括号之后入栈的运算符全部弹栈并计算,将计算结果压入栈中,同时左括号出栈但是不输出。
6. 如果当前元素是运算符,则比较其与栈顶运算符的优先级:
a. 如果栈为空或栈顶为左括号,则将当前运算符压入栈中。
b. 如果当前运算符优先级高于栈顶运算符,则将当前运算符压入栈中。
c. 如果当前运算符优先级低于或等于栈顶运算符,则将栈顶运算符弹出并计算,将计算结果压入栈中,然后重复步骤6直到当前运算符优先级高于栈顶运算符或栈为空。
7. 如果扫描完中缀表达式后,栈中还有运算符,则将它们依次弹出并计算,将计算结果压入栈中。
8. 输出栈顶元素即为计算结果。
阅读全文