將原本的中置式子轉為後置式子,並計算結果
(10+8)-(6*5)→10 8 + 6 5 * -
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int index=-1;
void push(int);
int pop();
int stack[7]={};
int main(void){
char data[]="10 8 + 6 5 * -";
int times=0;
int total=0;
for(int i=0 ; data[i] ; i++){
switch(data[i]){
case '+':{
int right=pop();
int left=pop();
int temp=left+right;
push(temp);
break;
}
case '-':{
int right=pop();
int left=pop();
int temp=left-right;
push(temp);
break;
}
case '*':{
int right=pop();
int left=pop();
int temp=left*right;
push(temp);
break;
}
case '/':{
int right=pop();
int left=pop();
int temp=left/right;
push(temp);
break;
}
default:{
if(data[i]==' ' && data[i-1]!='+' && data[i-1]!='-' && data[i-1]!='*' && data[i-1]!='/'){
//讀到空格,如果上一個不是運算子,就把數字放入stack
push(total);
times=0;
total=0;
}
else if(data[i-1]!='+' && data[i-1]!='-' && data[i-1]!='*' && data[i-1]!='/'){//為了處理多位數字元
if(data[i-1]!=' ')
total=total*10+data[i]-'0';
else
total+=data[i]-'0';
}
break;
}
}
}
printf("%d\n",pop());
system("pause");
return 0;
}
void push(int num){
index++;
if(index>6){
printf("stack is full\n");
return;
}
else{
stack[index]=num;
}
}
int pop(){
if(index-1>=-1)
return stack[index--];
else{
printf("stack is empty");
return 0;
}
}
沒有留言:
張貼留言