链表实现多项式相加

#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstdio>
using namespace std;
typedef struct node
{
    float c;
int e;
struct node *next;
}lnode;


void create(lnode *l)
{
lnode *r,*s;
float co;int ex;
scanf("%f%d",&co,&ex);
r=l;
while(co!=0)
{
s=(lnode *)malloc(sizeof(lnode));
s->c=co;s->e=ex;
r->next=s;
r=s;
scanf("%f%d",&co,&ex);
}
r->next=NULL;
}


void print(lnode *l)
{
lnode *p=l->next;
if(p->e==1)
cout<<p->c<<"x";
else
cout<<p->c<<"x^"<<p->e;
while(p->next!=NULL)
{
    p=p->next;
    if(p->e==1)
    cout<<p->c<<"x";
    else
    cout<<"+"<<p->c<<"x^"<<p->e;
}
cout<<endl;
}


lnode *add(lnode *P,lnode *Q)
{
lnode *p,*q,*r,*s;
float sum;
p=P->next;q=Q->next;
r=P;
while(p&&q)
{
if((p->e)<(q->e))
{
r->next=p;
r=r->next;
p=p->next;
}
else if((p->e)>(q->e))
{
r->next=q;
r=r->next;
q=q->next;
}
else
{
sum=(p->c)+(q->c);
if(sum!=0)
{
p->c=sum;
r->next=p;
r=r->next;
p=p->next;
s=q;
q=q->next;
free(s);
}
else
{
s=p;
p=p->next;
free(s);
s=q;
q=q->next;
free(s);
}
}
}
if(p)
r->next=p;
else
r->next=q;
free(Q);
return P;
}


int main()
{
lnode *p,*q;
p=(lnode *)malloc(sizeof(lnode));
q=(lnode *)malloc(sizeof(lnode));
p->next=NULL;
q->next=NULL;
create(p);
print(p);
create(q);
print(q);
print(add(p,q));
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设有两个多项式: P1(x) = 3x^3 + 2x^2 + x + 5 P2(x) = 2x^3 - 1x^2 + 7x + 3 将多项式转化为链表形式,每个节点包含单项式的系数和指数。例如,第一个多项式可以表示为: 5 -> 1 -> 2 -> 3 每个节点的第一个元素表示系数,第二个元素表示指数。第一个节点表示常数项。 接下来使用以下步骤实现多项式相加: 1. 初始化两个指针分别指向两个多项式的头节点。 2. 创建一个新的链表用于存储结果。 3. 当两个指针都没有到达链表的末尾时,执行以下操作: a. 如果当前指针指向的节点的指数相等,将两个节点的系数相加,并将结果插入到新链表中。 b. 如果当前指针指向的节点的指数不相等,则将指数较小的节点插入到新链表中,并将指向该节点的指针向后移动一位。 4. 当其中一个指针到达链表的末尾时,将另一个链表中剩余的节点依次插入到新链表中。 5. 返回新的链表,即为相加后的多项式。 以下是一个Python代码示例实现多项式相加: class Node: def __init__(self, coeff, exp, next=None): self.coeff = coeff self.exp = exp self.next = next def add_polynomials(p1, p2): ptr1, ptr2 = p1, p2 head = Node(0, 0) ptr = head while ptr1 and ptr2: if ptr1.exp == ptr2.exp: coeff_sum = ptr1.coeff + ptr2.coeff if coeff_sum != 0: ptr.next = Node(coeff_sum, ptr1.exp) ptr = ptr.next ptr1 = ptr1.next ptr2 = ptr2.next elif ptr1.exp > ptr2.exp: ptr.next = Node(ptr1.coeff, ptr1.exp) ptr = ptr.next ptr1 = ptr1.next else: ptr.next = Node(ptr2.coeff, ptr2.exp) ptr = ptr.next ptr2 = ptr2.next while ptr1: ptr.next = Node(ptr1.coeff, ptr1.exp) ptr = ptr.next ptr1 = ptr1.next while ptr2: ptr.next = Node(ptr2.coeff, ptr2.exp) ptr = ptr.next ptr2 = ptr2.next return head.next p1 = Node(5, 0, Node(1, 1, Node(2, 2, Node(3, 3)))) p2 = Node(3, 0, Node(7, 1, Node(-1, 2, Node(2, 3)))) p_sum = add_polynomials(p1, p2) while p_sum: print(p_sum.coeff, "x^", p_sum.exp, " + " if p_sum.next else "", end="") p_sum = p_sum.next # 输出:8 x^ 0 + 8 x^ 1 + 1 x^ 2 + 5 x^ 3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值