1. 程式人生 > >中綴表達式變為後綴表達式,棧實現

中綴表達式變為後綴表達式,棧實現

efi typedef 後綴表達式 tac tdi code stack ack otp

#include <stdio.h>
#define MaxSize 50

typedef struct{
    char data[MaxSize];
    int top;
}SqStack;


void InitStack(SqStack &S){
    S.top = -1;    
}
int StackEmpty(SqStack &S){
    if(S.top == -1)
        return 1;
    else
        return 0;
}
void Push(SqStack &S,char x){
    
if(S.top==MaxSize -1) return ; S.data[++S.top] = x; } void Pop(SqStack &S,char &x){ if(S.top== -1) return; x = S.data[S.top--]; } void GetTop(SqStack &S,char &x){ if(S.top== -1) return ; x = S.data[S.top]; } /* 逆序 輸出 */ void InverseStack(SqStack &S,SqStack &S1){
char x; while(S.top > -1){ Pop(S,x); Push(S1,x); } while(!StackEmpty(S1)){ Pop(S1,x); printf("%c",x); } } /* 括號匹配 */ int Bracket_Match(char t[],int length){ SqStack S; InitStack(S); int i=0; while(i<length){
char x ; if(t[i]==( || t[i]==[ || t[i]=={){ Push(S,t[i++]); }else { Pop(S,x); if(t[i] == ) && x == (){ i++; } else if(t[i] == ] && x ==[){ i++; } else if(t[i] == } && x =={){ i++; }else{ return 0; } } } return 1; } /* 中綴轉為後綴 */ int isNum(char x){ if(x<=9 && x>=0){ return 1; }else{ return 0; } } int notPirio(char x,char exp){ if((exp == * || exp == /) && (x == * || x == /)){ return 1; }else if((exp == + || exp ==-) && (x == + || x==-)){ return 1; }else if((exp == + || exp ==-) && (x == * || x == /)){ return 1; }else { return 0; } } void Postfix_exp(char exp[]){ SqStack s1,s2; InitStack(s1); InitStack(s2); int i = 0; int count =0; char x; while(exp[i] != \0){ if(isNum(exp[i])){ Push(s1,exp[i]); i++; }else if(exp[i] == (){ Push(s2,exp[i]); i++; }else if(exp[i] == )){ Pop(s2,x); while(x != (){ Push(s1,x); Pop(s2,x); } i++; }else{ if(StackEmpty(s2)){ Push(s2,exp[i++]); } else{ GetTop(s2,x); while(notPirio(x,exp[i]) && !StackEmpty(s2)){ Pop(s2,x); Push(s1,x); GetTop(s2,x); } Push(s2,exp[i]); i++; } } } while(!StackEmpty(s2)){ Pop(s2,x); Push(s1,x); } InverseStack(s1,s2); } int main(){ char tt[30]={ 2,/,1,+,2,*,8,*,(,4,-,5,),\0 }; char t[30]={ 1,*,(,2,+,3,),\0 }; Postfix_exp(tt); return 0; }

中綴表達式變為後綴表達式,棧實現