c++链表实现二个多项式
时间: 2023-07-10 13:19:07 浏览: 76
好的,我可以帮你解决这个问题。首先,我们可以定义一个结构体来表示多项式的每一项,包括系数和指数。然后,我们可以用链表来存储每一项。
下面是一个简单的代码示例:
```c++
#include <iostream>
using namespace std;
// 定义多项式项的结构体
struct PolyItem {
int coef; // 系数
int exp; // 指数
PolyItem *next; // 指向下一项的指针
};
// 定义链表类
class PolyList {
private:
PolyItem *head; // 头指针,指向第一项
public:
// 构造函数,初始化头节点
PolyList() {
head = new PolyItem;
head->next = NULL;
}
// 析构函数,释放链表内存
~PolyList() {
PolyItem *p = head;
while (p != NULL) {
PolyItem *tmp = p;
p = p->next;
delete tmp;
}
}
// 添加一项到多项式中
void addItem(int coef, int exp) {
// 如果链表为空,则直接添加到第一个节点
if (head->next == NULL) {
PolyItem *item = new PolyItem;
item->coef = coef;
item->exp = exp;
item->next = NULL;
head->next = item;
return;
}
// 否则遍历链表,找到插入位置
PolyItem *p = head->next;
PolyItem *prev = head;
while (p != NULL && p->exp > exp) {
prev = p;
p = p->next;
}
// 如果指数相同,则合并两项
if (p != NULL && p->exp == exp) {
p->coef += coef;
} else {
// 否则插入新节点
PolyItem *item = new PolyItem;
item->coef = coef;
item->exp = exp;
item->next = p;
prev->next = item;
}
}
// 打印多项式
void print() {
if (head->next == NULL) {
cout << "0" << endl;
return;
}
PolyItem *p = head->next;
while (p != NULL) {
cout << p->coef << "x^" << p->exp;
if (p->next != NULL) {
cout << " + ";
}
p = p->next;
}
cout << endl;
}
};
int main() {
// 创建两个多项式
PolyList poly1, poly2;
// 添加多项式1的项
poly1.addItem(3, 5);
poly1.addItem(-2, 3);
poly1.addItem(5, 1);
poly1.addItem(-1, 0);
// 添加多项式2的项
poly2.addItem(2, 4);
poly2.addItem(-3, 3);
poly2.addItem(1, 1);
poly2.addItem(2, 0);
// 打印两个多项式
cout << "Poly1: ";
poly1.print();
cout << "Poly2: ";
poly2.print();
return 0;
}
```
这个示例程序中,我们定义了一个 `PolyItem` 结构体,表示多项式的每一项,包括系数和指数。然后,我们定义了一个 `PolyList` 链表类,用来存储多项式的每一项。链表的头节点 `head` 指向第一个节点,每一个节点表示一个多项式的项。
在 `PolyList` 类中,我们实现了三个方法:
- `addItem(int coef, int exp)`:添加一项到多项式中。如果指数相同,则将系数相加;否则插入新节点,并按照指数从大到小排序。
- `print()`:打印多项式。遍历链表,依次输出每一项的系数和指数。
在 `main()` 函数中,我们先创建了两个多项式 `poly1` 和 `poly2`,然后分别添加了若干项。最后,我们打印了两个多项式的内容。
希望这个示例能够帮助你实现链表存储二个多项式的问题。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)