polynomial 一元多项式乘法实现

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);

}

你可能感兴趣的:(polynomial 一元多项式乘法实现)