单链表来实现多项式的加法和乘法运算

利用单链表创建多项式,并实现多项式的加减乘法运算,以及对多项式根据指数进行递增排序 利用单链表创建多项式,创建的多项式的每一项的第一个元素表示对应项的系数,第二个元素表示对应项的指数,实现多项式的加减乘法运算,以及对多项式根据指数进行递增排序 立即下载
/************************************************************************
*
* 文件名:2.2.6.cpp
*
* 文件描述:实现多项式的加法及乘法运算
*
* 创建人:  fdk

* 时  间:  2018-08-01
*
* 版本号:1.0
*
* 修改记录:链表的使用还不够熟练,不能自己独立完成需要多加练习
*
************************************************************************/
#include <iostream>
#include <cstdlib>
using namespace std;

/*定义结构体*/
typedef struct PolyNode
{
    int coef;   //系数
    int expon; //指数
    struct PolyNode *link; //指向下一个结点的指针
}*Polynomial;

/*比较函数*/
int Compare(int e1, int e2);

/*添加结点函数*/
void Attach(int coef, int expon, Polynomial *PtrRear);

/*多项式求和函数*/
Polynomial PolyAdd(Polynomial p1, Polynomial p2);

/*多项式求乘积函数*/
Polynomial PolyMul(Polynomial p1, Polynomial p2);

/*新建一个多项式链表,参考多项式和的函数,每个元素的值由键盘输入*/
Polynomial MakeNew(int n);
int main()
{
    int m;
    int n;
    Polynomial M;//第一个多项式
    Polynomial N;//第二个多项式
    Polynomial Q;//第一个多项式加第二个多项式之和
    Polynomial T;//第一个多项式和第二个多项式之积

    cout << "请输入第一个多项式的项数!" << endl;
    cin >> m;
    M = MakeNew(m);

    cout << "请输入第二个多项式的项数!" << endl;
    cin >> n;
    N = MakeNew(n);

    Q = PolyAdd(M, N);
    cout << "相加后的结果为:" << endl;
    while (Q)
    {
        cout << Q->coef << " " << Q->expon << " ";
        Q = Q->link;
    }
    cout << endl;

    T = PolyMul(M, N);
    while (T)
    {
        cout << T->coef << " " << T->expon << " ";
        T = T->link;
    }
    return 0;
}

/*比较函数*/
int Compare(int e1, int e2)
{
    if (e1 > e2)
    {
        return 1;
    }
    if (e1 < e2)
    {
        return -1;
    }
    if (e1 == e2)
    {
        return 0;
    }
}

/*添加结点函数*/
void Attach(int coef, int expon, Polynomial *PtrRear)
{
    /*由于在本函数中需要改变当前结果表达式尾项指针的值*/
    /*所以函数传递进来的是结点指针的地址,*PtrRear指向尾项,是个二级指针*/
    Polynomial p;
    p = (Polynomial)malloc(sizeof(PolyNode)); //申请新结点
    p->coef = coef;
    p->expon = expon;

    /*将p指向的新结点插入到当前结果表达式尾项的后面*/
    (*PtrRear)->link = p;
    *PtrRear = p;      //链表尾指针指向新结点
}

/*多项式求和函数*/
Polynomial PolyAdd(Polynomial p1, Polynomial p2)
{
    /*fronts链表头指针,rear链表尾指针,temp用于释放头结点*/
    Polynomial fronts;
    Polynomial rear;
    Polynomial temp;
    int sum;

    /*为方便表头插入,先产生一个临时空结点作为结果多项式链表头*/
    rear = (Polynomial)malloc(sizeof(PolyNode));
    fronts = rear;  //由fronts记录结果多项式链表头结点

    /*当两个多项式都有非零项待处理时*/
    while (p1 && p2)
    {
        switch (Compare(p1->expon, p2->expon))
        {
        /*比较p1和p2指数的大小将指数大的那一项添加到多项式中去*/
        case 1:
            Attach(p1->coef, p1->expon, &rear);
            p1 = p1->link;
            break;
        case -1:
            Attach(p2->coef, p2->expon, &rear);
            p2 = p2->link;
            break;
        case 0:
            sum = p1->coef + p2->coef;
            /*如果系数和不为0,将相加后的系数作为参数添加到多项式中*/
            if (sum)
            {
                Attach(sum, p1->expon, &rear);
            }
            p1 = p1->link;
            p2 = p2->link;
            break;
        }
    }
    /*当p1和p2中有一个结束后,将另一个的剩余一次接入到后面*/
    while (p1)
    {
        Attach(p1->coef, p1->expon, &rear);
        p1 = p1->link;
    }
    while (p2)
    {
        Attach(p2->coef, p2->expon, &rear);
        p2 = p2->link;
    }
    rear->link = NULL;   //多项式的尾指针指向为空

    /*利用临时变量temp将头结点删除,使fronts指针指向第一个元素*/
    temp = fronts;
    fronts = fronts->link;
    free(temp);
    return fronts;
}

