C++使用单链表实现一元多项式的加,乘操作

news2024/11/25 6:27:23

相邀再次喝酒
待 葡萄成熟透
但是命运入面 每个邂逅
一起走到了 某个路口
是敌与是友 各自也没有自由
位置变了 各有队友

首先,按照惯例,十分欢迎大家边听歌边观看本博客!!

最佳损友 - 陈奕迅 - 单曲 - 网易云音乐 (163.com)

一.具体题目

请用单链表实现一元多项式的加,乘操作。提示:一元多项式中的数据项含有两个数据分别是系数与指数,为了简单起见,系数与指数都为整数。
测试数据必须要含有下面的测试结果,

开始分析我们发现其实这道题和之前的多项式输出十分类似,好吧,几乎一模一样,这就好办了,直接将那道题的思路照搬

这是洛谷专题 中我的解释,但是啊很明显的是,这个解释不能有效帮助读者很快的掌握写代码的思路,没错,即使理解了,这个思路也十分令人难受,毫无逻辑可言,甚至只能进行记忆才能解答,所以,这里我打算使用一种新的思路方便读者理解并好好敲代码

二.Try a new way

新的思路

为了追求逻辑上的连贯,所以这里先一步一步创建

通过观察,一个多项式是由几个小小的单项式组成的,

三.代码展示以及样例测试

//使用单链表实现一元多项式的加,乘操作
#include <iostream>
using namespace std;

//定义一种x的几次方(单项式)的数据类型
typedef struct
{
	int coe;//系数 coefficient
	int index;//指数 index
}ElemType;

//建立单链表用来表示一个多项式
typedef struct LNode
{
	ElemType data; //结点的数据部分,每个data是一个单项式数据类型,是一个结构体噢~
	struct LNode *next;
}LinkList;

//初始化链表
void InitList(LinkList *&L)
{
	L=new LinkList;
	L->next=NULL;
}

//插入一个数据结点e到有序链表中
void InsertList(LinkList *&L,ElemType e)
{
	LinkList *r,*s;//r是循环用的结点指针,s是插入的新结点
	r=L;//每次循环开头指向头节点
	//寻找新插入结点的位置(注意这是循环步骤)
	while(r->next!=NULL&&e.index>r->next->data.index)//以指数的大小寻找位置-ps1
		r=r->next;            
	
	//判断下一个指数是否相等
	if(r->next!=NULL&&r->next->data.index==e.index)//若指数相同
		r->next->data.coe+=e.coe;//则系数相加
	else
	{
	s=new LinkList;
	s->data=e;//s->data.coe=e.coe;	s->data.index=e.index;//将e的值赋给s指针所指结点
	s->next = r->next;
	r->next = s;
	}
} 

//利用链表打印多项式---ps2
void DispList(LinkList *L)
{
	LinkList *p=L->next;
	while(p)
	{
		//特判系数为1,指数为0
		if(p->data.coe==1&&p->data.index==0)
			cout<<"1";
		//除了1和0其他都直接打,0忽略不打//普通系数打印
		if(p->data.coe!=0&&p->data.coe!=1)
			cout<<p->data.coe;
		//普通指数打印
		if(p->data.coe!=0)
		{
			if(p->data.index>1)
				cout<<"X^"<<p->data.index;
			else if(p->data.index<0)
				cout<<"X^("<<p->data.index<<")";
			else if(p->data.index==1)
				cout<<"X";
		}
		if(p->next!=NULL&&p->next->data.coe>0)//判断是否加+
			cout<<"+";
		p=p->next;   
	}
	cout<<endl;
}
//多项式加法
void AddList(LinkList *&L1,LinkList *L2)
{
	LinkList *b = L2->next;
	while(b != NULL)
	{
		InsertList(L1,b->data);//从L1表中取出每一个节点插入到L中
		b = b->next;
	}
}
//多项式乘法
void multiply(LinkList *L1,LinkList *L2,LinkList *&L3)
{
	LinkList *b,*a = L1->next;
	ElemType e;
	while(a != NULL)  //取L1表中的每一个节点
	{
		b = L2->next;  
		while(b != NULL)   //取L2表中的每一个节点
		{
			e.coe = a->data.coe * b->data.coe;    //系数相乘
			e.index = a->data.index + b->data.index;   //指数相加,得到节点相乘的值 
			InsertList(L3,e);  //再将该节点插入到L3中
			b = b->next;
		}
		a = a->next;
	}
	
}
int main()
{
	LinkList *L1;//初始化第一个多项式
	InitList(L1);
	LinkList *L2;//初始化第2个多项式
	InitList(L2);
	int a=0;ElemType F;//初始化一个单项式用于每次的接收
	while(a++<2){
	int i=0;
	do//
	{	
		cout<<"请输入第"<<a<<"个多项式的"<<i+1<<"项的系数:(按0视为该多项式结束项)";  cin>>F.coe;//先输入系数
		cout<<"请输入第"<<a<<"个多项式的"<<i+1<<"项的指数:";  cin>>F.index;//再输入指数
		i++; cout<<endl;
		if(F.coe!=0&&a==1)//coe为0直接忽略
			InsertList(L1,F);
		else if(F.coe!=0&&a==2)
			InsertList(L2,F);
	}while(F.coe!=0);
	}
	cout<<"第一个多项式F(X)=:     ";  DispList(L1);
	cout<<"第二个多项式G(X)=:     ";  DispList(L2);
	LinkList *L3;  InitList(L3);
	cout<<"多项式相乘为:     ";multiply(L1,L2,L3); DispList(L3);
	cout<<"多项式相加为:     ";AddList(L1,L2);DispList(L1);//其实也可以一个一个加
	return 0;
}

