中缀表达式转化成后缀表达式的计算(13)
时间:2025-07-09
时间:2025-07-09
中缀表达式的直接计算,中缀表达式转化成后缀表达式的计算
//char ch[] = "(23-3)/2+12*2"; int index = 0; //定义字符串的索引
//定义 操作符栈 TdStack tds; //定义 操作数栈 OpNode op; //定义 字符节点 TdNode td; //定义 数节点 Op_init(&ops); //初始化字符栈 Td_init(&tds); //初始化操作数栈 OpStack ops; while(ch[index] != '\0') {
char chr = ch[index]; //取出字符串的而一个字符 if(chr >= '0' && chr <= '9' || chr == '.') //判断是否为操作数 { int tempIndex = index; //定义辅助索引 int i = 0; } //定义数组存放一个操作数,并进行初始化 //将一个操作数从字符数组中取出,并存放在tempCh数组中 char tempCh[10] ={0}; while(chr >= '0' && chr <= '9' || chr == '.') { } td.d = atof(tempCh); Td_push(&tds,td); index = tempIndex; continue; tempCh[i++] = ch[tempIndex]; tempIndex++; chr = ch[tempIndex]; //把取出的操作数存放到操作数栈
//判断是否为加法或者减法运算 if(chr == '+' || chr == '-') {
//存放操作符到操作符节点 op.level = 2; //给操作符赋值优先级 int level_2 = 2; //存放优先级别,用于比较优先级 while(ops.size != 0) //若字符栈不为空,则进行字符的优先级比较 { int level_1 = Op_getTop(&ops).level; op.ch = chr; //两个字符比较优先级,若新的字符优先级比栈中的字符优先级高,则 //从字符栈中字符出栈,同时从数栈中出栈两个数,进行计算,计算结 //果存入数栈,否则将新的字符入栈 if(Compare_opeate(level_1,level_2) == 0) { char op1 = Op_pop(&ops).ch;
下一篇:O型圈技术手册