/*新建一个多项式链表,参考多项式和的函数,每个元素的值由键盘输入*/
Polynomial MakeNew(int n)
{
    Polynomial fronts,rear,temp;
    int k,c[10],e[10];
    fronts=(Polynomial)malloc(sizeof(struct PolyNode));
    rear=fronts;
    cout << "先输入系数后输入指数!" << endl;
    for(k=0; k<n; k++)
    {
        cin>>c[k];
        cin>>e[k];
        Attach(c[k],e[k],&rear);
    }
    rear->link=NULL;
    temp=fronts;
    fronts=fronts->link;
    free(temp);
    return fronts;
}

/*多项式求乘积函数*/
Polynomial PolyMul(Polynomial p1, Polynomial p2)
{
    /*创建一个链表P用于表示当前运算的中间状态*/

    Polynomial pResult = NULL;
    Polynomial CopyP2 = p2;

    /*创建一个新的多项式TmpP*/
    Polynomial TmpP;

    /*让p1中的每一项和p2中的每一项相乘然后将获得到的多项式依次相加得到最后的结果*/
    while (p1)
    {
        while (p2)
        {
            /*定义一个临时变量TmpP用来计算*/
            TmpP = (Polynomial)malloc(sizeof(PolyNode));
            TmpP->link = NULL;
            TmpP->coef = (p1->coef)*(p2->coef);     /*系数相乘指数相加*/
            TmpP->expon = (p1->expon)+(p2->expon);
            pResult = PolyAdd(pResult, TmpP);
            p2 = p2->link;
        }
        /*将p2的指针重置,并将p1的指针移动到下一个位置*/
        p2 = CopyP2;
        p1 = p1->link;
    }
    return pResult;
}

 

多项式的加法,减法和乘法运算 用数据结构链表的知识实现多项式的加法,减法,乘法运算。包括相关源代码和设计报告。 立即下载

相关推荐

数据结构课件,课后答案,单链表,多项式加法,二叉树,湖大小判断等代码

数据结构课件,课后答案,单链表,多项式加法,二叉树,湖大小判断等代码

单链表加法总结(C++,leecode,整形int)

本文主要总结链表加法代码,全文分为两部分,为思路讲解和代码实现。 1.1思路讲解 链表的加法主要根据小学数学10进制进位方法来解。两个链表数据相加,主要是每个节点对应的数据相加,当有进位标志时,则在下一个节点把这个进位标志加上,即sum=val1+val2+carry。 两个链表相加,和的链表长度有两种情况,第一种是等于两个加数链表的最长一个,另一种是比两个加数链表中最常的一个链表长度大一,...

净无邪博客 1351

免费,Python蓝桥杯等级考试真题--第10级(含答案解析和代码)

Python中蓝桥杯算是含金量和难度最大的比赛之一,网上可以找到不少真题,不过要么零零散散要么付费才能解锁,而且大都是没答案和解析的,给学习者造成很大困扰。因此本文档打算整理历年等级考试、STEMA、省赛、国赛真题卷和解析,供大家学习参考。

1576

java---单链表加法

