多项式的加法与乘法运算

本文探讨了如何使用链表实现多项式的加法和乘法运算,强调了链表操作在这一问题中的重要性,并指出这类问题对于理解和掌握链表操作的深度学习价值。文章还提到了输出格式的处理技巧,特别是在处理连续数字输出时如何避免不必要的空格。
摘要由CSDN通过智能技术生成

 多项式的运算是链表使用的典型例子,涵盖了很多链表的操作,值得深度学习与思考。

多项式节点结构体定义为:

包含了系数,指数,以及指向下一节点的指针


struct PolyNode{
    int coef;
    int expon;
    struct PolyNode *link;
};
typedef struct PolyNode *Polynomial;
Polynomial P1, P2;

 加法和乘法的操作暂不解释:

 

本题的输出函数给了我一些解题的启发,通常我们刷算法题的时候经常会遇到这样的要求,最后一位数后面没有空格:

在这里我们使用一个flag来标记第一个元素,如果是第一个元素,那么仅仅将flag内容变为1,在以后的操作(即不是第一个元素)我们直接输出空格。

void PrintPoly(Polynomial P)
{
    int flag = 0;
    Polynomial t;
    t = P;
    while(t)
    {
        if(!flag)
            flag = 1;
        else
            printf(" ");
        printf("%d %d", t->coef, t->expon);
        t = t->link;
    }
    printf("\n");
}
#include <stdio.h&g
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用C++写的实现了基本的功能 #include<iostream> #include"PolyList.h" using namespace std; Polynomial::Polynomial() { coefs = NULL; exps = NULL; size = 0; cout<<"构造完成"<<endl; } Polynomial::~Polynomial() { delete []coefs; delete []exps; coefx = NULL; expx= NULL; cout<<"析构调用"<<endl; } Polynomial::Polynomial(double coef[],int exp[],int s) { coefs = new double[s]; exps = new int[s]; size = s; for(int i = 0; i<size; i++) coefs[i] = coef[i]; for(i = 0;i<size;i++) exps[i] = exp[i]; cout<<"complete!"<<endl; } Polynomial::Polynomial(const Polynomial &p) { coefs = new double[p.size]; exps = new int[p.size]; size = p.size; for(int i = 0;i < size; i++) coefs[i]= p.coefs; for(i = 0; i < size; i++) exps[i] = p.exps[i]; cout<<"copy调用"<<endl; } const Polynomial& Polynomial::operator=(const Polynomial &p)//完成测试 { if(this!=&p) { delete []coefs; delete []exps; size = p.size; coefs = new double[size]; exps = new int[size]; for(int i = 0;i < size;i++) coefs[i] = p.coefs[i]; for(int i = 0; i<size;i++) exps[i]=p.exps[i]; } return *this; }//完成测试 int Polynomial::degree() const //完成测试 { return size - 1; } double Polynomial::evaluate(double x) const//完成测试 { double sum=coefs[0]; for(int i = 1;i < size;i ++) { for(int j = 1;j <= i;j++) x*= x; sum+=coefs[i] * x; } return sum; } bool Polynomial::operator ==(const Polynomial &p) const { if (size != p.size) return false; return false; for(int i = 0; i < size; i++) if(coefs[i]!= p.coefs[i]) return false; return true; } bool Polynomial::operator !=(const Polynomial &p) const { return !(operator==(p)); } Polynomial Polynomial::operator +(const Polynomial &p) const { int maxsize = (size > p.size) ? size:p.size; int minsize = (size < p.size) ? size:p.size; Polynomial temp; temp.coefs = new double[maxsize]; temp.exps = new int [maxsize]; for(int i = 0;i < minsize;i ++) temp.coefs[i]=coefs[i] + p.coefs[i] for(;i < maxsize;i++) temp.coefs[i]=coefs[i]; for(int j = 0;j < maxsize;j++) temp.exps[j] = j; temp.size=maxsize; return temp; } Polynomial Polynomial::operator -(const Polynomial &p) const { int maxsize = (size > p.size) ? size:p.size; int minsize = (size < p.size) ? size:p.size; Polynomial temp; temp.coefs = new double[maxsize]; temp.exps = new int[maxsize]; for(int i = 0;i < minsize;i++) temp.coefs[i]=coefs[i] - p.coefs[i]; for(;i <maxsize;i++) temp.coefs[i]=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值