永发信息网

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

答案:1  悬赏:60  手机版
解决时间 2021-04-16 07:26
  • 提问者网友:心如荒岛囚我终老
  • 2021-04-16 01:51

#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中执行 就是说 内存不能为读


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

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

最佳答案
  • 五星知识达人网友:一袍清酒付
  • 2021-04-16 02:22
我运行了一下,和你的问题一样,让我再看看吧。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