用单链表表示【多项式加法】

数据结构:用链表表示多项式,并实现多项式的加法运算(C语言) 输入格式: 输入在第一行给出第一个多项式POLYA的系数和指数,并以0,0 结束第一个多项式的输入; 在第二行出第一个多项式POLYB的系数和指数,并以0,0 结束第一个多项式的输入。 输出格式: 对每一组输入,在一行中输出POLYA+POLYB和多项式的系数和指数。 输入样例: 5,0 2,1 1,6 8,15 0,0 -2,1 3,6 4,8 0,0 输出样例: 5,0 4,6 4,8 8,15 分析 首先要进行头文件的说明和结构体的定义 #include<stdi. 阅读详情
  • 测试用的多项式
p1 = 2x^2 + 3x + 1
p2 = -2x + 3
p1 + p2 可以得到:  2x^2 + x + 4
  • 节点定义
struct ployNode{
	int coef; // 系数
	int expon; // 指数
	struct ployNode *next;  // 指向下一个指针
};

typedef struct ployNode ploynomial;
  • 思路
主要是看指数的大小,进行对应项的合并。有下面三种情况: 
p1->expon == p2->expon : 将对应的系数相加(不为零的话),得到新节点存入pResult , p1,p2后移一个节点
p1->expon > p2->expon : p1 存入pResult,p1后移, p2不动
p1->expon < p2->expon : p2 存入pResult,p2后移, p1不动

当p1和p2其中一个全部遍历完成之后,将另一个直接连到新链表的最后即可

多项式相加的核心函数:ploynomial* ployAdd(ploynomial *p1, ploynomial *p2)
input:p1,p2【两个多项式指针】 。返回相加之后的多项式指针。

ploynomial* ployAdd(ploynomial *p1, ploynomial *p2) {
	ploynomial *front,*rear;
	front = (ploynomial*)malloc(sizeof(ploynomial));
	if(!front){
		printf("malloc error!!\n");
	}
	rear = front; // 存储结果链表当中首尾指针
	int sum;
	while(p1 && p2){
		switch(compare(p1->expon , p2->expon)){
			case 1:	
				// 大于的情况
				append(p1->coef,p1->expon,&rear);
				p1 = p1->next;
				break;
			case 0: 
				// 等于的情况
				sum = p1->coef + p2->coef;
				if(sum != 0) append(sum,p1->expon,&rear);
				p1 = p1->next;
				p2 = p2->next;
				break;
			case -1: 
				// 小于的情况
				append(p2->coef , p2->expon,&rear);
				p2 = p2->next;
				break;
		}
	}
	// 处理剩余项
	for( ; p1; p1 = p1->next) 
		append(p1->coef,p1->expon,&rear);
	for( ; p2; p2 = p2->next)
		append(p2->coef,p2->expon,&rear);

	rear->next = NULL;
	return front->next;
}

// 处理存入pResult的节点
void append(int coef,int expon, ploynomial **rear){
	ploynomial *p = (ploynomial*)malloc(sizeof(ploynomial));
	if(!p) printf("malloc error!! line71\n");
	p->coef = coef;
	p->expon = expon;
	p->next = NULL;
	// rear 是指针的地址
	// (*rear) 和 p是等价的
	(*rear)->next = p;
	*rear = p;
}
int compare(int a, int b){
	if(a == b) return 0;
	return a>b?1:-1;
}
int main(){
	ploynomial *p1 ;
	ploynomial item1 = {2,2,NULL};
	ploynomial item2 = {3,1,NULL};
	ploynomial item3 = {1,0,NULL};
	item1.next = &item2;
	item2.next = &item3;
	
	p1 = &item1;

	ploynomial *p2 ;
	ploynomial item4 = {-2,1,NULL};
	ploynomial item5 = {3,0,NULL};
	item4.next = &item5;
	p2 = &item4;

	ploynomial *result =  ployAdd(p1,p2);
	for(; result; result = result->next){
		printf("coef: %d, expon: %d\n",result->coef,result->expon);
	}

	return 0;
}

学习的是mooc上的浙江大学数据结构课程 链接

利用单链表实现一元多项式的表示及相加 第一个博客 阅读详情

相关推荐

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

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

【开卷数据结构 】多项式的链表表示

