题述
1.创建两个一元多项式;
2.输出一元多项式;
3.实现两个一元多项式相加;
4.输出相加后的一元多项式
目的
掌握利用单链表实现两个多项式相加算法
代码
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
float coef;
int expn;
} DataType;
typedef struct Node
{
DataType data;
struct Node *next;
} LNode,*LinkList;
void CreateLinkList2(LinkList L)
{
LinkList r,s;
DataType x;
printf("Please Input coef and expn:");
scanf("%f%d",&x.coef,&x.expn);
r=L;
while(x.coef!=0)
{
s=(LinkList) malloc(sizeof(LNode));
s->data.coef=x.coef;
s->data.expn=x.expn;
r->next=s;
r=s;
scanf("%f%d",&x.coef,&x.expn);
}
r->next=NULL;
}
void PrintLinkList(LinkList L)
{
LinkList p;
p=L->next;
while(p)
{
printf("%.2f*X^%d",p->data.coef,p->data.expn);
p=p->next;
if (p&&p->data.coef>0)
printf("+");
}
printf("\n");
}
LinkList Add_L(LinkList P,LinkList Q)
{
LinkList p,q,r,s; //r指向和多项式的链表的尾指针,s指向待释放结点
float sum; //sum记录相同指数结点的系数和
p=P->next;
q=Q->next;
r=P;
while(p&&q)
{
if(p->data.expn<q->data.expn)
{
r->next=p;
r=r->next;
p=p->next;
}
else if (p->data.expn>q->data.expn)
{
r->next=q;
r=r->next;
q=q->next;
}
else
{
sum=p->data.coef+q->data.coef;
if (sum!=0)
{
p->data.coef=sum;
r->next=p;
r=r->next;
p=p->next;
s=q;
q=q->next;
free(s);
}
else
{
s=p;
p=p->next;
free(s);
s=q;
q=q->next;
free(s);
}
}
}
if(p)
r->next=p;
else
r->next=q;
free(Q);
return P;
}
int main()
{
LinkList L,P,Q;
P=(LinkList) malloc(sizeof(LNode));
P->next=NULL;
printf("Create P:\n");
CreateLinkList2(P);
printf("Output Linklist P:\n");
PrintLinkList(P);
Q=(LinkList) malloc(sizeof(LNode));
Q->next=NULL;
printf("Create Q:\n");
CreateLinkList2(Q);
printf("Output Linklist Q:\n");
PrintLinkList(Q);
L=Add_L(P,Q);
printf("Output Linklist L:\n");
PrintLinkList(L);
return 0;
}