//浅浅的分析一下
//第一二个多项式需要不断输入各系数,而且由指数由小到大打印
//ps1:直到找到比自己大的停下,此时的位置即为自己的位置如果遇到相等也会停下
//ps2:打印的思路特判一下思路
//打印系数
//index=0,coe=1的情况,直接打印系数
//系数为1的情况,不打印1
//
//第三是加号的特判+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ABAP 第二代增强-采购申请子屏幕增强

文章目录 第二代增强-采购申请子屏幕增强需求实现过程创建项目运行效果客户屏幕的PBO全局变量获取数据更新数据运行效果查询底表修改数据 第二代增强-采购申请子屏幕增强 需求 实现过程 创建项目 运行效果 客户屏幕的PBO 全局变量 *&------------------------------------…

python_5

# 制作一个注册登录模块 # 注册&#xff1a;将用户填入的账户和密码保存到一个文件(users.bin) # 登陆&#xff1a;将用户填入账户密码和users.bin中保存的账户密码进行比对,如果账户和密码完全相同 那么登录成功&#xff0c;否则登录失败 import hashlib import json import o…

Petalinux的使用——定制Linux系统

文章目录 配置petalinux运行环境petalinux设计流程 配置petalinux运行环境 Petalinux的安装在文章Ubuntu镜像源的更改及其Petalinux的安装中已经介绍&#xff0c;下面介绍petalinux运行环境的配置过程。 进入到petalinux的安装路径下&#xff0c;使用下面的命令对petalinux的运…

第十三章 计算机网络

这里写目录标题 1.网络设备2.协议簇2.1电子邮件(传输层)2.2地址解析(网际层)2.3DHCP(动态主动配置协议)2.4URL(统一资源定位器)2.5IP地址和子网掩码 1.网络设备 物理层&#xff1a;中继器&#xff0c;集线器(多路中继器) 数据链路层&#xff1a;网桥&#xff0c;交换机(多端口…

【微磁学3D绘图工具探索】Excalibur

文章目录 概要调查报告技术名词解释主要特点 技术和算法实现他能够画出怎样酷炫的图 小结 概要 微磁学中的磁学结构同时包括二维和三维&#xff0c;想要绘制得好看&#xff0c;结果清晰&#xff0c;那么就需要一些自己写的绘图代码之外的额外渲染功能&#xff0c;尤其是对于三…

JS hook cookie

JS hook cookie cookie 的值是V&#xff0c;v是动态变化的 可以看到D中生成了cookie的值n 尝试使用RPC定位到cookie。 替换内容&#xff0c;下断点。 将写好的RPC代码直接插入 加入代码&#xff0c;file.virjar.com/sekiro_web_client.js?_123 这个地址是在前端创建客户端…

python使用mongo操作

目前有个需求&#xff0c;就是把所有sql转为mongo管道查询 知识点 在 MongoDB 中&#xff0c;allowDiskUse 选项应该作为聚合命令的一个选项&#xff0c;而不是聚合管道的一个阶段。allowDiskUse 选项用于允许聚合操作使用磁盘空间来临时存储数据&#xff08;当聚合操作的数据…

Amazon Bedrock的进化:更多选择与新特性,助力生成式AI应用更快落地

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

YoloV9改进策略:Block改进|改进HCF-Net的PPA模块|附结构图|(独家改进,全网首发)

