链表的应用1--多项式求和

     今天学数据结构学到的链表应用于多项式相加,但是书上的代码没看懂,在看了点资料和问ChatGPT以后想到的一个算法,后面有更好的想法在回来更新算法

1.链表相关结构:

//链表结点结构
typedef struct linknode
{
	int coef;//系数 
	int exp;//指数
	linknode* next;//指针
}LinkNode;

//链表头结点结构
typedef struct header
{
	int length;//链表长度(结点数)
	LinkNode* next;//指针
}Header;

2.多项式相加算法:

使用前提:

1.多项式各项按照指数大小降次排序

2.不能出现多个含有相同次幂的项数,例如x^5在一个多项式中不能出现3x^5+5x^5这样,必须为8x^5

,但是这个算法计算结果是没错的,就是输出的时候不太美观,后续会继续完善

//多项式相加
Header* PolyAdd(Header* &A,Header* &B)
{
	//创建新链表头结点
	Header* C = new Header();
	C->length = 0;
	C->next = NULL;
	
	LinkNode* pa = A->next;
	LinkNode* pb = B->next;
	LinkNode* pc = NULL;
	int flag2 = 1;
	while(pa != NULL && pb != NULL)
	{
		LinkNode* new_node = new LinkNode();
		if(pa->exp > pb->exp)
		{
			new_node->coef = pa->coef;
			new_node->exp = pa->exp;
			pa = pa->next;
		}
		else if(pa->exp == pb->exp)
		{
			new_node->coef = pa->coef + pb->coef;
			new_node->exp = pa->exp;
			pa = pa->next;
			pb = pb->next;
		}
		else
		{
			new_node->coef = pb->coef;
			new_node->exp = pb->exp;
			pb = pb->next;
		}
		
		if(flag2)
		{
			C->next = new_node;
			pc = new_node;
			flag2 = 0;
		}
		else
		{
			pc->next = new_node;
			pc = pc->next;
		}
	} 
	
	//将剩余的没有进行加和的项数结点依次添加到C链表后
	//这里由于在上面的循环结束后,A和B链表中必定有一个
	//已经到尾了,所以下面对谁先进行排查的顺序无所谓 
	while(pa != NULL)
	{
		pc->next = new LinkNode();
		pc->next->coef = pa->coef;
		pc->next->exp = pa->exp;
		pc = pc->next; 
		pa = pa->next;
	}
	
	while(pb != NULL)
	{
		pc->next = new LinkNode();
		pc->next->coef = pb->coef;
		pc->next->exp = pb->exp;
		pc = pc->next; 
		pb = pb->next; 
	}
	pc->next = NULL;
	return C;
}

3.完整代码:

#include<iostream>

using namespace std;

//链表结点结构
typedef struct linknode
{
	int coef;//系数 
	int exp;//指数
	linknode* next;//指针
}LinkNode;

//链表头结点结构
typedef struct header
{
	int length;//链表长度(结点数)
	LinkNode* next;//指针
}Header;


//创建链表
Header* CreateLinkList()
{
	//创建头结点并初始化
	Header* header = new Header();
	header->length = 0;
	header->next = NULL;
	
	//添加链表结点或结束
	int choice = 2;
	cout << "(1)添加结点 (2)离开:";
	cin >> choice;
	
	if(choice == 2)
	{
		return header;
	}
	
	int flag1 = 1;
	LinkNode* ptr = NULL;
	while(choice == 1)
	{
		LinkNode* node = new LinkNode();
		cout << "系数coef:";
		cin >> node->coef;
		cout << "指数exp:";
		cin >> node->exp;
		
		if(flag1)
		{
			header->next = node;
			ptr = node;
			flag1 = 0;
		}
		else
		{
			ptr->next = node;
			ptr = node;
		}
		header->length++;
		cout << "(1)添加结点 (2)离开:";
		cin >> choice;
	}
	ptr->next = NULL;
	return header;
}

