您的位置:首页 > 理论基础 > 数据结构算法

数据结构 表达式求值

2009-11-21 02:14 260 查看
问题描述:使用键盘输入表达式,计算表达式的值并输出;将表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。
由于能力有限,只能编写运算个位数的运算(输入数字 -10<x<10)。
本程序仅供参考。

*******************************************************************************

#include<stdio.h>
#define maxsize 100
typedef struct
{
char data[maxsize];
int top;
}OPTR;
typedef struct
{
int data[maxsize];
int top;
}OPND;
OPND list1;
OPTR list2;

void initstack1(OPND &s)
{
s.top=0;
}
void initstack2(OPTR &s)
{
s.top=0;
}
void push1(OPND &s,int x)
{
s.data[s.top++]=x;
}
void push2(OPTR &s,char x)
{
s.data[s.top++]=x;
}
char gettop2(OPTR s)
{
return s.data[s.top-1];
}
int gettop1(OPND s)
{
return s.data[s.top-1];
}
int pop1(OPND &s)
{
s.top--;
return s.data[s.top];
}
char pop2(OPTR &s)
{
s.top--;
return s.data[s.top];
}
int oprate(int a,char c,int b)
{
switch(c)
{
case'+':return a+b;
case'-':return a-b;
case'*':return a*b;
case'/':return a/b;
}
}
char compare(char x,char y)
{
int i,j,q;
char b[7]={'+','-','*','/','(',')','#'};
char a[7][7]={
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='}
};

for(q=0;q<7;q++)
{
if(x==b[q])i=q;
}
for(q=0;q<7;q++)
{
if(y==b[q])j=q;
}
return a[i][j];
}
void main()
{
int result;
initstack1(list1);
initstack2(list2);
push2(list2,'#');
char c=getchar();
while((c!='#')||(gettop2(list2)!='#'))
{
if(c>=48&&c<=57)
{
push1(list1,c-'0');
c=getchar();
}
else switch(compare(gettop2(list2),c))
{
case'<':
{
push2(list2,c);
c=getchar();
break;
}
case'=':
{
pop2(list2);
c=getchar();
break;
}
case'>':
{
int temat=pop2(list2);
int b=pop1(list1);
int a=pop1(list1);
result=oprate(a,temat,b);
push1(list1,result);
break;
}
}
}

printf("%d/n",gettop1(list1));

}

***********************************************************************************
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: