小白求助!进栈问题。

cspncspn 2011-04-14 01:28:46
代码如下,功能是表达式求值:
#include "stdio.h"
#define STACKSIZE 200
#define STACKINCREMENT 20



typedef struct Sqstack
{
char *top;
char *base;
int stacksize;
}Sqstack,*Linklist;

Initstack(Linklist s)
{
s->base=(char*)malloc(STACKSIZE*sizeof(char));
if(!s->base)
return 0;
s->top=s->base;
s->stacksize=STACKSIZE;
return 0;
}

void Push(Linklist s,char e)
{
/* if(s.top-s.base>=s.stacksize)
{
s.base=(char *)realloc(s.base,((s->STACKSIZE)+STACKINCREMENT)*sizeof(char));
if(!s.base)exit(1);
s.top=s.base+STACKSIZE;
s.stacksize+=STACKINCREMENT;
}*/
*s.top++=e;
}

char Pop(Linklist s,char e)
{
if(s.top==s.base)exit(1);
e=*--s.top;
return e;
}

char GetTop(Sqstack s)
{
char e;
if(s.top==s.base)
e=*(s.top-1);
return e;
}

char Precede(char top,char c)
{
char result;
switch(c)
{
case '#':result='>';break;
case '+':
case '-':if(top=='#'||top=='(') result='<';
else result='>';break;
case '*':
case '/':if(top=='*'||top=='/')result='>';
else result='<';break;
case ')':if(top=='(')result='=';
else result='>';break;
case '(': result='<';break;
}
return result;
}

In(char c)
{
int i=0;
char optr[7]={'+','-','*','/','(',')','#'};
for(i=0;i<7;i++)
{
if(optr[i]==c)
{
return 1;
}
}
return 0;
}

char Operate(char a,char theta,char b)
{
switch(theta)
{
case '+':
return (a-'0')+(b-'0')+'0';
break;
case '-':
return (a-'0')-(b-'0')+'0';
break;
case '*':
return (a-'0')*(b-'0')+'0';
break;
case '/':
return (a-'0')/(b-'0')+'0';
break;
}
}

int EvaluateExpression()
{
Sqstack OPTR;
Sqstack 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 '<': Push(OPTR,c);c=getchar();break;
case '=': Pop(&OPTR,x);c=getchar();break;
case '>': Pop(&OPTR,theta);Pop(&OPND,b);Pop(&OPND,a);
Push(&OPND,Operate(a,theta,b));break;
}
}
return GetTop(OPND);
}

main()
{
printf("please input the formula ,and end with '#':\n");
EvaluateExpression();
}

就是字符不能进OPND栈和OPTR栈,为什么?Push()函数有问题?
啊...快上课啦...貌似问题描述得不够清楚...




















...全文
41 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