题目: 有两个用链表表示的数,每个节点包含一个数位。 这些树为是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。 给定两个链表ListNode A,ListNode B,请返回A+B的结果 思路: 用递归来实现, 递归的出口:A,B结点都为空,且进位数值也为0 注意递归传递参数的设计,先判断是否为null,是则传递null,否则传递链表的next 代码: package LianBiao; public class 链表加法 { //构建节点 p

qq_43430343的博客 367

ansys workbench 静力结构分析 高阶教程

ansys workbench 静力结构分析 高阶教程 目录ansys workbench 静力结构分析 高阶教程新建工程模型导入设置材料模型简化: 主要内容: 材料设置、模型简化、网格细化、约束分析、接触设置、求解设置、报错处理、结果分析 基础教程: ansys workbench 静力结构分析 基础操作流程(入门) ansys版本: 19.0(16.0及以上均可) 参考资料: 推荐教学视频《有限元分析 张晔》(超详细 ???? )、ansys workbench 超级学习手册(查阅用) 说明:一些基

weixin_43434624的博客 5万+

spark 适配达梦数据库

spark 适配达梦数据库 版本 spark3.0.0 scala2.12.10 DM Database Server 64 V8 步骤一: 引驱动包: SBT方式: "com.dameng" % "Dm8JdbcDriver18" % "8.1.0.157", maven方式: <dependency> <groupId>com.dameng</groupId> <artifactId>Dm8JdbcDriver18</artifac

_@Eva@_的博客 2089

C语言单链表实现多项式的加法、减法、乘法

C语言采用单链表存储结构实现多项式的加法、减法、乘法的代码实现 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct polynomial{ float coef; int expn; struct polynomial *next; }polynomial; // 创建多项式,m为多项式的...

Ian_Yan的博客 6138

手把手教你用Zemax优化MTF:从‘离焦平衡球差’到高频像差控制的实战技巧

本文详细介绍了如何使用Zemax优化MTF性能,从基础设置到高级技巧的全流程。通过具体案例,讲解了如何利用离焦平衡球差提升中频MTF,以及识别和控制高频像差的方法,帮助光学设计工程师和学生有效提升成像质量。

weixin_30752699的博客 748

链表实现多项式的加法和乘法

使用链表实现多项式的加法和乘法运算,具体见代码,简单的测试了一下,基本能用://链表实现多项式加法和乘法#include #define LIST_OK 0#define LIST_ERROR -1typedef struct polynomiallist{ int factor;//系数 int power;//幂 struct p

lanseshenhua的专栏 1万+

生存网络与mlr3proba

通过结合生存网络和mlr3proba,可以使用生存网络模型来预测个体在给定时间点发生事件的概率,并使用mlr3proba提供的工具进行模型的训练、评估和选择最佳模型。iii)基本的机器学习(ML)方法,如重新排序和调整。在本文中,我们将只讨论前五种,因为它们在文献中得到了更好的建立,并且它们具有相同的接口,这简化了调优,我们将在下面看到。我们不会为模型指定自定义架构,而是使用默认架构,如果你熟悉PyTorch,那么你可以选择创建自己的架构,如果你愿意的话,通过将其传递给模型中的custom_net参数。

weixin_46587777的博客 1363

【Matlab】多旋翼无人机视觉伺服跟踪控制程序

本文介绍了基于Matlab的多旋翼无人机视觉伺服跟踪控制程序开发方法。该系统采用视觉感知、坐标转换、伺服控制和仿真验证四个核心模块,通过HOG+SVM目标检测、Shi-Tomasi特征提取和PID双闭环控制算法实现动态目标跟踪。详细阐述了相机标定、目标检测、坐标转换及伺服控制等关键环节的Matlab实现代码,并进行了仿真验证。结果表明该系统在±0.1m的跟踪精度下可实现100Hz的实时处理,适用于室内外复杂场景。文章还提出了工程应用中的优化建议,为无人机视觉伺服系统的开发提供了完整的技术方案。

unber的博客 505

【数据结构】用链表实现多项式运算

一元多项式的运算包括加法减法和乘法,而多项式的加法和乘法都可以依靠多项式的加法来实现,所以本文仅仅讲解如何用链表实现一元多项式的加法。 数学上的一元多项式的表示是p(x) = p0 + p1 * x + p2 * x^2 + p3 * x^3 + … + pn * x^n; 用链表来表示就是p = (p0, p1, p2, … , pn); 所谓的多项式相加就是同类项的合并,也就是两条链表的

_Previous的博客 2万+

巡检机器人的基于ROS系统的任务管理架构设计总结

本文探讨了基于ROS(机器人操作系统)的工业巡检机器人任务管理架构设计,提出分层闭环方案。架构围绕稳、准、活、扩四大目标,分为感知层(多源数据融合)、调度层(智能决策)、执行层(动作控制)和数据层(存储交互)。关键技术包括ROS2实时性优化、功能包复用和多机器人协同调度。实践案例显示,该架构在电力巡检中使任务完成率达99%,在化工园区实现95%覆盖率。当前挑战包括SLAM地图漂移和多机通信延迟,未来可通过语义SLAM和区域通信优化。

start_up_go的博客 464

使用单链表实现多项式的加法和乘法运算(java版)

开始前说些走流程的废话,由于是第一次发博客,表达和讲解方法都不是那么成熟,如果有什么地方有待改正,欢迎并感谢亲们在评论区留言(让我感受一下捏你们对萌新的善意,谢谢谢谢) 那么正式开始

qq_43646876的博客 3969

IEC 61850标准协议解读 3.MMS服务

摘要:本文系统介绍了MMS(制造报文规范)的基础知识及其在IEC61850中的应用。首先解析MMS的核心定义、通信流程(带确认/不带确认服务)、虚拟制造设备(VMD)概念及核心对象(域/有名变量等)。重点阐述IEC61850与MMS的映射关系,包括对象分层映射、服务转换规则及数据类型对应。深入分析ASN.1编解码机制,说明MMS PDU的分层结构与解码流程。最后通过典型报文案例(报告服务、控制服务、文件传输等)和通信初始化流程,展示MMS在智能变电站中的实际应用。全文揭示了MMS作为抽象应用层协议如何通过标

张二狗的博客 724

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java单链表实现一元多项式加法和乘法运算

