两个多项式求和

2023-11-02

                               单链表的应用——两个多项式求和

提到多项式想必定会想到其系数和指数,定义数据结构
typedef struct Polynomial{
        float coe;  // 多项式系数
        int exp;    //多项式指数
        struct Polynomial *next;
}Polynomial,*Linklist;

之所以运用单链表实现该功能是因为会涉及数据的插入与删除等操作,单链表比顺序表灵活、方便。当在进行相加功能操作时,要比较当前指针所指结点的指数大小,如果不相等,就将较小的一个插入到pc所指结点后面,如果相等,就判断所指系数相加是否为零,如果为零就都删除,如果不为零就相加,将结果赋给要插入的结点系数。

void Add(Linklist &La,Linklist &Lb,Linklist &Lc){
     Linklist pa,pb,pc,p,q;
     pa=La->next;  
     pb=Lb->next;
     pc=Lc=La;    //pc和Lc指向La的头结点
     while(pa&&pb){
          if(pa->exp<pb->exp){
                pc->next=pa;
                pc=pa;
                pa=pa->next;
           }
           else if(pa->exp>pb->exp){
                     pc->next=pb;
                     pc=pb;
                     pb=pb->next;

           }
                else if(pa->exp==pb->exp){
                       if(pa->coe+pb->coe==0){
                          p=pa;
                          pa=pa->next;
                          q=pb;
                          pb=pb->next;
                          delete p,q;

                       }
                            else{
                               pa->coe=pa->coe+pb->coe;
                               q=pb;
                               pb=pb->next;
                               delete q;
                               pc->next=pa;
                               pc=pa;
                               pa=pa->next;
                            }
                }
       }
     pc->next=pa?pa:pb;
}
整体代码用C++实现,如下:
#include<iostream>
using namespace std;
typedef struct Polynomial{
        float coe;  // 多项式系数
        int exp;    //多项式指数
        struct Polynomial *next;
}Polynomial,*Linklist;
void Create(Linklist &L,int n){    //顺序创建并插入多项式的系数和指数
     L=new Polynomial;
     L->next=NULL;
     Linklist pre,p,s;
     for(int i=0;i<n;i++){
        s=new Polynomial;
        cin>>s->coe>>s->exp;
        pre=L;
        p=L->next;
        while(p&&(p->exp)<(s->exp)){
               pre=p;
               p=p->next;
      }
        s->next=p;
        pre->next=s;
     }
}
void Print(Linklist &L){
     Linklist p;
     p=L->next;
     while(p){
        if(p->next&&p->coe!=0){
             cout<<p->coe<<'x'<<'^'<<p->exp;
             if(p->next->coe<0){
                    cout<<p->next->coe<<'x'<<'^'<<p->next->exp;
                    p=p->next;
             }
               else
                   cout<<'+';
        }
             else if(p->next==0)
                cout<<p->coe<<'x'<<'^'<<p->exp;
        p=p->next;
     }

}
void Add(Linklist &La,Linklist &Lb,Linklist &Lc){
     Linklist pa,pb,pc,p,q;
     pa=La->next;
     pb=Lb->next;
     pc=Lc=La;
     while(pa&&pb){
          if(pa->exp<pb->exp){
                pc->next=pa;
                pc=pa;
                pa=pa->next;
           }
           else if(pa->exp>pb->exp){
                pc->next=pb;
                pc=pb;
                pb=pb->next;

           }
           else if(pa->exp==pb->exp){
                  if(pa->coe+pb->coe==0){
                      p=pa;
                      pa=pa->next;
                      q=pb;
                      pb=pb->next;
                      delete p,q;

                  }
                  else{
                        pa->coe=pa->coe+pb->coe;
                        q=pb;
                        pb=pb->next;
                        delete q;
                        pc->next=pa;
                        pc=pa;
                        pa=pa->next;
                  }
          }
     }
     pc->next=pa?pa:pb;
}
int main(){
    Linklist L1,L2,L3;
    int i;
    cout<<"请输入第一个多项式的项数:";
    cin>>i;
    cout<<"请输入第一个多项式的各项系数和指数(以空格隔开):";
    Create(L1,i);
    cout<<"请输入第二个多项式的项数:";
    cin>>i;
    cout<<"请输入第二个多项式的各项系数和指数(以空格隔开):";
    Create(L2,i);
    cout<<"相加结果为:";
    Add(L1,L2,L3);
    Print(L3);
    return 0;
}

加油,坚持!



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个多项式求和 的相关文章

  • linux下终止用户会话二法

    http www 2cto com os 201110 109331 html 或许你也遇到这种情况 在管理或者别的时候 需要将某些用户的会话强制关闭 一般大家可能熟知的方法是查找该用户会话的所有进程 然后kill掉 这种方法大部分情况下是

