写一个一元稀疏多项式计算的C++源代码,利用链表实现加法减法的计算

时间: 2024-02-18 18:03:32 浏览: 25
好的,这是一份简单的一元稀疏多项式计算的C++源代码,利用链表实现加法减法的计算: ```c++ #include <iostream> using namespace std; // 多项式项 class PolyItem { public: int coef; // 系数 int expn; // 指数 PolyItem* next; // 下一个项 }; // 多项式 class Poly { public: Poly() { head = new PolyItem(); head->next = nullptr; } ~Poly() { PolyItem* p = head; while (p) { PolyItem* temp = p; p = p->next; delete temp; } } // 获取多项式项的个数 int GetLength() const { int count = 0; PolyItem* p = head->next; while (p) { count++; p = p->next; } return count; } // 添加多项式项 void AddItem(int coef, int expn) { PolyItem* p = head; while (p->next && p->next->expn > expn) { p = p->next; } if (p->next && p->next->expn == expn) { // 合并同类项 p->next->coef += coef; if (p->next->coef == 0) { // 系数为0,删除该项 PolyItem* temp = p->next; p->next = p->next->next; delete temp; } } else { PolyItem* item = new PolyItem(); item->coef = coef; item->expn = expn; item->next = p->next; p->next = item; } } // 加法运算 void Add(const Poly& b) { PolyItem* pa = head->next; PolyItem* pb = b.head->next; PolyItem* pc = head; while (pa && pb) { if (pa->expn > pb->expn) { pc->next = new PolyItem(); pc = pc->next; pc->coef = pa->coef; pc->expn = pa->expn; pa = pa->next; } else if (pa->expn < pb->expn) { pc->next = new PolyItem(); pc = pc->next; pc->coef = pb->coef; pc->expn = pb->expn; pb = pb->next; } else { int sum = pa->coef + pb->coef; if (sum != 0) { pc->next = new PolyItem(); pc = pc->next; pc->coef = sum; pc->expn = pa->expn; } pa = pa->next; pb = pb->next; } } while (pa) { pc->next = new PolyItem(); pc = pc->next; pc->coef = pa->coef; pc->expn = pa->expn; pa = pa->next; } while (pb) { pc->next = new PolyItem(); pc = pc->next; pc->coef = pb->coef; pc->expn = pb->expn; pb = pb->next; } pc->next = nullptr; } // 减法运算 void Subtract(const Poly& b) { PolyItem* pa = head->next; PolyItem* pb = b.head->next; PolyItem* pc = head; while (pa && pb) { if (pa->expn > pb->expn) { pc->next = new PolyItem(); pc = pc->next; pc->coef = pa->coef; pc->expn = pa->expn; pa = pa->next; } else if (pa->expn < pb->expn) { pc->next = new PolyItem(); pc = pc->next; pc->coef = -pb->coef; pc->expn = pb->expn; pb = pb->next; } else { int diff = pa->coef - pb->coef; if (diff != 0) { pc->next = new PolyItem(); pc = pc->next; pc->coef = diff; pc->expn = pa->expn; } pa = pa->next; pb = pb->next; } } while (pa) { pc->next = new PolyItem(); pc = pc->next; pc->coef = pa->coef; pc->expn = pa->expn; pa = pa->next; } while (pb) { pc->next = new PolyItem(); pc = pc->next; pc->coef = -pb->coef; pc->expn = pb->expn; pb = pb->next; } pc->next = nullptr; } // 显示多项式 void Display() const { PolyItem* p = head->next; while (p) { cout << p->coef << "x^" << p->expn; if (p->next) { cout << " + "; } p = p->next; } cout << endl; } private: PolyItem* head; }; int main() { Poly a, b, c; // 添加多项式项 a.AddItem(3, 2); a.AddItem(4, 1); a.AddItem(5, 0); b.AddItem(1, 2); b.AddItem(-3, 1); b.AddItem(2, 0); // 显示多项式 cout << "a = "; a.Display(); cout << "b = "; b.Display(); // 加法运算 c = a; c.Add(b); cout << "a + b = "; c.Display(); // 减法运算 c = a; c.Subtract(b); cout << "a - b = "; c.Display(); return 0; } ``` 在这个源代码中,我们定义了两个类:PolyItem和Poly。PolyItem表示多项式的一项,包括系数和指数。Poly表示多项式,包括多项式项的链表和一些操作,如添加多项式项、加法运算、减法运算和显示多项式。我们可以创建两个多项式a和b,添加多项式项,然后进行加法和减法运算。最后,我们可以显示结果多项式c。

相关推荐

最新推荐

recommend-type

C语言:一元多项式加减法运算(链表 附答案).docx

C语言链表的入门题,里面提供了两种思路供参考,用链表来实现一元多项式的加减法,并按照一定规律输出。也是练习链表和排序算法的一道小实验,初学链表的小伙伴可以参考参考噢
recommend-type

数据结构实验报告之一元多项式求和(链表)报告2.doc

实验内容:一元多项式求和。 把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果...一元多项式求和——把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。
recommend-type

用C语言设计并实现一个一元稀疏多项式的简单计算器

数据结构的一个实验,用C语言设计并实现一个一元稀疏多项式的简单计算器 输入并建立多项式输出多项式,序列按指数降序排列多项式A(x)和B(x)相加,并建立多项式A(x)+B(x)多项式A(x)和B(x)相减,并建立多项式A(x)-B...
recommend-type

使用c或C++一元稀疏多项式的加法运算

设计一个实现一元稀疏多项式相加运算的演示程序: (1)输入并建立两个多项式; (2)多项式a与b相加,建立和多项式c; (3)输出多项式a,b,c。输出格式:比如多项式a为:A(x)=c1xe1+ c2xe2+…+ cmxem,其中,ci和...
recommend-type

Java实现求解一元n次多项式的方法示例

主要介绍了Java实现求解一元n次多项式的方法,涉及java高斯消元法处理矩阵运算解多项式的相关操作技巧,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。