逆波兰表达式(也称为后缀表达式) C 语言简单实现
本示例旨在展示逆波兰表达式原理,作简单的混合运算,不作容错处理也不保证结果。若混合运算字符串中有{ [ %] } 等,自行调试解决
列如计算: -20.5 + ( 100 - ( 3 + 2 ) * 8 ) / ( 8 - 5 ) - 10
后缀表达式为:-20.5 100 3 2 + 8 * - 8 5 - / + 10 -
C 语言代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 #define CNT 1000 6 7 struct node{ 8 float num; //数字 9 char op; //操作符 10 }; 11 12 struct node datas[CNT]; //后缀表达式 13 int data_top = -1; //栈顶索引 14 15 char ops[CNT]; //操作符 16 int op_top = -1; //栈顶索引 17 18 char nums[100]; //数字字符串 19 int num_top = -1; //栈顶索引 20 int minus_tag = 1; //负数标记 21 //数字入栈 22 void push_num(){ 23 if(num_top > -1){ 24 datas[++data_top].num = atof(nums) * minus_tag; 25 datas[data_top].op = 0; 26 num_top = -1; 27 minus_tag = 1; 28 memset(nums, 0, sizeof(nums)); 29 } 30 } 31 //中缀转后缀 32 void mtoe(const char* str){ 33 char *tmp; 34 tmp = (char*)str; 35 int last_tag = 1; //上一个字符是否是运算符,默认是,用于处理负数 36 while(*tmp != '