多项式的单向链表表示

Ceylan__的博客 2110

多项式的链表表示 c++实现

使用链表对多项式进行存储 并且重载了加减乘三种操作 支持将字符串直接装化为多项式

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

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

_Previous的博客 2万+

MatLab Desired port was :31515解决方案

前言:使用的MatLabR2022b今天突然出现了错误,在程序中打不开文件。后尝试了下面的方法,可以解决。后面还有另一种方法,上面方法如果行不通,大家可以尝试一下。搜索栏输入:firewall.cpl。找到相关项,右键属性,设置为允许。

qq_42212501的博客 1339

rk3326 MIPI休眠唤醒黑屏有背光问题

** 1.问题现象: ** **【开机起来】**开机起来可以正常显示 **【按power按键休眠】**第二次按下Power按键进入休眠,隔10s,再按Power按键唤醒。 **【出现结果】**屏幕黑屏有背光,并提示drm time out错 **【lcd信息】**lcd为480*800 2lane的mipi **【复现概率】**第二次按下休眠唤醒必然复现 【具体错误log如下】 //第一次休眠的log// [ 54.858511] dw-mipi-dsi ff450000.dsi: final DSI-

Ian22l的博客 3944

多项式的链表表示及相加

多项式可以使用数组或链表来表示,例如如下多项式 3X^2 + 5 使用数组可以这样来表示[2, 3, 2, 5, 0] 其中第一项表示非零项的项的个数,后面3代表系数,2表示指数。 或者 [2, 3, 0, 5] 其中2表示指数的最高次幂,其余表示对应的0-->n次幂的系数。 由于数组是静态结构,即提前已经分配好内存,并且在插入或者删除时时间...

远方的少年 1153

用PyTorch手把手搭建液态神经网络(LNN):从微分方程到无人机避障实战

本文详细介绍了如何使用PyTorch搭建液态神经网络(LNN),从微分方程基础到无人机避障实战应用。LNN通过动态时序建模和微分方程实现高效计算,特别适合多传感器数据融合场景。文章包含完整的代码实现、训练技巧及性能优化方案,帮助开发者快速掌握这一前沿技术。

uber9的博客 439

用链表表示多项式,并实现多项式的加法运算

输入在第一行给出第一个多项式POLYA的系数和指数,并以0,0 结束第一个多项式的输入;在第二行出第一个多项式POLYB的系数和指数,并以0,0 结束第一个多项式的输入。对每一组输入,在一行中输出POLYA+POLYB和多项式的系数和指数。 输出样例: 本题主要思路;1.建立两个头指针分别为head1和head2链表,链表每一个节点分别记录每一个多项式的系数coef和指数exp.2.preA遍历链表head1,preB遍历链表head2.3.建立一个只有一个头节点的链表head,逐步遍历链表he

m0_64005272的博客 1883

完整指南:从基础到高级使用 Semantic Kernel

通过本文的学习,你已经掌握了从基础到高级的使用方法。安装并配置。使用简单的文本生成和自然语言处理任务。利用任务链和工具扩展构建复杂的工作流。通过记忆管理上下文,创建更智能的应用。扩展多模态处理能力,集成图像和音频分析。将应用部署到云端,并通过 Azure Functions 提供智能服务。无论是构建简单的对话应用,还是创建多模态智能服务,都提供了强大的工具和灵活的扩展机制。希望这篇文章能帮助你更好地理解并运用这个框架,构建出更加智能和高效的应用。

net core ,前端 ,python 全栈开发 2805

Agent应用实践之三 - 基础:AgentScope-ReActAgent源码解析

本章通过总结AgentScope的核心类,再通过分析ReActAgent调用大模型的底层源码原理。使我们基本了解了Agent的基本原理,这个实现方式与OpenClaw使用pi-mono的Agent基础框架是一致的。了解完ReActAgent的基本原理,下一章我们会将一下SpringBoot集成方式的代码原理,这两章是我们构建后续内容的基本框架。

代码让AI扣 468

单链表表示多项式ADT&多项式加法

//多项式ADT //利用单链表实现 //要求:输入顺序必须按照从指数的大小,由大到小 //如:7x^3+4x^2+1 //想要结束该次多项式输入,请在下一项输入 0 -1 #include #include typedef struct node *ptrNode; #define Len sizeof(struct node) struct node { int coefficient;