摘要 HCF-Net是一种用于红外小物体检测的深度学习网络。它主要包括三个模块:并行化斑块感知注意力(PPA)模块、维度感知选择性整合(DASI)模块和多稀释通道细化器(MDCR)模块。 PPA模块采用多分支特征提取策略,用于捕捉不同尺度和层次的特征信息。DASI模块可实现自适应信…

安卓使用Fiddler抓包 2024

简介 最近试了一下安卓使用fiddler 抓包&#xff0c;发现https包基本都会丢失。原因是Anandroid 7版本针对ssl安全性做了加强&#xff0c;不认可用户的证书。我们要做的就是把fiddler导出的证书进过处理后放置到系统证书目录下面&#xff0c;这样才能抓包https请求。 这里使用…

323_C++_QT_QProcess执行cmd解压、压缩、删除tar.gz等等其他压缩包文件到指定目录,不需要外部库,QT自带API的就行

// decompressPath : 解压到此目录 // fileName : 解压的tar.gz文件名executeCommand(decompressPath , QString::fromStdString(fileName));// 开始解压 void executeCommand

k8s ReplicaSet

ReplicaSet 是替代 ReplicationController 的&#xff0c;ReplicaSet 的行为与 ReplicationController 完全相同&#xff0c; 但pod 选择器的表达能力更强。 ReplicaSet 和 ReplicationController 的区别&#xff1a; ReplicationController 的标签选择器只允许包含某个标签的…

【Leetcode 42】 接雨水-单调栈解法

基础思路&#xff1a; 维持栈单调递减&#xff0c;一旦出现元素大于栈顶元素&#xff0c;就可以计算雨水量&#xff0c;同时填坑&#xff08;弹出栈顶元素&#xff09; 需要注意&#xff1a; 单调栈通常保存的是下标&#xff0c;用于计算距离 public static int trap2(int[…

YOLO系列笔记(十二)——csv文件转成text文件

csv文件转成text文件 前言方法概述实现代码说明结果 结论 前言 在上一篇文章中&#xff0c;我们探讨了如何将CSV格式的数据集转换为XML格式。然而&#xff0c;某些神经网络进行数据处理时&#xff0c;可能需要将数据直接以纯文本格式&#xff08;TXT&#xff09;提供。这种需求…

流畅的python-学习笔记_设计模式+装饰器+闭包

策略模式 类继承abc.ABC即实现抽象类&#xff0c;方法可用abc.abstractmethod装饰&#xff0c;表明为抽象方法 装饰器基础 装饰器实际是语法糖&#xff0c;被装饰的函数实际是装饰器内部返回函数的引用 缺点&#xff1a;装饰器函数覆盖了被装饰函数的__name__和__doc__属性…

Chatbot 在教育中的应用

Chatbot 在教育中的应用 基本信息 ​ 这篇博客主要介绍几篇Chatbot在教育领域中应用的文章&#xff0c;根据文章的侧重点不同&#xff0c;分为介绍教育理论&#xff0c;与介绍系统设计两类。从问题定义、技术方法、教育学理论、实验设计、结论证据几个方面概括各篇文章。 博…

html实现网页插入音频

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要介绍html中 如何插入音乐和视频 视频插入 标签:<video></video> 兼容格式:mp4,因为别的浏览器都有不兼容的格式&#xff0c;唯一对mp4全都兼容。所以尽量使用mp4格式。 属性: 属性属性值…

基于PSO优化的PV光伏发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于PSO优化的PV光伏发电系统simulink建模与仿真。其中PSO采用matlab编程实现&#xff0c;通过simulink的函数嵌入模块&#xff0c;将matlab调用进simulink中。 2.系统仿真结…

【统计推断】-01 抽样原理之(六):三个示例

目录 一、说明二、处理有限的、大尺度的母体抽样三、非参数的估计四、连续母体抽样技巧--分箱 一、说明 对于抽样问题&#xff0c;前几期文章都是理论探讨。本篇给出若干示例&#xff0c;展现具体的情况下&#xff0c;面对数据&#xff0c;如何给出处理策略。 二、处理有限的…

4步快速配置Java和MySQL环境

每次入职一家新公司或者用一台其他的临时电脑或者新电脑时都要重新配置Java开发环境&#xff0c;很麻烦&#xff0c;因此我在这里记录一下快速配置环境的方式&#xff0c;四步搞定&#xff01;此处以win为操作系统进行讲解。 第一步&#xff1a;下载链接 下载链接&#xff1a…