2021/2/26 单链表应用------一元多项式

2023-10-31

单链表应用------一元多项式

【学习时间】2021/2/26
【题目名称】单链表应用------一元多项式

【问题描述】编写一个程序用单链表存储多项式,并实现两个一元多项式A与B相加的函数。A,B刚开始是升序的,A与B之和按降序排列。例如:

   多项式A:  1.2X^0  2.5X^1  3.2X^3  -2.5X^5

   多项式B:  -1.2X^0  2.5X^1  3.2X^3   2.5X^5   5.4X^10

   多项式A与B之和:5.4X^10  6.4X^3  5X^1

【输入形式】任意两个多项式A和B
【输出形式】多项式中某一项的系数与指数,系数保留一位小数。
【样例输入】
1.2 0 2.5 1 3.2 3 -2.5 5
-1.2 0 2.5 1 3.2 3 2.5 5 5.4 10
2
【样例输出】6.4 3
【样例说明】
第一个多项式的系数与指数对,以空格隔开
第二个多项式的系数与指数对,以空格隔开
输出第2项的系数与指数,系数与指数间用空格隔开,系数保留一位小数
【评分标准】必须用链表实现。

【思路分析】
###Step1.初始化
首先设置结构体Node,内含系数(coef)和指数(exp)以及结构体指针(next),采用头插法建立两个单链表A,B,目的是为下一步降序输出结果提供便利。

###Step 2. 链表相加
为了便于操作我们将结果存储到A链表中,同时为了方便后续的插入删除操作,我们对A设置pre指针指向当前节点的前驱。因此我们可以考虑以下三种情况:
(1)当A中节点的exp>B中节点的exp时,则A后移一位(包括pre)
(2)当A中节点的exp<B中节点的exp时,则B的当前节点插入到A中,位置是pre前面。
(3)当A中节点的exp=B中节点的exp时,那么进行系数相加,并把结果赋值个A中节点的coef,注意,在此处需要判断系数和是否为0,如果等于0,则需要把A中的该节点删除;无论是否等于0,B都需要后移一位。

###Step 3. 结果输出
遍历单链表的同时计数,当计数器为n时,打印该节点。

【源代码】

#include<iostream>
#include<algorithm>
#include <cstdio>
using namespace std;
struct Node
{
	float coef;
	int exp;
	Node *next;
};
Node *Creat()//头插法 
{
	int coef,exp,i=0;
	Node *first=new Node;
	Node *last=new Node;
	Node *r=NULL,*s=NULL;
	Node *temp;
	first->next=NULL;
	char c;
	do{
		
		s=new Node;
		scanf("%f%d",&s->coef,&s->exp);
		if(i==0)
		{
			temp=s;
			i=1;
		}
		s->next=first->next;
		first->next=s;
		c=getchar();//接收空格的作用 
	}while(c!=EOF&&c!='\n');//判断数据是否传输结束 
	temp->next=last;
	return first;
}
Node *Add(Node *a,Node *b)
{
	Node *pa=a->next;
	Node *pb=b->next;
	Node *pre=a;
	while(pa!=NULL&&pb!=NULL)
	{
		if((pa->exp)>(pb->exp))//当a的指数大于b的指数 ,pa向前移动一个 
		{
			pre=pa;
			pa=pa->next;
		}
		else if((pa->exp)<(pb->exp))//当a的指数小于于b的指数 , 将pb插入到a中 
		{
			Node *q=pb;
			pb=pb->next;
			pre->next=q;
			q->next=pa;
			pre=q;
		}
		else{//指数相同,求和计算 
			pa->coef+=pb->coef;
			if(pa->coef==0)//系数为0,从a中删除该节点 
			{
				pre->next=pa->next;
				pa->next=NULL;
				pa=pre->next;
			}
			pb=pb->next;//无论系数是否为零pb都需要向下一位移动 
		}
	}
	return a;
} 
void show(Node *first,int num)
{
	int i=1;
	Node *p=first->next;
	while(p!=NULL)
	{
		if(i==num)
		printf("%.1f %d",p->coef,p->exp);
		p=p->next;
		i++;
	}
}
int main()
{
	int num;
	Node *A_first=Creat();
	Node *B_first=Creat();
	cin>>num;
	Node *C_first=Add(A_first,B_first);
	show(C_first,num);
	return 0;
}

【结果分析】
上面的代码存在局限性,当出现这种输入时,正确结果应该如下;
结果局限性
但是,程序显示结果是:
在这里插入图片描述
求大佬解答!!!!!

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

2021/2/26 单链表应用------一元多项式 的相关文章

  • windows电脑生成ios证书的方法

    在uniapp开发进行云打包的时候 打包Ios应用需要p12格式的私钥证书和证书profile文件 无论使用windows电脑 还是mac电脑 生成ios证书 需要苹果开发者账号 假如你还没有苹果开发者账号 你可以参考下文先到苹果开发者中心
  • 业界首个高性能交互式自动标注工具——EISeg正式开源!

    点击左上方蓝字关注我们 在人工智能行业有这么一句话 深度学习有多智能 背后就有多少人工 这句话直接说出了深度学习从业者心中的痛处 毕竟模型的好坏数据占着很大的因素 但是数据的标注成本却让很多从业者感到头疼 在标注中 矩形框标注还相对简单 但

