Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2341185
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:08:01

这是一个求表达式的题目

#include
#include
#include
typedef char elemtype;  //类型
class stack
{
public:
elemtype *top;
elemtype *base;
int size;
};
int initstack(stack &s)  //初始
{
s.base=(elemtype *)malloc(100*sizeof(elemtype));  //分配空间
if(!s.base)  exit(1);
s.top=s.base;
s.size=100;
return 1;
}
elemtype gettop(stack &s)  //获得栈顶元素
{
if(s.base==s.top) return 0;
return *(s.top-1);
}
int push(stack &s,elemtype e)  //入栈
{
if(s.top-s.base==s.size)
{
s.base=(elemtype *)realloc(s.base,(s.size+10)*sizeof(elemtype));
if(!s.base)  exit(1);
s.top=s.base+s.size;
s.size=s.size+10;
}
*(s.top++)=e;
return 1;
}
int pop(stack &s,elemtype &e)  //出栈
{
if(s.base==s.top)
return 0;
e=*(--s.top);
free(s.top);
return 1;
}
int precede(char a1,char a2)
{
int i,j;
char op[7]={'+','-','*','/','(',')','#'};
for(i=0;i<=6;i++)
if(op[i]==a1) break;
for(j=0;j<=6;j++)
if(op[j]==a2) break;
int y[7][7]={{1,1,-1,-1,-1,1,1},{1,1,-1,-1,-1,1,1},{1,1,1,1,-1,1,1},{1,1,1,1,-1,1,1},{-1,-1,-1,-1,-1,0,2},{1,1,1,1,2,1,1},{-1,-1,-1,-1,-1,2,0}};
return y[i][j];
}
int poe(char a1,char b,char a2)
{
int c1,c2;
c1=a1-'0';c2=a2-'0';
switch(b)
{
case '+':return c1+c2;break;
case '-':return c1-c2;break;
case '*':return c1*c2;break;
case '/':return c1/c2;break;
default:cout<<"出错!!"< }
}
int in(char a)
{
if(a>='0'&&a<='9')
return 1;
else
return 0;
}
void main()
{
stack optr,opnd;
char a,b,c,x,theta;
initstack(optr); //运算符
push(optr,'#');
initstack(opnd); //操作数
c=getchar();
while(c!='#'||gettop(optr)!='#')
{
if(in(c))
{
push(opnd,c);
c=getchar();
}
else switch(precede(gettop(optr),c))
{
           case -1:push(optr,c);c=getchar();break;
   case 0:pop(optr,x);c=getchar();break;
   case 1:pop(optr,theta);pop(opnd,b);pop(opnd,a);push(opnd,poe(a,theta,b));break;
}
}
cout<}
输入 3*(7-2)# 应该得 15 但是就是运行不出来,请高手看看错在哪里。

--------------------next---------------------

阅读(1213) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~