サフィックス


      ,          。       ,      ,     。

#include 
#include 
#include 

#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0
#define MAXSIZE 50

//       
//           ;     ,            
//        ,       

typedef int Status;
typedef char ElemType;

typedef struct {
    ElemType data[MAXSIZE];
    int top;//    
}Stack;
//1.    
Status InitStack(Stack *S){
    int i;
    for(i=0;idata[i]=NULL;
    S->top=-1;
    return OK;
}
//2.        n   
Status CreateStack(Stack *S,int n){
    if(n>MAXSIZE || n<1){
        printf("      !
"); return ERROR; } srand(time(0)); int i; for(i=0;idata[i]=rand()%100+1; } S->top=n-1; return OK; } //3. Status push(Stack *S,ElemType e){ if(MAXSIZE-1==S->top){ printf("
"); return ERROR; } // ++(S->top); S->data[S->top]=e; return OK; } //4. Status pop(Stack *S,ElemType *e){ // , e if(-1==S->top){ printf(" !
"); return ERROR; } *e=S->data[S->top]; --(S->top); return OK; } //5. Status MidToFinal(char *mid,char *final){ // middle, last // , char e; Stack S; if(OK!=InitStack(&S)){ printf(" !
"); } // *mid , while(*mid){ // , if(*mid>='0' && *mid<='9'){ *(final++)=*(mid++); continue; }else if(*mid=='+' || *mid=='-' || *mid=='*' || *mid=='/' || *mid=='(' || *mid==')'){ // , if(S.top==-1 || '('==*mid){ // , push(&S,*(mid++)); continue; } if(')'==*mid){ // , ; pop(&S,&e); *(final++)=e; while(pop(&S,&e) && e!='('){ *(final++)=e; } // printf("%c
",e); mid++; continue; } // , *mid ; , ; ( , ) pop(&S,&e); if('+'==*mid || '-'==*mid){ if(e=='('){ push(&S,'('); push(&S,*(mid++)); continue; }else{ *(final++)=e; push(&S,*(mid++)); continue; } }else if('*'==*mid || '/'==*mid){ if('*'==e || '/'==e){ *(final++)=e; push(&S,*(mid++)); continue; }else{ push(&S,e); push(&S,*(mid++)); continue; } } }else{ printf(" !%c
",*mid); return ERROR; } } // , ( : ; ); while(S.top!=-1){ pop(&S,&e); *(final++)=e; } // ! *final='\0'; } int main() { /* Stack S; int i,n,e; if(OK!=InitStack(&S)){ printf(" !"); return ERROR; } printf(" n="); scanf("%d",&n); if(OK==CreateStack(&S,n)){ for(i=0;i<=S.top;i++){ printf("%d\t",S.data[i]); } } printf("
"); while(1==scanf("%d",&e)){ if(ERROR==push(&S,e)){ break; }else{ for(i=0;i<=S.top;i++) printf("%d\t",S.data[i]); } } printf("

"); while(OK==pop(&S,&e)){ getchar(); printf("%d\t",e); } */ // char data[]="3+(5*6-7/1*7)*9"; char data1[] = "(8*8/8+1-8)*3/2+4*5"; // char final[]=""; char final1[]=""; // MidToFinal(data,final); // printf("
%s
",final); MidToFinal(data1,final1); printf("
%s
",final1); return 0; }