C++稀疏多项式相加

C++稀疏多项式相加

开通CSDN快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;//结点指针


};
List& operator+(List &l1, List &l2);//二个稀疏多项式相加

对应的源文件:


```cpp

```cpp

```cpp
#include"Listnode.h"
List::List() {
	this->head = new ListNode;
	head->index = 0;
	head->m_key = 0;
	head->next = NULL;

}
List::~List() {
	ListNode *p;
	
	while (this->head)

	{
		p = head;
		head = head->next;
		delete p;

	}
	this->head = NULL;
}
void List::creatlist() {
	ListNode *p = this->head;
	cout << "请输入你要输入的稀疏多项式的项数个数" << endl;
	int num;
	cin >> num;
	for (int i = 0; i < num; i++)
	{
		ListNode *newnode = new ListNode;
		cout << "";
		cin >> newnode->m_key>> newnode->index;//依次输入多项式中每项的数组和次方数
		cout << endl;
		newnode->next = p->next;//将新结点的指针域置为空
		p->next = newnode;//链接新的结点
		p = newnode;

	}

}
void List::show() {

	ListNode *s;
	s = head->next;
	while (s)
	{
		if (s != head->next)
		{
			cout << "+";
		}
		cout  << s->m_key<<"x^"<<s->index;
		s = s->next;
	}
}
ListNode* List::getheadptr() {
	return this->head;

}
**测试源文件:**
#include<iostream>
#include"Listnode.h"
using namespace std;
int main() {	
	List l1;//创建第一个链表
	l1.creatlist();
	List l2;//创建第二个链表
	l2.creatlist();
    (l1+l2).show();//创建第三个链表,并打印
	system("pause");
	return 0;
输入案例:
l1=2x^2+3x^3
l2=2x^2+3x^4
输出结果:
4x^2+3x^3+3x^4
![运行结果图](https://img-blog.csdnimg.cn/2020081615545381.gif#pic_center)
做的不好的地方,希望能够指出来。



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用 C 代码实现两个一元稀疏多项式相加的例子: ```c #include <stdio.h> #include <stdlib.h> #define MAX_TERMS 20 typedef struct { int coef; int expo; } PolynomialTerm; typedef struct { PolynomialTerm terms[MAX_TERMS]; int size; } Polynomial; Polynomial addPolynomials(Polynomial p1, Polynomial p2) { Polynomial result; int i = 0, j = 0, k = 0; while (i < p1.size && j < p2.size) { if (p1.terms[i].expo > p2.terms[j].expo) { result.terms[k++] = p1.terms[i++]; } else if (p1.terms[i].expo < p2.terms[j].expo) { result.terms[k++] = p2.terms[j++]; } else { result.terms[k].expo = p1.terms[i].expo; result.terms[k++].coef = p1.terms[i++].coef + p2.terms[j++].coef; } } while (i < p1.size) result.terms[k++] = p1.terms[i++]; while (j < p2.size) result.terms[k++] = p2.terms[j++]; result.size = k; return result; } int main() { Polynomial p1, p2, result; p1.size = p2.size = result.size = 0; // 输入第一个多项式 printf("Enter the number of terms in the first polynomial: "); scanf("%d", &p1.size); printf("Enter the coefficient and exponent of each term:\n"); for (int i = 0; i < p1.size; i++) { scanf("%d %d", &p1.terms[i].coef, &p1.terms[i].expo); } // 输入第二个多项式 printf("\nEnter the number of terms in the second polynomial: "); scanf("%d", &p2.size); printf("Enter the coefficient and exponent of each term:\n"); for (int i = 0; i < p2.size; i++) { scanf("%d %d", &p2.terms[i].coef, &p2.terms[i].expo); } // 计算结果多项式并输出 result = addPolynomials(p1, p2); printf("\nResultant polynomial after addition:\n"); for (int i = 0; i < result.size; i++) { printf("%dx^%d ", result.terms[i].coef, result.terms[i].expo); if (i != result.size - 1) { printf("+ "); } } printf("\n"); return 0; } ``` 这个程序首先定义了两个结构体:`PolynomialTerm` 表示多项式中的一项,包括系数和指数;`Polynomial` 表示整个多项式,包括多个 `PolynomialTerm` 和 `size` 表示多项式中包含的项数。 然后定义了一个函数 `addPolynomials`,用于将两个多项式相加。这个函数首先定义了一个新的多项式 `result`,然后使用类似于归并排序的方式将两个多项式中的项按照指数排序,然后将相同指数的项的系数相加得到新的系数,最后将结果存入 `result` 中,并返回。 在 `main` 函数中,先输入两个多项式,然后调用 `addPolynomials` 函数计算结果,并输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值