求多项式相加的程序,有点问题!
//多项式的链式存储以及多项式的加法和乘法的实现#include<stdlib.h>
#include<malloc.h>
#include<stdio.h>
#include<conio.h>
typedef struct node{
int xi; //存储多项式系数
int zi; //存储多项式指数
struct node *next;
}LinkList;
LinkList *CreatList()
{//尾插法建立多项式链表
LinkList *head,*p,*pre;
int fg,tag;
head=(LinkList *)malloc(sizeof(LinkList));
pre=head;
head->next=NULL;
scanf("%d%d",&fg,&tag);
while(fg!=0&&tag!=0)
{
p=(LinkList *)malloc(sizeof(LinkList));
p->xi=fg;
p->zi=tag;
p->next=pre->next;
pre->next=p;
pre=p;
scanf("%d%d",&fg,&tag);
}
if(fg==0&&tag==0)
printf("输入结束\n");
return head;
}
LinkList *AddList(LinkList *a,LinkList *b)
{//多项式的加法
LinkList *c,*pa,*pb,*pc,*r,*s;
float fg;
c=(LinkList *)malloc(sizeof(LinkList));
c->next=NULL;
pa=a->next;
pb=b->next;
pc=c->next;
while(pa&&pb)
{
if(pa->zi<pb->zi)
{
pc=pa;
pa=pa->next;
pc=pc->next;
}
if(pa->zi>pb->zi)
{
pc=pb;
pb=pb->next;
pc=pc->next;
}
if(pa->zi==pb->zi)
{
fg=pa->xi+pb->xi;
if(fg==0)
{
r=pa;s=pb;
pa=pa->next;
pb=pb->next;
free(r);
free(s);
}
else
{
pa->xi=fg;
r=pb;
pc=pa;
pa=pa->next;
pb=pb->next;
pc=pc->next;
free(r);
}
}
}
while(pa)
{
pc=pa;
pa=pa->next;
pc=pc->next;
}
while(pb)
{
pc=pb;
pa=pb->next;
pc=pc->next;
}
return c;
}
void ReadList(LinkList *head)
{//读取链表中的多项式中的各项
LinkList *p;
p=head->next; //指向第一个数据结点
while(p)
{
printf("%dX^%d ",p->xi,p->zi);
p=p->next;
}
printf("\n");
}
void main()
{
LinkList *A,*B,*C;
printf("请输入多项式A中的系数和指数,并按照指数递增的顺序输入以0结束\n");
A=CreatList();
printf("请输入多项式B中的系数和指数,并按照指数递增的顺序输入以0结束\n");
B=CreatList();
printf("A中的数据为:\n");
ReadList(A);
printf("\n");
printf("B中的数据为:\n");
ReadList(B);
printf("\nhere");
C=AddList(A,B); //从这句一下便运行不起来是怎么回事?
printf("C中的数据为:\n");
ReadList(C);
getch();
}