//多项式相加
Header* PolyAdd(Header* &A,Header* &B)
{
	//创建新链表头结点
	Header* C = new Header();
	C->length = 0;
	C->next = NULL;
	
	LinkNode* pa = A->next;
	LinkNode* pb = B->next;
	LinkNode* pc = NULL;
	int flag2 = 1;
	while(pa != NULL && pb != NULL)
	{
		LinkNode* new_node = new LinkNode();
		if(pa->exp > pb->exp)
		{
			new_node->coef = pa->coef;
			new_node->exp = pa->exp;
			pa = pa->next;
		}
		else if(pa->exp == pb->exp)
		{
			new_node->coef = pa->coef + pb->coef;
			new_node->exp = pa->exp;
			pa = pa->next;
			pb = pb->next;
		}
		else
		{
			new_node->coef = pb->coef;
			new_node->exp = pb->exp;
			pb = pb->next;
		}
		
		if(flag2)
		{
			C->next = new_node;
			pc = new_node;
			flag2 = 0;
		}
		else
		{
			pc->next = new_node;
			pc = pc->next;
		}
	} 
	
	//将剩余的没有进行加和的项数结点依次添加到C链表后
	//这里由于在上面的循环结束后,A和B链表中必定有一个
	//已经到尾了,所以下面对谁先进行排查的顺序无所谓 
	while(pa != NULL)
	{
		pc->next = new LinkNode();
		pc->next->coef = pa->coef;
		pc->next->exp = pa->exp;
		pc = pc->next; 
		pa = pa->next;
	}
	
	while(pb != NULL)
	{
		pc->next = new LinkNode();
		pc->next->coef = pb->coef;
		pc->next->exp = pb->exp;
		pc = pc->next; 
		pb = pb->next; 
	}
	pc->next = NULL;
	return C;
}

//输出链表内容 
void Print(Header* &header)
{
	LinkNode* ph = header->next;
	while(ph != NULL)
	{
		cout << ph->coef << 'X' << ph->exp;
		ph = ph->next;
		if(ph != NULL)
		{
			cout << " + ";
		}
	}
	cout << endl;
	system("pause");
	system("cls");
}

//清空链表 
void FreeLinkList(Header* header)
{
	if(header == NULL)
	{
		cout << "链表不存在或已清空!\n";
		return; 
	}
	LinkNode* p = header->next;
	LinkNode* temp = NULL;
	while(p != NULL)
	{
		temp = p;
		p = p->next;
		delete temp;
	}
	delete header;
	header = NULL;
	if(header == NULL)
	{
		cout << "链表已清空!\n";
	}
}

//测试函数 
void test()
{
	cout << "输入多项式A的结点数据:\n";
	Header* A = CreateLinkList();
	system("pause");
	system("cls");
	Print(A);
	
	cout << "输入多项式B的结点数据:\n";
	Header* B = CreateLinkList();
	system("pause");
	system("cls");
	Print(B);
	
	Header* C = PolyAdd(A,B);
	cout << "多项式A+B的结果为:\n";
	Print(C);
	
	//销毁链表释放空间
	FreeLinkList(A); 
	FreeLinkList(B);
	FreeLinkList(C);
}

