永发信息网

C语言 数据结构 求表达式的值

答案:1  悬赏:60  手机版
解决时间 2021-04-16 07:26

#include"stdio.h"
#include"stdlib.h"
#define null 0
typedef struct snode
{char data1;
struct snode *next;
}snode,*slink;
typedef struct qnode
{char data2;
struct qnode *link;
}qnode,*qlink;
qlink fr=null,re;
int xyj(char ch)
{int i;
switch(ch)
{case '+':i=3;break;
case '-':i=3;break;
case '*':i=4;break;
case '/':i=4;break;
case '(':i=2;break;
case '#':i=1;break;
}
return i;
}
int z(qlink front,qlink rear)
{slink top=null,p;
qlink q;
char d;
int i,j;
p=(slink)malloc(sizeof(snode));
p->data1='#';
p->next=top;
top=p;
while(1)
{d=front->data2;

switch(d)
{case 'd':
q=(qlink)malloc(sizeof(qnode));
q->data2=d;
q->link=null;
if(fr==null)
fr=q;
else re->link=q;
re=q;
break;
case ')':
while(top->data1!='(')
{q=(qlink)malloc(sizeof(qnode));
q->data2=top->data1;
q->link=null;
if(fr==null)
fr=q;
else re->link=q;
re=q;
top=top->next;
}
top=top->next;
break;
case '#':
while(top->data1!='#')
{q=(qlink)malloc(sizeof(qnode));
q->data2=top->data1;
q->link=null;
if(fr==null)
fr=q;
else re->link=q;
re=q;
top=top->next;
}
return 1;
default:
i=xyj(top->data1);
j=xyj(d);
while(i>=j)
{q=(qlink)malloc(sizeof(qnode));
q->data2=top->data1;
q->link=null;
if(fr==null)
fr=q;
else re->link=q;
re=q;
top=top->next;
i=xyj(top->data1);
}
p=(slink)malloc(sizeof(snode));
p->data1=d;
p->next=top;
top=p;
}
front=front->link;
}
}
main()
{qlink front=null,rear,q;
slink top=null,p;
char d,i;
int n;

printf("请输入表达式(end to =):");
scanf("%c",&d);
while(d!='=')
{q=(qlink)malloc(sizeof(qnode));
q->data2=d;
q->link=null;
if(front==null)
front=q;
else rear->link=q;
rear=q;
scanf("%c",&d);
}
q=(qlink)malloc(sizeof(qnode));
q->data2='#';
q->link=null;
rear->link=q;
rear=q;
n=z(front,rear);

for(;fr!=null;fr=fr->link)
{d=fr->data2;
switch(d)
{case '+':
i=top->data1;
top=top->next;
top->data1=top->data1+i;
break;
case '-':
i=top->data1;
top=top->next;
top->data1=top->data1-i;
break;
case '*':
i=top->data1;
top=top->next;
top->data1=top->data1*i;
break;
case '/':
i=top->data1;
top=top->next;
top->data1=top->data1/i;
break;
default:
p=(slink)malloc(sizeof(snode));
p->data1=d;
p->next=top;
top=p;
}
}
printf("%d",top->data1);
}

这个题目是就是 输入表达式 求值。 我这个程序是以=作为结束符

如 7×(9+5)=再按回车

就会输出结果

但是我在VC中执行 就是说 内存不能为读


就是这样我觉得是程序的逻辑有问题,但就是找不出

麻烦您帮帮忙,小弟不胜感激

最佳答案
我运行了一下,和你的问题一样,让我再看看吧。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
爱的眼泪是甜还是苦?
超级QQ自动续费时会有短信提醒么?
什么酒喝不醉
我的网上密宝丢了怎么解绑呀
克拉玛依市实验中学地址在什么地方,想过去办
古风唯美伤感诗句
明天快船队能赢吗?
2K9的24秒进攻时间怎么显示不了
女朋友化妆半天出不了门 要不要催催她
螺丝工具轴承阀门在什么地方啊,我要过去处理
微信钱包密码怎么修改,微信零钱支付密码怎么
蜡烛鬼故事。。。
网恋真的不会有好的结果么?
怎样的人才是好人呢?
给外地的人充话费
推荐资讯
我在玛河捡了块石头,请大师们看看有没有价值
华一十队在哪里啊,我有事要去这个地方
好友房产地址在什么地方,想过去办事
假如我从此从网络中消失,会不会有人伤心啊?
中国神话比美国漫威有体系多了,为什么拍不出
谁可以给我赠送一颗音信图标,还有爱墙的种子
兴城汽配地址有知道的么?有点事想过去
三角园路/诺德路(路口)在哪里啊,我有事要去
宿迁韵博企业管理有限公司地址在什么地方,想
这世界真就金钱为主情感为仆?我一定要改变这
秦兵马俑的宣传标语,秦兵马俑广告宣传标语
表达苏东坡志向的诗词,苏轼归田园和归佛门的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?