数据结构 表达式求值

问题描述:使用键盘输入表达式,计算表达式的值并输出;将表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。

由于能力有限,只能编写运算个位数的运算(输入数字 -10

本程序仅供参考。

 

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

 

 #include
#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));
 
}

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

你可能感兴趣的:(数据结构,list,struct,c)