c语言实现一元多项式(二)

2013-07-22 17:54:06 · 作者: · 浏览: 240

 

  if (p1->expn == p2->expn) {

  p1->coef = p1->coef + p2->coef;

  if (p1->coef == 0) {

  t = p1->next;

  free(p1);

  p1 = t;

  } else {

  p->next = p1;

  p1 = p1->next;

  p = p->next;

  }

  t = p2->next;

  free(p2);

  p2 = t;

  } else {

  t = p1->expn > p2->expn p1 : p2;

  p->next = t;

  p = t;

  t = t->next;

  p1->expn > p2->expn p1 : p2 = t;

  }

  }

  p->next = 0;

  if(p2){

  p->next = p2;

  }

  free(b);

  b = 0;

  return OK;

  }

  Status SubPoly(Poly *a, Poly *b) {

  CHECK(*a&&*b&&*a!=*b);

  Poly p = (*b)->next;

  while(p){

  p->coef = -p->coef;

  p = p->next;

  }

  return AddPoly(a,b);

  }

  Status reverse(Poly head){

  CHECK(head);

  Poly e = 0;

  Poly p = head->next;

  Poly t;

  while(p){

  t = p->next;

  p->next = e;

  e = p;

  p = t;

  }

  head->next = e;

  return OK;

  }

  Status multiPoly(Poly *a,Poly *b){

  CHECK(*a&&*b);

  Poly head,p1,p2;

  CHECK(makeNode(0,0,&head));

  p1 = (*a)->next;

  while(p1){

  p2 = (*b)->next;

  while(p2){

  AddNodePoly(&head,p1->coef*p2->coef,p1->expn+p2->expn);

  print(head);

  p2 = p2->next;

  }

  p1 = p1->next;

  }

  *a = head;

  return OK;

  }

  int main() {

  freopen("c:/in.log", "r", stdin);

  Poly a = 0, b = 0;

  if (createPoly(&a)) {

  print(a);

  }

  if (createPoly(&b)) {

  print(b);

  }

  if (SubPoly(&a, &b)) {

  print(a);

  }

  destoryPoly(&a);

  return 0;

  }