数据结构实验之栈三:后缀式求值
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
输入
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
输出
求该后缀式所对应的算术表达式的值,并输出之。
示例输入
59*684/-3*+#
示例输出
57
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
输入
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
输出
求该后缀式所对应的算术表达式的值,并输出之。
示例输入
59*684/-3*+#
示例输出
57
#include <stdio.h>
#include <stdlib.h>
#define maxsize 128
typedef int ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int length;
}SQ;
int InitStack(SQ &S)
{
S.base=(ElemType *)malloc(maxsize*sizeof(ElemType));
if(!S.base) exit(-1);
S.top=S.base;
S.length=maxsize;
return 1;
}
int push(SQ &S,ElemType e)
{
*S.top++=e;
return 1;
}
int pop(SQ &S,ElemType &e)
{
e=*(--S.top);
return 1;
}
int Operation(SQ &S,char ch,int a,int b)
{
switch(ch)
{
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
}
}
int get(SQ &S,ElemType &e)
{
e=*(S.top-1);
return 1;
}
int main()
{
char str[maxsize];
while(~scanf("%s",str))
{
SQ S;
InitStack(S);
ElemType e,e1,e2;
for(int i=0;str[i]!='#';i++)
{
if(str[i]>='0'&&str[i]<='9')
push(S,(str[i]-'0'));
else
{
pop(S,e1);
pop(S,e2);
push(S,Operation(S,str[i],e2,e1));
}
}
pop(S,e);
printf("%d\n",e);
}
return 0;
}