首页 > 代码库 > 数据结构:中缀表达式转后缀表达式
数据结构:中缀表达式转后缀表达式
#include <stdio.h>#include "SqStack2.h"#define STACKTYPE SqStack#define BOOL int#define TRUE 1#define FALSE 0BOOL isnumeric(char c){ return (c >= ‘0‘ && c <= ‘9‘) ? TRUE : FALSE;}int lv(char c){ int wt[] = {3,0,2,1,-1,1,-1,2}; return wt[c - ‘(‘];}void expr(){ char ex[] = "10+(3+4)*(12-6)"; int i,n; BOOL isNumber = FALSE;//上一个字符是否是数字,连续两个数字要合并 STACKTYPE st; init(&st); for (i = 0; ex[i] != ‘\0‘; i++) { if (isnumeric(ex[i])){ if (isNumber == FALSE) printf(" "); printf("%d", ex[i]-‘0‘); isNumber = TRUE; } else { isNumber = FALSE; if (ex[i] == ‘)‘){//如果右括号,则匹配栈中第一个左括号 n = ‘ ‘; do { if (n != ‘ ‘) printf(" %c", n); } while (pop(&st, &n)==OK && n != ‘(‘); } else if (ex[i] == ‘(‘) { push(&st, ex[i]); } else {//其他运算符,输出栈中所有优先度更高的运算符 while (getTop(st, &n) == OK && n != ‘(‘ && lv(n) >= lv(ex[i])) pop(&st, &n); push(&st, ex[i]); } } } while (pop(&st, &n) == OK) printf(" %c", n); printf("\n"); destroy(&st);}main(){ expr();}
数据结构:中缀表达式转后缀表达式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。