数据结构多项式的和c++实现
时间: 2024-01-09 11:21:03 浏览: 45
以下是C++实现多项式相加的代码:
```cpp
#include <iostream>
using namespace std;
// 单项式结点
struct Type {
int coef; // 系数
int exp; // 次数
};
// 多项式结点
template <class elemType>
struct Node {
elemType data; // 数据
Node* next; // 下一个结点
};
// 多项式类的定义
template <class elemType>
class Polynomial {
private:
Node<elemType>* head; // 头结点
elemType stop_flag; // 多项式结束标志,用作判断多项式是否结束
public:
// 构造函数
Polynomial(const elemType& stop) {
head = new Node<elemType>;
head->next = NULL;
stop_flag = stop;
}
// 读入一个多项式
void getPoly() {
Node<elemType>* p = head;
elemType temp;
cin >> temp.coef >> temp.exp; while (temp.exp != stop_flag) {
Node<elemType>* q = new Node<elemType>;
q->data = temp;
q->next = NULL;
p->next = q;
p = q;
cin >> temp.coef >> temp.exp;
}
}
// 相加函数
void addPoly(const Polynomial& a, const Polynomial& b) {
Node<elemType>* p = a.head->next;
Node<elemType>* q = b.head->next;
Node<elemType>* r = head;
while (p && q) {
if (p->data.exp > q->data.exp) {
Node<elemType>* s = new Node<elemType>;
s->data = p->data;
s->next = NULL;
r->next = s;
r = s;
p = p->next;
}
else if (p->data.exp < q->data.exp) {
Node<elemType>* s = new Node<elemType>;
s->data = q->data;
s->next = NULL;
r->next = s;
r = s;
q = q->next;
}
else {
if (p->data.coef + q->data.coef != 0) {
Node<elemType>* s = new Node<elemType>;
s->data.coef = p->data.coef + q->data.coef;
s->data.exp = p->data.exp;
s->next = NULL;
r->next = s;
r = s;
}
p = p->next;
q = q->next;
}
}
while (p) {
Node<elemType>* s = new Node<elemType>;
s->data = p->data;
s->next = NULL;
r->next = s;
r = s;
p = p->next;
}
while (q) {
Node<elemType>* s = new Node<elemType>;
s->data = q->data;
s->next = NULL;
r->next = s;
r = s;
q = q->next;
}
}
// 显示一个多项式
void dispPoly() {
Node<elemType>* p = head->next;
while (p) {
cout << p->data.coef << " " << p->data.exp << " ";
p = p->next;
}
cout << stop_flag << endl;
}
// 释放多项式空间(清空多项式,仅保留头结点)
void clear() {
Node<elemType>* p = head->next;
while (p) {
Node<elemType>* q = p;
p = p->next;
delete q;
}
head->next = NULL;
}
// 析构函数
~Polynomial() {
clear();
delete head;
}
};
int main() {
Polynomial<Type> a(-1), b(-1), c(-1);
cout << "请输入第一个多项式(系数和指数之间用空格隔开,以-1结束):" << endl;
a.getPoly();
cout << "请输入第二个多项式(系数和指数之间用空格隔开,以-1结束):" << endl;
b.getPoly();
c.addPoly(a, b);
cout << "两个多项式相加的结果为:" << endl;
c.dispPoly();
return 0;
}
```
相关推荐
![](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)