四则运算中缀转后缀(C语言)

本文介绍了如何用C语言实现四则运算的中缀表达式转换为后缀表达式的方法。通过算法思路、原书例题及代码实现详细讲解,涉及运算符优先级和栈的操作。例如,对于9+(3-1)*3+10/2的转换过程,解释了如何处理括号和不同运算符的优先级。
摘要由CSDN通过智能技术生成

四则运算中缀转后缀(C语言)

本文参考自《大话数据结构》

算法思路

遇到数字直接输出,使用栈来存储,通过比较运算符的优先级,判断是否要将栈顶符号输出:

  1. 如果栈顶符号优先级不比字符串当前所指符号优先级,则输出;否则将符号入栈;
  2. 括号优先级最高(),遇到 ) 括号则匹配栈中的 ( 括号,将括号中所有符号输出;
  3. 字符串遍历结束后,将栈中符号全部输出;

原书例题

9+(3-1)*3+10/2:

  1. 数字9直接输出,输出结果:9
  2. 栈为空,栈中没有符号,此时+号入栈,栈中符号为(左边为栈顶):+
  3. ( 优先级最高,入栈,栈中符号:(+
  4. 数字3,直接输出,输出结果:9 3
  5. - 号,优先级比栈顶符号 ( 低,入栈,栈中符号为:- ( +
  6. 数字1,直接输出,输出结果:9 3 1
  7. ) 号,匹配栈中 ( ,将括号内符号都出栈(括号不输出),输出结果:9 3 1 - ,栈中符号:+
  8. 乘号( * ),优先级比栈顶符号+高,入栈,栈中符号:* +
  9. 数字3,直接输出,输出结果:9 3 1 - 3
  10. +号,优先级不比栈顶符号*高,也不比栈中+高,所以栈中符号全部输出,新+号入栈,此时输出结果:9 3 1 - 3 * +,栈中符号为:+
  11. 数字10直接输出,输出结果:9 3 1 - 3 * + 10
  12. /号,比栈顶符号+优先级高,入栈,栈中符号:/ +
  13. 数字2,直接输出,输出结果:9 3 1 - 3 * + 10 2
  14. 字符串遍历结束,输出栈中剩下的所有符号,输出结果:9 3 1 - 3 * + 10 2 / +

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100		//多项式最大长度
typedef struct Stack{
   
	char ch;
	struct Stack* next = NULL;
}Stack;
typedef struct LinkStack{
   
	struct Stack* top = NULL;
	int count;
}LinkStack;

int main(){
   
	Stack termStack, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值