今天來介紹中序轉後序好了~~
在我們平常的日常生活中看到的式子都是以 a+bd-c/d
然而在電腦運算時,為了更有效率的判斷運算順序,可以將中序表示法換成後序或前序
而轉到後序後的式子為abd+cd/-
而運算元為abcd,運算子為*/+-
那麼他的規則有兩個
元素 | Stack | Output |
---|---|---|
a | a | |
+ | + | a |
b | + | ab |
* | +* | ab |
d | +* | abd |
- | - | abd*+ |
c | - | abd*+c |
/ | -/ | abd*+c |
d | -/ | abd*+cd |
pop all | pop all | abd*+cd/- |
掌握了以上三個原則即可開始
其中還要考慮()的部分
如果遇到()時則需將stack中的所以元素pop出來
#include <stdio.h>
#include <stdlib.h>
int priority(char op){
switch(op){
case'+': case'-': return 1;
case'*': case'/': return 2;
case'^': return 3;
default: return 0;
}
}
void intopost(char *infix,char *postfix){
char stack[512]={'\0'};
int i,j,top;
for(i=0,j=0,top=0;infix[i]!='\0';i++){
switch(infix[i]){
case '(':
stack[++top]=infix[i];
break;
case'+':case'-':case'*':case'/':case'^':
while(priority(stack[top]) >= priority(infix[i]) ){
postfix[j++]=stack[top--];
}
stack[++top]=infix[i];
break;
case ')':
while(stack[top]!='('){
postfix[j++]=stack[top--];
}
top--;
break;
default:
postfix[j++]=infix[i];
break;
}
}
while(top>0){
postfix[j++]=stack[top--];
}
}
void main(){
int i;
char in[512]={'\0'},post[512]={'\0'};
scanf("%s",in);
intopost(in,post);
for(i=0;post[i]!='\0';i++){
printf("%c",post[i]);
}
printf("\n%s",post);
}