| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 808 人关注过本帖
标题:数据结构:表达式求值出错问题,大家请看!
只看楼主 加入收藏
yuesheng
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-4-21
收藏
 问题点数:0 回复次数:2 
数据结构:表达式求值出错问题,大家请看!

#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-04-22 10:12
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
你的栈写得有问题.
之所以打印不出来,是因为你用参数传递栈的形式弄错了.
void push2(sqstack2& s,char e) //加个&就可以了。
{*s.top++=e;
/*printf("%c\n",*(s.top-1));*/}
ps:格式太乱,后面的实在看不下去。

对不礼貌的女生收钱......
2007-04-22 21:50
yuesheng
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-4-21
收藏
得分:0 
谢了啊,真是传递有问题,已经改出来了
2007-04-24 16:04
快速回复:数据结构:表达式求值出错问题,大家请看!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044772 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved