大哥大姐们,帮我看看我编多项式的程序,调试通过了。但还是得不到我想要的结果。
是不是把lb中的元素插入到la中,需要建立新的结点,我认为只需要改变指针的指向即可,没有必要建立新的结点。是不是这个算法还有什么不完善的,请指教。
#include <stdio.h>
#include <stdlib.h>
#define null 0
typedef struct list
{
float ceof;
int zhishu;
struct list *next;
}term;
term *creat(int n)
{
term *head,*p,*q;
int i;
head=(term *)malloc(sizeof(term));
head.ceof=0.0;
head.zhishu=-1;
p=head;
for(i=0;i<n;i++)
{
q=(term *)malloc(sizeof(term));
scanf("%d%d",&p.ceof,&p.zhishu);
q->next=null;
p->next=q;
p=q;
}
p->next=null;
return head;
}
void xiangjia(*la,*lb)
{
term *ha,*hb,*qa,*qb;
ha=la; hb=lb;
qa=ha->next;qb=hb->next;
while(qa&&qb)
{
if(qa.zhishu<qb.zhishu)
{ ha=qa;qa=qa->next;}
else if(qa.zhishu==qb.zhishu)
{
sum=qa.zhishu+qb.zhishu;
if(sum!=0)
{
qa.zhishu=sum;
ha=qa;
}
else
{
ha->next=qa->next; free(qa);
hb->next=qb->next; free(qb);
qa=ha->next;
qb=hb->next;
}
}
else
{
hb->next=qb->next; free(qb);
ha->next=qb;
qb->next=qa->next;
qb=hb->next;
ha=ha->next;
}
}
if(!qa)
{ qa->next=qb;free(hb);}
}
void display(*head)
{
term *p;
p=head->next;
while(p)
{
printf("%d*x%d",p.ceof,p.zhishu);
p=p->next;
}
printf("\n");
}
void main()
{
term *la,*lb;
printf("请输入多项式的长度m和n\n");
scanf("%d%d",&m,&n);
la=creat(m);
lb=creat(n);
xiangjia(la,lb);
printf("相加得到的多项式为:\n");
display(la);
}