polynomial 一元多项式乘法实现
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
typedef struct LNode{
float coef;
int expn;
struct LNode *next;
}Link,*LinkList;
LinkList InitList()
{
Link * head = (LinkList)malloc(sizeof(Link));
head->coef = 0.0;
head->expn = 0;
head->next = NULL;
return head;
}
Link * MakeNode()
{
float inCoef;
int inExpn;
Link * node = (LinkList)malloc(sizeof(Link));
printf("coef : ");
scanf("%f",&inCoef);
printf("expn : ");
scanf("%d",&inExpn);
node->coef = inCoef;
node->expn = inExpn;
return node;
}
LinkList CreatePolyn()
{
int i;
int a;
Link * node = NULL;
Link * p = NULL;
Link * q = NULL;
Link * head = InitList();
printf("input the number of La's items: ");
scanf("%d",&a);
for( i=0; i < a; i++)
{
node = MakeNode();
q = head->next;
p = head;
while( q && node->expn > q->expn )
{
p = q;
q = q->next;
}
if( node->expn == 0)
{
head->coef += node->coef;
}
else if( q == NULL || node->expn < q->expn )
{
p->next = node;
node->next = q;
}
else
{
q->coef += node->coef;
}
}
return head;
}
Link * MultiPolyn( LinkList La, LinkList Lb)
{
Link * qa = La;
Link * hb = Lb;
Link * qb = hb;
Link * hc = InitList();
Link * qc = hc;
Link * p = NULL;
Link * q = NULL;
Link * node = NULL;
for(; qa; qa=qa->next)
{
qb = hb;
for(; qb; qb=qb->next)
{
node = (LinkList)malloc(sizeof(Link));
node->coef = qa->coef * qb->coef;
if(node->coef == 0)
continue;
node->expn = qa->expn + qb->expn;
q = hc->next;
p = hc;
while( q && node->expn > q->expn )
{
p = q;
q = q->next;
}
if( node->expn == 0)
{
hc->coef += node->coef;
}
else if( q == NULL || node->expn < q->expn )
{
p->next = node;
node->next = q;
}
else
{
q->coef += node->coef;
}
}
}
return hc;
}
void PrintPolyn(LinkList L)
{
LinkList p= L;
while(p)
{
if(p->coef == 0.0 && p->expn == 0)
{
printf("");
p=p->next;
}
else
{
printf("%1.1f",p->coef);
if(p->expn )
printf("*x^%d",p->expn );
if(p->next && p->next->coef >0)
printf("+");
p=p->next;
}
}
printf("/n");
}
void main()
{
LinkList La = CreatePolyn();
LinkList Lb = CreatePolyn();
LinkList Lc = MultiPolyn(La, Lb);
printf("/n Initialize the linklist ....... /n");
printf(" A = ");
PrintPolyn(La);
printf(" B = ");
PrintPolyn(Lb);
printf("/n After multiplying; /n C = ");
PrintPolyn(Lc);
}