C++稀疏多项式相加

C++稀疏多项式相加

开通优快云快1年了,第一次尝试写博客。第一次就写数据结构中单链表的应用——二个稀疏多项式的加(减法同理,把加号改成减号就可以了)。
该程序除了有二个稀疏多项式相加的功能,同时也有单链表的创建、显示功能。话不多说,直接上程序。
设二个链表的长度分别为m和n,那么时间复杂度就是O(m+n)。
头文件:

#include <iostream>
using namespace std;
//计算稀疏多项式的和
class ListNode //定义一个结点类
{
   
public:
	int m_key;//用来计算x前面的系数
	int index;//用来记未知数x的系数
	ListNode* next;//指向下一结点的指针
};
class List //定义一个链表类
{
   
public:
	List();//构造函数初始化
	~List();//析构函数
	void creatlist();//新建链表
	void show();//显示链表
	ListNode * getheadptr();//用来获取私有的结点指针
private:
	ListNode *head;
C++中,如果要实现两个稀疏多项式相加,通常会采用哈希表或映射来存储系数和对应的变量指数。下面是一个简单的示例,假设我们有一个稀疏多项式类`SparsePolynomial`,它包含了一个内部结构来保存数据: ```cpp #include <unordered_map> #include <iostream> class Term { public: int exponent; double coefficient; // 默认构造函数和赋值运算符省略... }; class SparsePolynomial { private: std::unordered_map<int, double> terms; // 存储系数和指数 public: void addTerm(int exponent, double coefficient) { terms[exponent] += coefficient; } void add(SparsePolynomial other) { for (const auto& term : other.terms) { if (terms.find(term.first) != terms.end()) { terms[term.first] += term.second; } else { terms[term.first] = term.second; // 如果当前多项式没有该项,则直接添加 } } } void print() const { for (const auto& pair : terms) { std::cout << "x^" << pair.first << " * " << pair.second << " + "; } std::cout << "\n"; } }; int main() { SparsePolynomial p1, p2; p1.addTerm(2, 5); // x^2 * 5 p1.addTerm(0, 3); // x^0 * 3 (常数项) p2.addTerm(1, 2); // x^1 * 2 p2.addTerm(-1, 4); // x^-1 * 4 (可以简化为x) p1.add(p2); p1.print(); // 输出结果将是合并后的稀疏多项式 return 0; } ``` 在这个例子中,我们首先创建了两个`SparsePolynomial`实例`p1`和`p2`,然后通过`addTerm`方法分别添加系数和指数到它们各自的表示中。接着,我们调用`add`方法将第二个多项式加入第一个多项式,并打印出最终的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值