C++链表实现一元多项式相加代码如下:
(输入多项式按次数从高到低排列)
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
struct node{
int coe;
int order;
struct node *link;
};//定义节点类型,coe表示x前的系数,order表示x的次数
int coe,order;
int i;
int nodeNumA;//多项式A的项数
printf("请输入多项式A的项数:\n");
scanf("%d",&nodeNumA);
printf("请输入多项式A:\n");
struct node *headA=0,*pA=0,*qA=0;
scanf("%d %d",&coe,&order);
headA=new struct node;
headA->coe=coe;
headA->order=order;
headA->link=0;
qA=headA;
for(i=1;i<nodeNumA;i++){
scanf("%d %d",&coe,&order);
pA=new struct node;
pA->coe=coe;
pA->order=order;
pA->link=0;
qA->link=pA;
qA=qA->link;
}//扫入A
printf("\n您输入的多项式A为:\n");
printf("%dx^%d",headA->coe,headA->order);
pA=headA->link;
while(pA!=0){
printf("+%dx^%d",pA->coe,pA->order);
pA=pA->link;
}//输出所输入的多项式A
printf("\n\n");
int nodeNumB;//多项式B的项数
printf("请输入多项式B的项数:\n");
scanf("%d",&nodeNumB);
printf("请输入多项式B:\n");
struct node *headB=0,*pB=0,*qB=0;
scanf("%d %d",&coe,&order);
headB=new struct node;
headB->coe=coe;
headB->order=order;
headB->link=0;
qB=headB;
for(i=1;i<nodeNumB;i++){
scanf("%d %d",&coe,&order);
pB=new struct node;
pB->coe=coe;
pB->order=order;
pB->link=0;
qB->link=pB;
qB=qB->link;
}//扫入B
printf("\n您输入的多项式B为:\n");
printf("%dx^%d",headB->coe,headB->order);
pB=headB->link;
while(pB!=0){
printf("+%dx^%d",pB->coe,pB->order);
pB=pB->link;
}//输出所输入的多项式B
printf("\n\n");
struct node *p=0,*q=0;
p=headA;
q=headB;
struct node *headC=0,*r=0,*s=0;
headC=new struct node;
while(p->order==q->order&&p->coe+q->coe==0){
p=p->link;
q=q->link;
}//当多项式A、B最高项次数相同且系数和为0直接舍去
if(p->order==q->order){
headC->coe=p->coe+q->coe;
headC->order=p->order;
headC->link=0;
s=headC;
p=p->link;
q=q->link;
}
else if(p->order>q->order){
headC->coe=p->coe;
headC->order=p->order;
headC->link=0;
s=headC;
p=p->link;
}
else{
headC->coe=q->coe;
headC->order=q->order;
headC->link=0;
s=headC;
q=q->link;
}//此处生成输出的头结点
while(p!=0&&q!=0){
r=new struct node;
while(p->order==q->order&&p->coe+q->coe==0){
p=p->link;
q=q->link;
}//当多项式A、B未扫入C剩下的最高项次数相同且系数和为0直接舍去
if(p->order==q->order){
r->coe=p->coe+q->coe;
r->order=p->order;
r->link=0;
s->link=r;
s=s->link;
p=p->link;
q=q->link;
}
else if(p->order>q->order){
r->coe=p->coe;
r->order=p->order;
r->link=0;
s->link=r;
s=s->link;
p=p->link;
}
else{
r->coe=q->coe;
r->order=q->order;
r->link=0;
s->link=r;
s=s->link;
q=q->link;
}
}
if(p==0&&q!=0)
s->link=q;
else if(p!=0&&q==0)
s->link=p;
printf("\n相加结果为:\n");
printf("%dx^%d",headC->coe,headC->order);
r=headC->link;
while(r!=0){
printf("+%dx^%d",r->coe,r->order);
r=r->link;
}
printf("\n");
while(headA!=0){
p=headA;
headA=headA->link;
delete p;
}
while(headB!=0){
q=headB;
headB=headB->link;
delete q;
}
while(headC!=0){
r=headC;
headC=headC->link;
delete r;
}//释放节点空间
return 0;
}

版权声明:本文为qq_51500472原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。