利用结点数据类型,求两个一元多项式的和

来源:互联网 发布:keras tensorflow 编辑:程序博客网 时间:2024/06/03 18:01
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct  PNode
{
  int  coef;
  int  exp;
  struct  PNode *next;
}node;


node *CreateP(void)
{
  node *h,*tail,*s;
  int  coef, exp;


  h = (node *)malloc(sizeof(node));
  if (!h)
  {
    exit(-1);
  }
  h->next = NULL;
  tail = h;


  printf("请输入每一项的系数和指数(中间以逗号隔开):\n");
  printf("coef,exp: ");
  scanf("%d,%d",&coef,&exp);
  while (coef)
  {
    s = (node *)malloc (sizeof(node));
    if (!s)
    {
      exit(-1);
    }
    s->coef = coef;
    s->exp = exp;
    
    s->next = tail->next;
    tail->next = s;
    tail = s; 
    
    printf("ceof,exp: ");
    scanf("%d,%d",&coef,&exp);
  }


  return h;
}


 


void PAdd(node *polya, node *polyb)
{
  node *p, *q, *pre, *temp;
  int  sum = 0;;


  p = polya->next;
  q = polyb->next;
  pre = polya;


  while (p && q)
  {
    if (p->exp < q->exp)
    {
      pre->next = p;
      pre = p;
      p = p->next;
    }
    else if (p->exp > q->exp)
    {
      pre->next = q;
      pre = q;
      q = q->next;
    }
    else
    {
      sum = p->coef + q->coef;
      if (sum)
      {
        p->coef = sum;
        pre->next = p;
        pre = p;
        p = p->next;
  
        temp = q->next;
        free(q);
        q = temp;
      }
      else
      {
        temp = p->next;
        free(p);
        p = temp;


        temp = q->next;
        free(q);
        q = temp;
      }
    }
  }


  pre->next = p?p:q;
}




int Prin(node *h)
{
  node *p = h->next;
  
 
  while(p&&(p->next!=NULL))
  {
    printf("%d*x^%d+",p->coef, p->exp);
 p = p->next;
  }
  if(p->next==NULL)
  printf("%d*x^%d",p->coef, p->exp);
  printf("\n");
  return 1;
}
void main()
{
  node *polya, *polyb;
  printf("请输入第一个一元多项式的系数和指数(以输入系数为0来结束):\n");
  polya = CreateP();
  printf("\n");
  printf("请输入的第一个一元多项式为:\n");
  Prin(polya);
   printf("\n");
  printf("输入第二个一元多项式的系数和指数(以输入系数为0来结束):\n");
  polyb = CreateP();
   printf("\n");
  printf("输入的第二个一元多项式为:\n");
  Prin(polyb);
    printf("\n");
  printf("这两个一元多项式相加后的多项式C为:\n");
  printf("C=");
  PAdd(polya, polyb);
  Prin(polya);
  fflush(stdin);
  getchar();

}



0 0
原创粉丝点击