|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 百年c++ 于 2017-9-29 21:11 编辑
#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;
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;
}
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=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 0;
}
Pop(SqStack &S,ElemType e)
{
if (S.top==S.base) return 0;
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);
getchar();
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;
}
|
|