步晓德德德 早早早啊~! 887

反应堆设计:基于MATLAB的反应堆仿真和分析,包括反应堆稳态分析、反应堆动态分析和反应堆安全分析 介绍

反应堆设计是利用计算机技术对核反应堆进行设计和模拟,以获得安全、高效、经济的核能发电系统。它是核能领域的重要组成部分,在电力生产、核医学、科学研究等领域有着广泛的应用。

走向CTO的路上... 1112

多项式的加减

#include #include #define null 0 #define true 1 #define false 0 typedef struct /* 项的表示, 多项式的项作为LinkList的数据元素 */ {       float coef;  /* 系数 */       int exp;   /* 指数 */ }term, ElemType; typed

sinat_31586167的博客 558

vue接入海康4G版摄像头通过萤石云平台推送视频流教程

vue-video-player接入海康视频,videojs-contrib-hls,vue播放视频

renkai721的专栏 7278

基于轻量化网络的干扰信号智能识别算法

针对干扰信号识别时卷积神经网络模型体积大、训练周期长、对硬件存储和计算要求高等问题,本 文提出了一种基于改进轻量级网络模型 SqueezeNet 的干扰信号智能识别算法。该方法首先利用距离多普勒 (Range‑Doppler,RD)处理获得目标及干扰信号的RD图像,接着采用滑窗变换、归一化等技术对RD图像进行重 塑;然后采用基于 RD 信息尺寸的隐层和通道剪枝措施对 SqueezeNet 网络进行改进,缩小了模型尺寸和存储空 间;最后利用不同参数的测试样本拓展网络模型的泛化性能。

qq_43416206的博客 545

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

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

weixin_32323283的博客 936

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

一元多项式求和

利用单链表实现两个一元多项式的加法操作 要求:每个多项式按照指数升幂的形式表示 *提示: 1、相同指数幂的系数和为零不存储 2、每个多项式的输入要求先输入项数,然后分别给出系数和对应的指数 Input 5 3 0 4 1 7 8 2 18 1 30 3 5 1 6 3 -7 8 Output 3.0 0 9.0 1 6.0 3 2.0 18 1.0 30 * #include<bits/stdc++.h> using namespace std; struct Node { int XS

wxk0123456789的博客 344

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

使用链表进行多项式加法

创建一个链表 数据结构选用为单链表,多项式中含有参数和指数,因此链表中包含的元素应该为参数、指数、链表指针,如下所示: typedef int Elemtype; struct LkList { int para; int index; LkList* next; }; typedef LkList* LIST; typedef LkList* Position; 链表数据导入 我们首先将...

Coulson_Zhao的博客 920

多项式相加减

/*  Name:多相式相加减   Author:wujilin  Description:利用单链表实现多项式相加减               注意多项式表达形式               表示5乘以x的3次方加上4乘以x的平方加上5乘以x的               一次方加上9乘以x的0次方  也就是说 逗号前面的为系数 逗号后面的为               x的幂次方   Dat

938

第四周 多项式求和

问题及代码: 用单链表储存一元多项式,并将两个多项式求和。 #include #include #define MAX 20 //多项式最多项数 typedef struct //定义存放多项式的数组类型 { double coef; //系数 int exp; //指数 } PolyArray; typed

qq_40115414的博客 360

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

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

weixin_33488923的博客 738

一元多项式的表示及求和----链表实现 (C语言)

一元多项式的表示及相加 【实验目的】 (1) 掌握C语言中结构类型和指针类型,指针是逻辑关系的映像。 (2) 掌握线性链表的操作特点和动态产生、输出单链表的方法。 (3) 掌握单链表的插入、删除操作的特点和方法。 【实验内容】 试用单链表表示两个多项式:A=4+6x3+5x8+4x12,B=5+2x4+6x7+3x12。 (1) 设计此两个多项式的数据结构; (2) 写...

yxp189的博客 3479

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

设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分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
上一篇: 在Win10下编译Spring4.3.12源码,并导入idea, 进行测试
下一篇: Windows10 找不到 mfc100u.dll 解决方案
种花途。
博客等级 码龄10年 3粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值