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)
做的不好的地方,希望能够指出来。