随机推荐

  • 进程管理中的数据结构

    一方面 为了便于对计算机的各类资源 包括硬件和信息 的使用和管理 OS将它们抽象为相应的各种数据结构 以及提供一组对资源进行操作的命令 用户利用这些数据结构和操作命令来执行相关的操作 无需关系具体实现细节 另一方面 操作系统作为计算机资源的
  • 小米MIX 解BL锁教程 申请BootLoader解锁教程

    小米MIX 线刷兼救砖 解账户锁 纯净刷机包 教程 一 准备工作 1 注册小米账号 点击注册 已有小米账号请忽视 2 在手机中登陆 小米账号 3 下载并解压 小米解锁工具 或 点击这里下载安装 二 开始解锁 1 打开 小米解锁官网 http
  • 船只检测——文献阅读第一期,目标检测+哨兵Sentinel数据

    Read with me 因为毕设做船只检测 应该就是用哨兵二号数据提取船只 所以阅读了很多这种文献 想做一个新的企划 叫做和我一起读文献 read with me 分享最近读的所有文献 0代码 纯心得 下面是画的思维导图 已经筛除了部分灌
  • 你好 很高兴学习java_Hello.Java//Tom and Jerry

    class A void f System out println I am A class B public class Hello public static void main String arg System out printl
  • Windows7下WebRTC环境搭建与编译

    之前对WebRTC编程的时候网上找了很多的资料 经过不断的碰壁和实验总结 最终有了以下快捷的WebRTC环境搭建与编译方法 1 首先安装VisualStudio 2008 打上ServicePack1补丁包 也可以安装VisualStudi
  • android.content.res.Resources$NotFoundException: String resource ID #0x1解决方案

    问题描述 Android Studio爆红 android content res Resources NotFoundException String resource ID 0x1 原因分析 这是由于DataBinding进行双向绑定时
  • [C++]命令模式

    命令模式 将一个请求封装为一个对象 从而使你可用不同的请求对客户进行参数化 对请求排队或记录请求日志 以及支持可撤销的操作 github源码路径 https github com dangwei 90 Design Mode 此文件包含 m
  • Linux清除原有ssh密钥方法

    Linux清除原有ssh密钥方法 1 问题现象 以前在mac的终端下面使用ssh user localhost输入密码就可以连接到远程的SSH服务器 今天连接的时候老是提示如下错误 KENFORFORLIN kenforstar sudo
  • pyecharts 折线图画成平滑曲线

    is smooth gt bool 是否平滑曲线显示 默认为 False 伪代码 from pyecharts import Line def draw picture column data line Line line add is s
  • w10打开网络计算机退出,Win10网络发现已关闭怎么办?

    如果已启用网络发现 则这台计算机可以发现网络上的其他计算机和设备 而且其他网络计算机也可以发现这台计算机 最近就有使用win10系统的用户发现网络提示 网络发现已关闭 网络计算机和设备不可见 请启用网络和共享中心中的网络发现 这篇文章就是P
  • root密码忘记了怎么办?(centos7)

    因为自己要记的密码过多 有时候会突然想不起或者忘记密码 比如你重要的Linux密码 别担心 这就教你如何用紧急救援模式重设root密码 开启此虚拟机 进入centos7系统 稍等片刻进入下图页面 默认选中得是第一个选项 如果不是可以用方向键
  • .net出现提交数据错误,提示Nancy.RequestExecutionException错误

    问题描述 提交数据报错 开发环境VS2017 更改了实体类 增加了字段 在webservice中清理重新生成后仍报错 解决方法 需重新引用实体类CFinal Application Entity和映射CFinal Application M
  • 安装交叉编译工具:arm-himix200-linux

    准备工作 下载交叉编译工具 arm himix200 linux 百度网盘 链接 https pan baidu com s 1XuRLd3J6S68X k6Sq1DmwA 提取码 dzas ubuntu版本 vmare安装的ubuntu1
  • 运维之DNS域名解析服务基础概念与Bind9安装

    0x00 前言简述 基础概念 基础术语 记录类型 0x01 DNS服务介绍 原理流程 实验目标 0x02 DNS服务之Bind9 Ubuntu 安装 CentOS 安装 Docker 容器 1 源码编译安装 2 APT仓库安装 Bind9
  • 游戏介绍网站-网页设计期末结课作业

    一个游戏介绍网站 附资源链接 资源下载链接 介绍 是一个用来介绍个人游戏的主页 适用于移动和PC端 是本人一个前端期末结课作业 软件架构 html css javascript jquery vue 安装教程 无需安装 直接打开即可 使用说
  • 【笔记】Go语言学习笔记

    一 概述 什么是程序 程序 为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合 Go语言 是区块链最主流的编程语言 同时也是当前最具发展潜力的语言 Go语言是Google公司创造的语言 也是Google主推的语言 Googl
  • Mitmproxy 新版配置上游(二级)代理

    Mitmproxy 最新新版配置上游代理 由于在 4 0版本之后flow live change upstream proxy server proxy 方法已经弃用 会引发 AttributeError NoneType object h
  • UGUI之Image、RawImage使用说明

    UGUI之Image RawImage使用说明 Image说明 基本属性 图片切割 九宫格 图集 RawImage可以做什么 用途一 小地图 用途二 帧动画 动图 小常识 Image说明 Image是UGUI中最常见的控件 用于图片的显示
  • golang安装步骤

    1 首先找到资源下载地址 https studygolang com dl 2 下载完毕后 下图是下载好的文件 新建一个文件夹install path 当作安装目录 此处的install file 是下载的资源文件 install path
  • 2021/2/26 单链表应用------一元多项式

    单链表应用 一元多项式 学习时间 2021 2 26 题目名称 单链表应用 一元多项式 问题描述 编写一个程序用单链表存储多项式 并实现两个一元多项式A与B相加的函数 A B刚开始是升序的 A与B之和按降序排列 例如 多项式A 1 2X 0