int main()
{
	test();
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

磁悬浮轴承行业调研:未来高端市场占比将有所提升

磁悬浮轴承是利用磁力作用将转子悬浮于空中&#xff0c;使转子与定子之间没有机械接触。其原理是磁感应线与磁浮线成垂直&#xff0c;轴芯与磁浮线是平行的&#xff0c;所以转子的重量就固定在运转的轨道上&#xff0c;利用几乎是无负载的轴芯往反磁浮线方向顶撑&#xff0c;形…

【C++修行之道】STL(初识pair、vector)

目录 一、pair 1.1pair的定义和结构 1.2pair的嵌套 1.3pair自带排序规则 1.4代码示例 二、vector 2.1vector的定义和特性 2.2vector的初始化 一维初始化&#xff1a; 2.3vector的常用函数 2.4vector排序去重 排序: 去重&#xff1a; 示例&#xff1a; 一、pair …

Argo CD 可观测性最佳实践

什么是 Argo CD&#xff1f; Argo CD 是一个开源的 CD&#xff08;Continuous Delivery&#xff09;工具&#xff0c;能够帮助您在 Kubernetes 环境中进行持续交付。Argo CD 的主要功能是将配置文件同步到 Kubernetes 集群中并确保应用程序正确运行。Argo CD 可以自动检测应用…

14.5 Flash查询和添加数据库数据

14.5 Flash查询和添加数据库数据 在Flash与数据库通讯的实际应用中&#xff0c;如何实现用户的登录与注册是经常遇到的一个问题。登录实际上就是ASP根据Flash提供的数据查询数据库的过程&#xff0c;而注册则是ASP将Flash提供的数据写入数据库的过程。 1.启动Access2003&…

代码随想录算法训练营29期|day31 任务以及具体安排

理论基础 关于贪心算法&#xff0c;你该了解这些&#xff01; 题目分类大纲如下&#xff1a; #算法公开课 《代码随想录》算法视频公开课 (opens new window)&#xff1a;贪心算法理论基础&#xff01; (opens new window),相信结合视频再看本篇题解&#xff0c;更有助于大家…

【构造方法】这或许是讲的最好的关于Java构造方法的文章!!

致读者 对于看到这篇博客的你们&#xff0c;其实不需要刻意的去记这些知识&#xff0c;可以收藏起来&#xff0c;有事没事翻开看看&#xff0c;这些其实看得多了&#xff0c;自然就烂熟于心了&#xff0c;如果你只是刻意的记忆了一遍&#xff0c;那其实你很快就会忘记&#xf…

仰暮计划|“以前老一辈农村人真的是穷极了……苦极了……”

仰暮计划|“以前老一辈农村人真的是穷极了……苦极了……” 回首往事&#xff0c;几十年的坎坷经历难以件件叙述&#xff0c;却又历历在目。以前老一辈农村人真的是穷极了……苦极了……我奶奶是1941年生人&#xff0c;用她的话说就是“命很硬”。我爷爷1940年生人&#xff0c;…

[TII 2023] 基于压缩感知的多级隐私保护方案

Multilevel Privacy Preservation Scheme Based on Compressed Sensing | IEEE Journals & Magazine | IEEE Xplore 摘要 物联网的广泛应用在给人们带来便利的同时&#xff0c;也引发了人们对数据采集、分析和共享过程中隐私泄露的担忧。本文提出了一种基于压缩感知的多级…

电商系统设计到开发03 引入Kafka异步削峰

一、前言 系统设计&#xff1a;电商系统设计到开发01 第一版设计到编码-CSDN博客 接着上篇文章&#xff1a;电商系统设计到开发02 单机性能压测-CSDN博客 本篇为大制作&#xff0c;内容有点多&#xff0c;也比较干货&#xff0c;希望可以耐心看看 已经开发的代码&#xff0…

【行业应用-智慧零售】东胜物联餐饮门店智能叫号解决方案,为企业智能化升级管理服务

随着科技的不断进步&#xff0c;物联网设备已经广泛应用于各行各业&#xff0c;包括餐饮业。在餐饮门店的线下运营过程中&#xff0c;叫号系统是一项重要的设备需求。传统的叫号方式往往会消耗大量的人力和时间&#xff0c;而物联网技术为餐饮行业提供了一种更高效、智能化的解…

幻兽帕鲁服务器数据备份

搭建幻兽帕鲁个人服务器&#xff0c;最近不少用户碰到内存不足、游戏坏档之类的问题。做好定时备份&#xff0c;才能轻松快速恢复游戏进度 这里讲一下如何定时将服务器数据备份到腾讯云轻量对象存储服务&#xff0c;以及如何在有需要的时候进行数据恢复。服务器中间的数据迁移…

【论文阅读】GraspNeRF: Multiview-based 6-DoF Grasp Detection

文章目录 GraspNeRF: Multiview-based 6-DoF Grasp Detection for Transparent and Specular Objects Using Generalizable NeRF针对痛点和贡献摘要和结论引言模型框架实验不足之处 GraspNeRF: Multiview-based 6-DoF Grasp Detection for Transparent and Specular Objects Us…

为什么TestNg会成为Java测试框架的首选?还犹豫什么,看它!

上一篇自动化测试我们大概了解了测试的目标、测试的技术选型以及搭建平台的目标及需求&#xff0c;也确定了自动化测试方案以testNg作为整个测试流程贯穿的基础支持框架&#xff0c;那么testNg究竟有什么特点&#xff1f;本篇开始我们来详细的学习testNg这个测试框架。 为什么要…

qwt直角坐标 画sing(x)/x

cmath的常见函数&#xff1a;qPow()求平方&#xff0c;log(&#xff09;对数10为底 角度转弧度&#xff1a;x(angel/180)*M_PI 图示&#xff1a; 头文件&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <qwt_plot.h> #in…

使用 CDC MinIO 汇入端为 CockroachDB 保持持久数据

CockroachDB 数据库迅速崭露头角&#xff0c;作为一个坚韧且可扩展的分布式 SQL 数据库。它从其昆虫名字的坚持不懈中汲取灵感&#xff0c;即使面对硬件故障&#xff0c;CockroachDB 也能保证高可用性。其分布式架构横跨多个节点&#xff0c;类似于其昆虫原型的适应性。 凭借强…

SpringCloud Aliba-Seata【下】-从入门到学废【8】

目录 1.数据库创建 1.seata_account库下建表 2.seata_order库下建表 3.seata_storage库下建表 4.在每个库下创建回滚日志 2.创建订单模块 2.1建工程 2.2加pom 2.3改yml 2.4file.conf 2.5registry.conf 2.6domain 2.7Dao 2.8Service 2.9controller 2.10confi…

阅读go语言工具源码系列之gopacket(谷歌出品)----第一集 DLL的go封装

gopacket项目是google出品的golang第三方库&#xff0c;项目源码地址google/gopacket: Provides packet processing capabilities for Go (github.com) gopacket核心是对经典的抓包工具libpcap(linux平台)和npcap(windows平台)的go封装&#xff0c;提供了更方便的go语言操作接…

36、WEB攻防——通用漏洞XSS跨站MXSSUXSSFlashXSSPDFXSS

文章目录 MXSSUXSSFlashXSSPDF XSS 跨站的艺术-XSS入门与介绍 UTF-7 XSS、MHTML XSS、CSS XSS、VBScript XSS已经过时&#xff0c;基本上不会出现。 MXSS 简单来说&#xff0c;就是你往前端页面插入payload&#xff0c;但是前端有些防御策略会将payload编码&#xff0c;导致…

防火墙综合实验

实验需求&#xff1a; 1、生产区在工作时间内可以访问服务器区&#xff0c;仅可以访问http服务器。 2、办公区全天可以访问服务器区&#xff0c;其中&#xff0c;10.0.2.20可以访问FTP服务器和HTTP服务器&#xff0c;10.0.2.10仅可以ping通10.0.3.10。 3、办公区在访问服务器…

【VBA代码解决方案】md文档转Word后,全自动转换为标准的Word公式格式

【VBA解决方案】全自动将Word中的文本公式转换为标准公式 写在最前面VBA代码全自动方法将md文档导出为word代码如何运行VBA代码注意事项 一些如何实现的回忆记录步骤解析手动将文本转换为Word公式代码逻辑步骤设想代码解析代码解释总结 其他背景介绍应用场景VBA脚本介绍如何使用…