使用线性表实现两个—元n次多项式求和。1<=多项式项数,指数〈=105,名项式不为空。
时间: 2024-05-10 13:16:08 浏览: 115
可以使用顺序表来实现两个一元n次多项式的求和,每个节点存储一个项的系数和指数。
首先需要定义一个节点结构体:
```c++
struct Term{
double coef; // 系数
int expn; // 指数
};
```
然后定义一个顺序表结构体,包含多项式的项数和指向节点数组的指针:
```c++
struct SeqList{
Term* elem; // 存储节点的数组指针
int length; // 顺序表长度,即项数
};
```
接下来实现两个多项式相加的函数,先定义一个函数来创建顺序表:
```c++
void CreatePoly(SeqList& L, int n){
L.elem = new Term[n]; // 分配数组内存
L.length = n; // 设置顺序表长度
for(int i=0; i<n; i++){
cin >> L.elem[i].coef >> L.elem[i].expn; // 输入系数和指数
}
}
```
然后实现多项式相加的函数:
```c++
SeqList AddPoly(SeqList A, SeqList B){
SeqList C;
C.elem = new Term[A.length + B.length]; // 分配数组内存
int i=0, j=0, k=0;
while(i<A.length && j<B.length){
if(A.elem[i].expn > B.elem[j].expn){ // A当前项指数大于B当前项指数
C.elem[k++] = A.elem[i++];
}else if(A.elem[i].expn < B.elem[j].expn){ // A当前项指数小于B当前项指数
C.elem[k++] = B.elem[j++];
}else{ // A和B当前项指数相等
double sum = A.elem[i++].coef + B.elem[j++].coef;
if(sum != 0){ // 系数和不为0时才加入结果多项式
C.elem[k].coef = sum;
C.elem[k++].expn = A.elem[i-1].expn;
}
}
}
while(i<A.length){ // A还有剩余项
C.elem[k++] = A.elem[i++];
}
while(j<B.length){ // B还有剩余项
C.elem[k++] = B.elem[j++];
}
C.length = k; // 设置结果多项式的项数
return C;
}
```
完整代码如下:
```c++
#include <iostream>
using namespace std;
struct Term{
double coef; // 系数
int expn; // 指数
};
struct SeqList{
Term* elem; // 存储节点的数组指针
int length; // 顺序表长度,即项数
};
void CreatePoly(SeqList& L, int n){
L.elem = new Term[n]; // 分配数组内存
L.length = n; // 设置顺序表长度
for(int i=0; i<n; i++){
cin >> L.elem[i].coef >> L.elem[i].expn; // 输入系数和指数
}
}
SeqList AddPoly(SeqList A, SeqList B){
SeqList C;
C.elem = new Term[A.length + B.length]; // 分配数组内存
int i=0, j=0, k=0;
while(i<A.length && j<B.length){
if(A.elem[i].expn > B.elem[j].expn){ // A当前项指数大于B当前项指数
C.elem[k++] = A.elem[i++];
}else if(A.elem[i].expn < B.elem[j].expn){ // A当前项指数小于B当前项指数
C.elem[k++] = B.elem[j++];
}else{ // A和B当前项指数相等
double sum = A.elem[i++].coef + B.elem[j++].coef;
if(sum != 0){ // 系数和不为0时才加入结果多项式
C.elem[k].coef = sum;
C.elem[k++].expn = A.elem[i-1].expn;
}
}
}
while(i<A.length){ // A还有剩余项
C.elem[k++] = A.elem[i++];
}
while(j<B.length){ // B还有剩余项
C.elem[k++] = B.elem[j++];
}
C.length = k; // 设置结果多项式的项数
return C;
}
int main(){
int n1, n2;
cin >> n1;
SeqList A, B, C;
CreatePoly(A, n1);
cin >> n2;
CreatePoly(B, n2);
C = AddPoly(A, B);
for(int i=0; i<C.length; i++){
cout << C.elem[i].coef << " " << C.elem[i].expn << endl;
}
return 0;
}
```
阅读全文