1. 程式人生 > >C語言實現中綴表達式轉後綴表達式

C語言實現中綴表達式轉後綴表達式

ctype 結束 錯誤 ini c語言實現 base color src 格式

代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define STACK_INIT_SIZE 20
#define STACKINCREMENT  10

typedef char ElemType;
typedef struct {
    ElemType *base;
    ElemType *top;
    int StackSize;
}sqStack;
void InitStack(sqStack *s){
    s->base = (ElemType *)malloc
(STACK_INIT_SIZE * sizeof(ElemType)); if( !s->base ){ exit(0); } s->top = s->base; s->StackSize = STACK_INIT_SIZE; } void push(sqStack *s,ElemType e) { if( s->top - s->base >= s->StackSize){ s->base = (ElemType *)realloc(s->base,(s->StackSize+STACKINCREMENT)*sizeof
(ElemType)); if( !s->base ){ exit(0); } } *(s->top) = e; s->top++; } void pop(sqStack *s,ElemType *e){ if( s->top == s->base){ return; } *e = *--(s->top); } int Stacklen(sqStack s){ return (s.top-s.base); } int main() { sqStack s;
char c, e; InitStack(&s); printf("請輸入中綴表達式,以#作為結束標誌:"); scanf("%c",&c); while( c != # ){ while ( c>=0 && c<=9 ){ printf("%c",c); scanf("%c",&c); if (c<0||c>9){ printf(" "); } } if ( ) == c ) { pop(&s, &e); while( ( != e ) { printf("%c ",e); pop(&s,&e); } } else if ( +==c || -==c) { if ( !Stacklen(s) ) { push(&s,c); } else { do { pop(&s,&e); if ( (==e ) { push(&s,e); } else{ printf("%c ",e); } }while( Stacklen(s) && (!=e ); push(&s,c); } } else if ( *==c || /==c || (==c ) { push(&s,c); } else if (#==c) { break; } else{ printf("出錯,輸入格式錯誤\n"); return -1; } scanf("%c",&c); } while( Stacklen(s) ){ pop(&s,&e); printf("%c ",e); } return 0; }

運行結果:

技術分享

C語言實現中綴表達式轉後綴表達式