#include <stdio.h>
#include <stdlib.h>
#define Stackmax 1000
#define Stackincrement 100
#define TRUE 1
#define FALSE 0
#define error 1
typedef struct node
{
int *base;
int *top;
int stacksize;
} sqstack;
void initstack(sqstack *s)
{
s->base=s->top=(int *)malloc(sizeof(int)*Stackmax);
if(!s->base) exit(-1);
s->stacksize=Stackmax;
}
void push(sqstack *s,int e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(int *)realloc(s->base,sizeof(int)*(s->stacksize+Stackincrement));
if(!s->base) exit(-1);
s->top=s->base+s->stacksize;
s->stacksize+=Stackincrement;
}
*(s->top)=e;
s->top++;
}
int pop(sqstack *s)//弹出并表示栈顶值
{
int e;
if(s->base!=s->top)
{
e=*(s->top-1);
s->top--;
return e;
}
else return error;
}
int isempty(sqstack *s)
{
if(s->base==s->top)
return TRUE;
else return FALSE;
}
int num(int a,int b,char ch)//a在前,b在后
{
int s;
if(ch=='+')
s=a+b;
else if(ch=='-')
s=a-b;
else if(ch=='*')
s=a*b;
else if(ch=='/')
s=a/b;
return s;
}
int main()
{
char ch;
//int i;
int a,b;
int answer;
sqstack s;
initstack(&s);
while(~scanf("%c",&ch)&&ch!='#')
{
if(ch>='0'&&ch<='9')
{
ch-='0';//将字符转换成数值型
push(&s,ch);
}
else//遇到操作符
{
b=pop(&s);
//printf("%d\n",a);
a=pop(&s);
// printf("%d\n",b);
answer=num(a,b,ch);
// printf("%d\n",answer);
push(&s,answer);
}
} printf("%d\n",pop(&s));
return 0;
}
数据结构实验之栈与队列三:后缀式求值
最新推荐文章于 2020-05-09 17:35:53 发布