1.算法步骤:
① 创建一个只有头结点的空链表。
② 根据多项式的项的个数n,循环n次执行以下操作:
- 生成一个新结点*s;
- 输入多项式当前项的系数和指数赋给新结点*s的数据域;
- 设置一前驱指针pre,用于指向待找到的第一个大于输入项指数的结点的前驱,pre初值指向头结点;
- 指针q初始化,指向首元结点;
- 循链向下逐个比较链表中当前结点与输入项指数,找到第一个大于输入项指数的结点*q;
- 将输入项结点*s插入到结点*q之前。
2.代码实现
/*
* 单链表实现多项式的相加
*
* @Author: longbow_nice
* @CreatedTime: 2022/7/11
*/
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
typedef struct PNode {
double coef;
int expn;
struct PNode* next;
}PNode,*Polynomial;
void PolynomialPrint(Polynomial P);
void PolynomialCreate(Polynomial& P,int number) {
P = new PNode;
P->next = NULL;
PNode* s; //s结点用来储存输入
PNode* pre, * q; //之后把s插入到合适的pre和q之间,保证多项式指数按从大到小排列
cout << "请输入多项式每一项的系数和指数:";
int counter = 1;
while (counter <= number)