您的位置:首页 > 其它

单链表实现一元多项式相加

2017-11-25 09:37 471 查看
# include <stdio.h>

# include <malloc.h>

# include <stdlib.h>

typedef struct  LNode

{

  int  coef;

  int  exp;

  struct  LNode *next;

}node;

node *Createlist()//创建一元多项式链表

{

  node *head,*middle,*s;//新定义三个链表head作为返回,middle作为中间变量,s为新插入项;

  int  coef, exp;

  head = (node *)malloc(sizeof(node));

  if (!head)

  {

    exit(-1);

  }

  head->next = NULL;

  middle = head;

  printf("请输入每一项的系数和指数:");

  scanf("%d%d",&coef,&exp);

  while (!((coef==0)&&(exp==0)))//当系数和指数都为0时,多项式结束

  {

    s = (node *)malloc (sizeof(node));

    if (!s)

    {

      exit(-1);

    }

    s->coef = coef;

    s->exp = exp;

    s->next = middle->next;

    middle->next = s;

    middle = s;

   printf("请继续输入:");

    scanf("%d%d",&coef,&exp);

  }

  return head;

}

void Listadd(node *listya, node *listyb)//ya=a1*x^t1+a2*x^t2;yb=b1*x^n1+b2*x^n2

{

  node *p, *q, *pre, *temp;

  int  sum = 0;;

  p = listya->next;

  q = listyb->next;

  pre = listya;

  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);  //将yb链中相应项释放掉,和放到ya链中

        q = temp;

      }

      else

      {

        temp = p->next;

        free(p);

        p = temp;

        temp = q->next;

        free(q);

        q = temp;

      }

    }

  }

  pre->next = p?p:q;

}

int Print(node *h)

{

  node *p = h->next;

  if(p)

  {

       printf("%d*x^%d",p->coef, p->exp);

       p=p->next;

  }

  while (p)

  {

    printf("+%d*x^%d",p->coef, p->exp);

    p = p->next;

  }

  printf("\n");

  return 1;

}

int main()

{

  node *listya, *listyb;

  printf("输入结束标志位系数和指数同为0 \n");

  printf("请输入第一个一元多项式的系数和指数\n");

  listya = Createlist();

  printf("你输入的第一个一元多项式为:");

  Print(listya);

  printf("请输入第二个一元多项式的系数和指数\n");

  listyb = Createlist();

  printf("你输入的第二个一元多项式为:");

  Print(listyb);

  printf("两个一元多项式相加后的结果为:");

  Listadd(listya, listyb);

  Print(listya);

  return 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: