中缀表达式转变成后缀表达式
来源:互联网 发布:淘宝网旅游鞋女 编辑:程序博客网 时间:2024/04/28 18:46
我们这里只针对加减乘除运算的表达式进行转变。中缀表达式就是正常的表达式,例如a+b*c+(d*e+f)*g。我们需要将它转变成后缀表达式,也就是符号在数字后面。
转变规则就是如果遇到数字,就输出数字,如果遇到符号,比较这个符号和栈中的符号优先级的高低,如果这个符号优先级高,就压入栈中,反之,现将栈顶符号输出,再进行比较,决定是否输出符号。如果遇到左括号,它的优先级最高,只有碰到右括号,才将左括号弹出,但不输出。
首先是栈的定义以及优先级函数的定义
#include <stdio.h>#include <stdlib.h>#define mincap 100struct stack_node{ char *Array; int topofstack; int capacity;};typedef struct stack_node *Stack;//pushvoid Push(Stack S,char c){ if(S->topofstack+1==S->capacity) printf("error ,the stack is full\n"); else { S->Array[S->topofstack+1]=c; S->topofstack=S->topofstack+1; }}//Popvoid Pop(Stack S){ if(S->topofstack==-1) printf("error,pop,the stack is empty\n"); else { S->topofstack=S->topofstack-1; }}//topchar Top(Stack S){ if(S->topofstack==-1) printf("error,top,the stack is empty\n"); else { return S->Array[S->topofstack]; }}Stack Create(int Cap){ if(Cap>mincap) { Stack S=malloc(sizeof(struct stack_node)); S->capacity=Cap; S->topofstack=-1; S->Array=malloc(sizeof(char)*Cap); printf("create success\n"); return(S); } else printf("error ,cap is too small\n");}int Priority(char c){ switch(c) { case '+': return(1);break; case '-': return(1);break; case '*': return(2);break; case '/': return(2);break; case '(': return(3);break; }}
然后是主程序
int main(){Stack S=Create(200);char *infix="(a-b)*c+(d*e+f)*g";int i=0;int tem_infix;int tem_stack;char tem_char;for(;infix[i]!='\0';i++){ if(infix[i]!='+'&&infix[i]!='-'&&infix[i]!='*'&&infix[i]!='/'&&infix[i]!=')'&&infix[i]!='(') printf("%c",infix[i]); else { if(infix[i]!=')') { if(S->topofstack==-1) Push(S,infix[i]); else { tem_infix=Priority(infix[i]); tem_stack=Priority(Top(S)); while(tem_infix<=tem_stack) { if(Top(S)=='(') break; else { printf("%c",Top(S)); Pop(S); } if(S->topofstack!=-1) tem_stack=Priority(Top(S)); else break; } Push(S,infix[i]); } } if(infix[i]==')') { while(Top(S)!='('&&S->topofstack!=-1) { printf("%c",Top(S)); Pop(S); } if(Top(S)=='(') Pop(S); } }}while(S->topofstack!=-1){ printf("%c",Top(S)); Pop(S);} return 0;}
0 0
- 中缀表达式转变成后缀表达式
- java编程实现中缀表达式转变成后缀表达式并求和
- 后缀表达式转变成表达式树
- 中缀转后缀表达式
- 中缀,前缀,后缀表达式
- 前缀、中缀、后缀表达式
- 前缀、中缀、后缀表达式
- 表达式 中缀 后缀 转换
- 前缀、中缀、后缀表达式
- 前缀、中缀、后缀表达式
- 中缀,前缀,后缀表达式
- 前缀中缀后缀表达式
- 前缀,中缀,后缀表达式
- 前缀,中缀,后缀表达式
- 中缀和后缀表达式
- 前缀、中缀、后缀表达式
- 前缀、中缀、后缀表达式
- 前缀&&中缀&&后缀表达式
- 黑马程序员——多线程
- HTTP协议详解
- MongoDB查询操作
- Android常用组件
- Spring启动后执行
- 中缀表达式转变成后缀表达式
- inux下原生ndis驱动及qmi lib探索
- fftw在VS2010中的配置使用
- [BZOJ1179]APIO2009 ATM |强联通分量|DP
- LeetCode之Copy List with Random Pointer
- 基于Lockset的数据竞争检测方法汇总(四)
- springmvc 上传和json的运用
- struts2常用注解解析
- 单位活期存款