| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 502 人关注过本帖
标题:数据结构:表达式求值出错问题,大家请看!
收藏  订阅  推荐  打印 
yuesheng
Rank: 1
等级:新手上路
帖子:23
积分:330
注册:2007-4-21
数据结构:表达式求值出错问题,大家请看!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

typedef struct
{int *base;
int *top;
int stacksize;
}sqstack1;

typedef struct
{char *base;
char *top;
char stacksize;
}sqstack2;

sqstack1 Initstack1(sqstack1 s)
{s.base=(int *)malloc(100*sizeof(int));
s.top=s.base;
s.stacksize=100;
return(s);
}

sqstack2 Initstack2(sqstack2 s)
{

s.base=(char *)malloc(100);
s.top=s.base;
s.stacksize=100;
return(s);
}

void push2(sqstack2 s,char e)
{*s.top++=e;
/*printf("%c\n",*(s.top-1));*/}


void push1(sqstack1 s,char e)
{int i;
i=e-48;
*s.top++=i;
/*printf("%d",i);*/
}

char pop2(sqstack2 s,char e)
{if(s.top==s.base) return 0;
e=*--s.top;

return (e);
}

int pop1(sqstack1 s,int e)
{if(s.top==s.base) return 0;
e=*--s.top;
return (e);
}

int gettop1(sqstack1 s,int e)
{e=*(s.top-1);
return (e);
}

char gettop2(sqstack2 s,char e)
{e=*(s.top-1);
printf("%c\n",e);/*我的这条输出语句输不出来?*/
return (e);
}

int In(char c)
{if(c>='0'&&c<='9') return (1);
else return (0);
}


char precede(char optr,char c)
{char stack[6]={'#','(','+','-','*','/'};
char input[7]={'#',')','+','-','*','/','('};
int p=0,q=0;
while(stack[p]!=optr)
p++;
while(input[q]!=c)
q++;
if(p/2<q/2) return('<');
if(p/2>=q/2)
{if(p==1) return('=');
else return('>');
}
}


int operate(int a,char theta,int b)
{if(theta=='+') return(a+b);
if(theta=='-') return(a-b);
if(theta=='*') return(a*b);
if(theta=='/') return(a/b);
}

void main(void)
{sqstack1 opnd;
sqstack2 optr;
char c,theta,x;
int a,b,e;
optr=Initstack2(optr);
push2(optr,'#');
gettop2(optr,x);
opnd=Initstack1(opnd);
c=getchar();
while(c!='#'||gettop2(optr,x)!='#')
{if(In(c)) {push1(opnd,c);c=getchar();/*printf("%d",gettop1(opnd,e));*/}
else
switch(precede(gettop2(optr,x),c))
{case '<':
push2(optr,c);
c=getchar();
break;
case'=':
pop2(optr,x);
c=getchar();
break;
case'>':
theta=pop2(optr,theta);
b=pop1(opnd,b);
a=pop1(opnd,a);
x=operate(a,theta,b)+48;
push1(opnd,x);
break;
}
}
printf("%d",gettop1(opnd,e));
getch();
}

搜索更多相关主题的帖子: 数据结构  求值  表达  
2007-4-22 10:12
soft_wind
Rank: 6Rank: 6
等级:金牌会员
威望:8
帖子:1430
积分:14400
注册:2006-4-5

你的栈写得有问题.
之所以打印不出来,是因为你用参数传递栈的形式弄错了.
void push2(sqstack2& s,char e) //加个&就可以了。
{*s.top++=e;
/*printf("%c\n",*(s.top-1));*/}
ps:格式太乱,后面的实在看不下去。

对不礼貌的女生收钱......
2007-4-22 21:50
yuesheng
Rank: 1
等级:新手上路
帖子:23
积分:330
注册:2007-4-21

谢了啊,真是传递有问题,已经改出来了
2007-4-24 16:04
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.071666 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved