|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #define STACK_INIT_SIZE 20
- #define STACKINFREMENT 10
- #define MAXBUFFER 10
- typedef double 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 +STACKINFREMENT)*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 != '#')
- {
- if(c >= '0' && c <= '9')
- {
- printf("%c",c);
- scanf("%c",&c);
- if(c < '0' || c > '9')
- {
- printf(" ");
- }
- }
- else 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;
- }
复制代码
哪位大佬看看是哪块出错了? |
|