一元多项式相加

多项式相加实现代码

void addList(LinkList a,LinkList b)
{Node *p,*q,*r,*t;
 p=a->next;
 q=b->next;
 r=a;
 while(p!=NULL&&q!=NULL)
{
  if(p->exp<q->exp)
  { r->next=p;
    r=p;
    p=p->next;
  }
 else if(p->exp>q->exp)
 { r->next=q;
   r=q;
   q=q->next;
 }
 else
 {  if((p->coef+q->coef)==0)
    {
    t=p;
    p=p->next;
    free(t);
    t=q;
    q=q->next;
    free(t);
    }
   else
   {p->coef=p->coef+q->coef;
    r->next=p;
	r=p;
    p=p->next;
    t=q;
    q=q->next;
    free(t);
   }
}
}
if(p==NULL) { r->next=q;}
if(q==NULL) { r->next=p;}
}

完整代码

#include<stdlib.h>
#include <stdio.h>
typedef struct Node
{ int coef;//系数
  int exp;//指数
  struct Node *next; 
}Node,*LinkList;

//尾插法创建单链表
LinkList creatList()
{ LinkList L;
  Node *p,*r;
  int c,e;
  L=(LinkList)malloc(sizeof(Node));
  r=L; 
  scanf("%d,%d",&c,&e);
  while(c!=0)
  {
  p=(Node*)malloc(sizeof(Node));
  p->coef=c;
  p->exp=e;
  r->next=p;
  r=p;
  scanf("%d,%d",&c,&e);
  }
  r->next=NULL;
  return L;
}

//多项式相加
void addList(LinkList a,LinkList b)
{Node *p,*q,*r,*t;
 p=a->next;
 q=b->next;
 r=a;
 while(p!=NULL&&q!=NULL)
{
  if(p->exp<q->exp)
  { r->next=p;
    r=p;
    p=p->next;
  }
 else if(p->exp>q->exp)
 { r->next=q;
   r=q;
   q=q->next;
 }
 else
 {  if((p->coef+q->coef)==0)
    {
    t=p;
    p=p->next;
    free(t);
    t=q;
    q=q->next;
    free(t);
    }
   else
   {p->coef=p->coef+q->coef;
    r->next=p;
	r=p;
    p=p->next;
    t=q;
    q=q->next;
    free(t);
   }
}
}
if(p==NULL) { r->next=q;}
if(q==NULL) { r->next=p;}
}

//打印多项式
void printList(LinkList L)
{ int a,b;
  Node *p=L->next;
  do
  {a=p->coef;
   b=p->exp;
   if(b==0) {printf("%d",a);}
   
   else
   { if(p->coef<0)
	   printf("%dx^%d",a,b);
     else
	 {printf("+%dx^%d",a,b);}
   }
   p=p->next;
  }while(p!=NULL);
   printf("\n");
}
//主函数
int main()
{ printf("请依次输入第一个多项式的系数和指数(m,n):\n");
  LinkList A=creatList();
  printf("打印第一个多项式:\n");
  printList(A);
  printf("请依次输入第二个多项式的系数和指数(m,n):\n");
  LinkList B=creatList();
  printf("打印第二个多项式:\n");
  printList(B);
  addList(A,B);
  printf("相加后的多项式:\n");
  printList(A);
  return 0;
}



运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值