随机推荐

  • RocketMQ 安装

    镜像方式安装 首先再把上一接中提到的 RocketMQ 部署架构图看一下 从图中可以看出 RocketMQ的服务端分为两块 Name Server 和 Broker Name Server 是一个几乎无状态节点 可集群部署 在消息队列Roc
  • AI绘图原理:让机器也拥有绘画的灵魂

    前言 在人工智能技术的发展过程中 计算机视觉是其中最为重要的一个方向 而图像生成作为计算机视觉的一个分支 也逐渐成为人们关注的焦点之一 近年来 随着神经网络技术的发展 人工智能在图像生成领域的研究也取得了显著进展 本文将围绕AI绘图原理进行
  • elasticsearch 修改索引名称

    先创建一个新的索引 依据原有索引的属性 这样可以避免reindex的时候 丢失数据 PUT your new index name mappings properties your field name type text 使用 reind
  • 二叉树进阶--二叉搜索树

    目录 1 二叉搜索树 1 1 二叉搜索树概念 1 2 二叉搜索树操作 1 3 二叉搜索树的实现 1 4 二叉搜索树的应用 1 5 二叉搜索树的性能分析 2 二叉树进阶经典题 1 二叉搜索树 1 1 二叉搜索树概念 二叉搜索树又称二叉排序树
  • SpringCloud微服务架构

    什么是微服务 微服务架构的基础是将的那个应用程序开发为一组小型独立服务 这些独立服务在自己的进程中运行 独立开发和部署 SpringCloud Alibaba微服务 Spring Cloud Alibaba 是Spring Cloud的一个
  • 四大含金量高的算法证书考试

    证书考试推荐 一 PAT 计算机程序设计能力测试 二 CCF CSP认证 三 团体程序设计天梯赛 四 蓝桥杯大赛 一 PAT 计算机程序设计能力测试 官网 PAT 计算机程序设计能力测试 PAT为浙江大学出的一款程序设计的测试网站 分为乙级
  • 憨批的语义分割5——DeeplabV3+模型解析以及训练自己的DeeplabV3+模型(划分斑马线)

    憨批的语义分割5 DeeplabV3 模型解析以及训练自己的DeeplabV3 模型 划分斑马线 学习前言 模型部分 什么是DeeplabV3 模型 DeeplabV3 模型的代码实现 1 主干模型Xception 2 DeeplabV3
  • C++学习(二八七)获取Android手机各种路径

    data app 存放用户安装的APK的目录 安装时 把APK拷贝于此 data data 应用安装完成后 在 data data目录下自动生成和APK包名 packagename 一样的文件夹 用于存放应用程序的数据 data dalvi
  • yolov5训练自己的数据(详细)

    已经说过了yolov3的编译 训练的流程了 那今天就来说说yolov5的训练过程了 1 环境准备 centos 7 9 2009 python 3 7 0 cuda 10 2 89 cudnn 7 6 5 torch 1 6 0 torch
  • 修改缓存服务器文件,演练:更改服务器上的工作簿中的缓存数据

    演练 更改服务器上的工作簿中的缓存数据 02 24 2013 本文内容 此演练演示如何通过使用 ServerDocument 类在不启动 Excel 的情况下修改 Microsoft Office Excel 工作簿中缓存的数据集 适用于
  • Tcp/Ip四层模型---应用层、传输层、网络层和链路层以及他们的各自的主要工作

    Tcp Ip四层模型 TCP IP 协议栈是一系列网络协议的总和 是构成网络通信的核心骨架 它定义了电子设备如何连入因特网 以及数据如何在它们之间进行传输 TCP IP 协议采用4层结构 分别是应用层 传输层 网络层和链路层 每一层都呼叫它
  • The value of the local variable total is not used报错解决

    变量未输出 加上System out print 变量
  • 比找女朋友还难的技术点,Python 面向对象

    有人整个 Python 学习生涯都没有搞明白的技术之一 面向对象 先放美图调整下心情 欢迎关注 点赞 评论 Python 面向对象的编程 Python 准确地说也是一门面向对象编程的语言 简称 OOP 咱已经知道在 Python 中所有的数
  • Node.js简介,记录Node.js入门基础概念

    有必要整理一下Node js基础知识啦 Node js是什么 Node js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 Node js 使用了一个事件驱动 非阻塞式 I O 的模型 使其轻量又高效 Node j
  • 算法的三种练习

    除了具体写代码 做这些练习 1 循环不变式 用循环不变式去解释算法 2 递归 动归的 递推式 3 搜索问题的隐式图构造 隐式树还是图 一个前驱 多个前驱 点是什么 边是什么 怎么扩展
  • 【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解

    1 Zookeeper工作原理 1 1 Zookeeper的角色 领导者 leader 负责进行投票的发起和决议 更新系统状态 学习者 learner 包括跟随者 follower 和观察者 observer follower用于接受客户端
  • Vue3 + Element Plus 实现动态标签页及右键菜单

    文章目录 1 前言 1 1 目的 1 2 普通右键菜单 1 3 本文右键菜单方式 2 生成动态标签页 2 1 准备变量容器 2 2 构造标签页 2 3 动态添加标签页 2 4 动态移除标签页 3 生成右键菜单 3 1 扩展标签页 3 2 增
  • subprocess执行命令行获取返回

    subprocess subprocess 模块允许我们启动一个新进程 并连接到它们的输入 输出 错误管道 从而获取返回值 Popen 是 subprocess的核心 子进程的创建和管理都靠它处理 import subprocess p s
  • 编写教师和学生信息的程序

    编写教师和学生信息的程序 1 定义一个抽象类Person 在Person类中声明两个属性 name和age 并设置其对应的getter方法 用于获取人的姓名和年龄 在Person类中声明一个有参构造方法 用于对Person类中的属性进行初始
  • 两个多项式求和

    单链表的应用 两个多项式求和 提到多项式想必定会想到其系数和指数 定义数据结构 typedef struct Polynomial float coe 多项式系数 int exp 多项式指数 struct Polynomial next P