数据结构与算法题目集7-20 表达式转换(c语言实现)

原题链接

  1. 这道题需要考虑负数和小数的情况,是否是数组我们用isnumber这个函数来判断。因为小数点不可能单独出现,所以我们认为小数点也是数字的一部分。
  2. 我们先用一个字符串存储这个表达式,如果当前的字符是数字的一部分,直接输出。
  3. 如果当前字符是正负号,那么进行如下判断。如果当前字符是第一个字符,那么肯定是数字的正负号;否则如果当前字符的前一个字符既不是 ‘)’ 也不是数字,那么它也是数字的正负号。
  4. 如果都不是前面两种情况就要做如下判断了。如果存储符号的堆栈是空的,那么直接将当前字符压到堆栈中;否则若当前符号是 ‘)’ 则出栈直至符号栈指向的元素为 ‘(’ ;若不是则在当前栈不为空的时候比较运算符的优先级,如果优先级当前高就退出循环,如果当前优先级低就输出栈顶符号,最后将当前元素压到栈中。
  5. 最后将符号栈中的所有元素全部输出

ac代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isnumber(char c){
   
	if(c>='0' && c<='9' || c=='.'){
   
		return 1;
	}else{
   
		return 0;
	}
}
int zf(char c){
   
	if(c=='-' || c=='+'){
   
		return 1;
	}else{
   
		return 0;
	}
}
int compare(char a,<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值