设有一个一元多项式  f(x)=∑aixi  ,我们要用一个单链表将它表示出来,并实现它的加和乘运算。多项式的每一项放在一个结点中,每个结点中放两个信息,即每一项的系数和幂。在这里我们用有头结点的链表来表示,那么对于某个多项式 p=2x2+100x3+45x5+3x20  ,它的单链表表示如下:         尽可能地简单,结点PolyNode类如下:   package poly;

1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java 多项式加法_java单链表实现一元多项式加法和乘法运算

设有一个一元多项式 f(x)=∑aixi ,我们要用一个单链表将它表示出来,并实现它的加和乘运算。多项式的每一项放在一个结点中,每个结点中放两个信息,即每一项的系数和幂。在这里我们用有头结点的链表来表示,那么对于某个多项式 p=2x2+100x3+45x5+3x20,它的单链表表示如下:尽可能地简单,结点PolyNode类如下:packagepoly;publicclassPolyNod...

weixin_33488923的博客 738

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java 单链表一元多项式_java单链表实现一元多项式加法和乘法运算

设有一个一元多项式 f(x)=∑aixi ,我们要用一个单链表将它表示出来,并实现它的加和乘运算。多项式的每一项放在一个结点中,每个结点中放两个信息,即每一项的系数和幂。在这里我们用有头结点的链表来表示,那么对于某个多项式 p=2x2+100x3+45x5+3x20,它的单链表表示如下: 尽可能地简单,结点PolyNode类如下:package poly;public class PolyNo...

weixin_32323283的博客 936

利用单链表实现多项式的加法和乘法运算

  #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct CoeExpStruct { float coe; //多项式系数 int exp; //多项式指数 }CoeExp; typedef struct Polynomial { CoeExp ce;//链表数据域 struct...

Mei20140912的专栏 1053

C# 实现多项式加法乘法

最近重看数据结构,看到用C语言实现的多项式的加法乘法,想着用C#实现一下。这里用的自定义的单链表。 默认输入的形式指数递减… using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Practise {...

qq_43254756的博客 1731

链表实现的多项式加法与乘法

[img]http://dl.iteye.com/upload/attachment/0071/5270/876b7cae-834d-3ee4-95a2-f2839876961d.gif[/img] [code="java"] public class Node { private int a; private int i; Node ...

心中的利剑:HTML5 Canvas游戏动画(JavaScript) 213

多项式(Polynomial)的运算——利用单链表

多项式(Polynomial)的运算——利用单链表 1. 多项式的概念 1.1 多项式的定义 有限的单项式之和称为多项式,其中每个单项式叫做多项式的项,不含字母的项叫做常数项。 多项式里,次数最高的项的次数叫做这个多项式的次数。 多项式按某个字母降或升幂排序。 单项式与多项式统称为整式。 1.2 多项式的表示 通常在数学中对一元n次多项式可表示成如下的形式,设多项式的最高可能阶数为maxDegree,当前的最

Catherine的笔记 9869

单链表实现一元多项式加法与乘法

程序运行效果: 多项式加法实现原理: (1)如果cpa的指数<cpb的指数,则将cpa所指向的插入和多项式链中,向后移动指针; (2)如果cpa的指数>cpb的指数,则将cpb所指向的插入和多项式链中,向后移动指针; (3)如果cpa的指数=cpb的指数,则若cpa的指数+cpb的指数=0,则删除相应结点,向后移动指针,并释放内存空间; (4)否则cpa的指数+cpb的指数!=0,则...

阿蓬的个人博客 1771

数据结构习题—一元多项式的乘法与加法运算(链表)

设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。 输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 输出样例: 15 24 -25 22 30

qq_45896098的博客 606

数据结构MOOC 02-线性结构2 一元多项式的乘法与加法运算

02-线性结构2 一元多项式的乘法与加法运算 题目要求 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。 输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 输出样例

m0_46492118的博客 577

数据结构 C++实现一元多项式运算(链式存储)

文章目录一、实验目的二、实验内容三、代码内容1、多项式创建2、输出函数3、多项式加减法4、冒泡排序5、多项式乘法四、运行结果五、总结 一、实验目的 1、 了解线性表的特性,以及它在实际问题中的应用。 2、掌握线性表的链式存储的实现方法以及它的基本操作,学会运用单链表来解决问题。 二、实验内容 题目:用带头节点的单链表存储一元多项式的每一项,实现求一元多项式的加法、减法和乘法。具体要求为:用五个函数分别实现一元多项式的创建、输出、加法、减法和乘法;然后在主函数中调用这些函数实现这些功能的展示,以菜单的形式呈现

qq_54388490的博客 1万+
上一篇: 队列的链式存储实现(简单的入队和出队操作)
下一篇: 7-1 最大子列和问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值