` #include[HTML_REMOVED]
include[HTML_REMOVED] // 需要引入stdlib.h来使用malloc函数
// 多项式节点的结构定义
typedef struct PNode{
int coef; // 多项式项的系数
int expn; // 多项式项的指数
struct PNode *next; // 指向下一个节点的指针
} PNode;
typedef PNode Polynomial; // 为PNode定义一个新名称Polynomial
// 在多项式中插入新项的函数
void Insert(int a, int e, Polynomial P){
PNode p, pre;
pre = P;
p = (P)->next;
int flag = 0;
// 首先检查是否已经存在具有相同指数的项
while(p && !flag){
if(p->expn == e){
if(p->coef + a == 0){
// 如果系数之和为零,则移除这个项
pre->next = p->next;
}
else{
// 否则,只更新系数
p->coef += a;
}
flag = 1;
}
pre = pre->next;
p = p->next;
}
pre = P;
p = (P)->next;
// 如果没有相同指数的项,则添加新项
if(!flag){
PNode k = (PNode *)malloc(sizeof(PNode));
k->coef = a;
k->expn = e;
k->next = NULL;
// 根据指数将新项放在正确的位置
while(p && (p->expn > k->expn)){
pre = p;
p = p->next;
}
k->next = p;
pre->next = k;
}
}
// 创建一个空的多项式并填充项的函数
void makeempty(Polynomial P){
(P) = (Polynomial)malloc(sizeof(PNode));
(*P)->next = NULL;
int i, n;
scanf(“%d”, &n); // 读取项的数量
for(i = 0; i < n; i++){
int coef, expn;
scanf(“%d%d”, &coef, &expn); // 读取每个项
Insert(coef, expn, P); // 将项插入到多项式中
}
}
// 加法两个多项式的函数
Polynomial add(const Polynomial P, const Polynomial Q){
Polynomial S = (Polynomial)malloc(sizeof(PNode));
S->next = NULL;
PNode p, q;
p = P->next;
q = Q->next;
// 遍历两个多项式并添加对应的项
while(p && q){
if(p->expn > q->expn){
Insert(p->coef, p->expn, &S);
p = p->next;
}
else if(p->expn < q->expn){
Insert(q->coef, q->expn, &S);
q = q->next;
}
else{
if(p->coef + q->coef != 0){
Insert(p->coef + q->coef, q->expn, &S);
}
p = p->next;
q = q->next;
}
}
// 将剩余的项从任一多项式中追加
while(p){
Insert(p->coef, p->expn, &S);
p = p->next;
}
while(q){
Insert(q->coef, q->expn, &S);
q = q->next;
}
return S;
}
// 乘法两个多项式的函数
Polynomial Mult(const Polynomial P, const Polynomial Q){
Polynomial S = (Polynomial)malloc(sizeof(PNode));
S->next = NULL;
PNode p, q;
p = P->next;
q = Q->next;
while(p){
while(q){
Insert(p->coef * q->coef, p->expn + q->expn, &S);
q = q->next;
}
q = Q->next;
p = p->next;
}
return S;
}
int main(){
Polynomial P, Q;
makeempty(&P); // 创建并填充第一个多项式
makeempty(&Q); // 创建并填充第二个多项式
PNode *S, *M;
S = add(P, Q); // 加法P和Q
M = Mult(P, Q); // 乘法P和Q
// 打印乘积多项式
PNode *p1;
p1 = M->next;
int flag1 = 0;
if(!p1){
printf("0 0");
}
while(p1){
if(!flag1){
flag1 = 1;
}
else{
printf(" ");
}
printf("%d %d", p1->coef, p1->expn);
p1 = p1->next;
}
printf("\n");
// 打印加法多项式
PNode *p2;
p2 = S->next;
int flag2 = 0;
if(!p2){
printf("0 0");
}
while(p2){
if(!flag2){
flag2 = 1;
}
else{
printf(" ");
}
printf("%d %d", p2->coef, p2->expn);
p2 = p2->next;
}
printf("\n");
return 0;
} `