多项式合并同类项问题
这个函数编译通过 就是运行不了 我看不出是哪里有问题啊 pn * tongleixiang(pn * head) //pn 是多项式的节点类型
{
pn *p,*temp;
head=sort(head); //先把多项式从大到小排序 排序函数没问题
p=head->next;
while(p)
{
temp=p->next;
if(p->e==temp->e) //当前和下一个指数相同的话
{
p->c+=temp->c; //把下一个节点的系数加到当前节点的系数
p->next=temp->next; //把指针指向下一个的下一个
free(temp);
continue; //继续从p开始和p->next比较
}
p=p->next;
}
return head;
}
那位高手帮忙解答一下
----------------解决方案--------------------------------------------------------
怎么没人啊 晕 等了一天了
----------------解决方案--------------------------------------------------------
if(p->e==temp->e) 调试时 这边提示程序产生一个访问段违例
----------------解决方案--------------------------------------------------------
temp=p->next
这个TEMP可能是NULL
----------------解决方案--------------------------------------------------------
为什么? 我已经把p->next指向p->next->next;也就是p->next=temp->next;
----------------解决方案--------------------------------------------------------
你只是验证了P不是空的
----------------解决方案--------------------------------------------------------
加油啊
----------------解决方案--------------------------------------------------------
请问我应该怎么修改代码呢 ?
----------------解决方案--------------------------------------------------------
最好能把程序贴上来,否则我没有办法编译.
pn * tongleixiang(pn * head) //pn 是多项式的节点类型
{
pn *p;
p=(head=sort(head)); //先把多项式从大到小排序 排序函数没问题
while(p->next)
{
if(p->e==(p->next)->e) //当前和下一个指数相同的话
{
(p->c)+=(p->next)->c; //把下一个节点的系数加到当前节点的系数
p->next=(p->next)->next; //把指针指向下一个的下一个
free(p->next);
continue; //继续从p开始和p->next比较
}
p=p->next;
}
return head;
}
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <malloc.h>
typedef struct danxiang
{
int c,e;
struct danxiang * next;
}pn;
pn * create()
{
pn * head, * p;
int n,i=1;
printf("输入多项式的个数n\n");
printf("n= ");
scanf("%d",&n);
head=p=(pn*)malloc(sizeof(pn));
while(n)
{
p->next=(pn*)malloc(sizeof(pn));
p=p->next;
printf("输入第%d单项式的系数和指数,以空格分开\n",i);
scanf("%d%d",&p->c,&p->e);
n--;
i++;
}
p->next=NULL;
return head;
}
pn * tongleixiang(pn * head)
{
pn *p,*temp;
p=head->next;
while(p)
{
temp=p->next;
if(p->e==temp->e)
{
p->c+=temp->c;
p->next=temp->next;
free(temp);
}
else p=p->next;
}
return head;
}
void print(pn * head)
{
pn * p=head->next;
printf("F(x) = ");
while(p)
{
if(p->c==1)
{
if(p->e==0)
printf("%d",p->c);
else if(p->e==1)
printf("X");
else printf("X^%d",p->e);
}
else
{
if(p->e==0)
printf("%d",p->c);
else if(p->e==1)
printf("%dX",p->c);
else printf("%dX^%d",p->c,p->e);
}
p=p->next;
if(p) printf(" + ");
}
}
void freememory(pn * head)
{
pn * q=head;
while(q)
{
head=head->next;
free(q);
q=head;
}
}
int main()
{
pn *p,*q;
p=create();
q=tongleixiang(p);
print(q);
freememory(p);
getch();
return 0;
}
程序在turbo c++3.0可以 在devcpp就不行 怎么回事啊
----------------解决方案--------------------------------------------------------