用c语言把代码写出来
时间: 2024-10-07 22:06:25 浏览: 34
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
double coef; // 系数
int expn; // 指数
struct ListNode* next; // 指向下一个节点的指针
} ListNode, *LinkList;
// 初始化链表
Status initList(LinkList &L) {
L = (LinkList) malloc(sizeof(ListNode));
if (!L) return OVERFLOW; // 分配内存失败
L->next = NULL;
return OK; // 成功初始化
}
// 找到指定指数位置的前驱节点
ListNode* locateElem(LinkList L, int e) {
ListNode* current = L;
while (current != NULL && current->expn > e) {
current = current->next;
}
return current;
}
// 将新节点插入链表
void listInsert(LinkList &L, double coef, int expn) {
ListNode* newNode = (ListNode*) malloc(sizeof(ListNode));
if (!newNode) return OVERFLOW; // 分配内存失败
newNode->coef = coef;
newNode->expn = expn;
newNode->next = L->next;
L->next = newNode;
}
// 计算两个多项式的和
void addMutiPoly(LinkList &pa, LinkList &pb) {
ListNode* pa_temp = pa, *pb_temp = pb, *sum_head = NULL, *sum_tail = NULL;
while (pa_temp != NULL || pb_temp != NULL) {
if (pa_temp == NULL) {
sum_tail->next = pb_temp;
break;
} else if (pb_temp == NULL) {
sum_tail->next = pa_temp;
break;
}
// 比较两个节点的指数
if (pa_temp->expn > pb_temp->expn) {
sum_tail->next = pa_temp;
pa_temp = pa_temp->next;
} else if (pa_temp->expn < pb_temp->expn) {
sum_tail->next = pb_temp;
pb_temp = pb_temp->next;
} else { // 同等指数,合并系数
pa_temp->coef += pb_temp->coef;
if (sum_head == NULL) {
sum_head = pa_temp;
sum_tail = pa_temp;
} else {
sum_tail->next = pa_temp;
sum_tail = sum_tail->next;
}
pb_temp = pb_temp->next;
}
}
if (sum_head == NULL) L = NULL; // 如果两个多项式完全相同,置链表为空
else L = sum_head;
}
// 打印链表
void printList(LinkList L) {
ListNode* current = L;
printf("%.1f", current->coef); // 输出系数,保留一位小数
while (current->next != NULL) {
current = current->next;
printf(" %.1fx^%d", current->coef, current->expn);
}
printf("\n");
}
// 主函数
int main() {
LinkList pa, pb;
int n, i, e;
double c;
initList(&pa);
initList(&pb);
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf("%lf %d", &c, &e);
listInsert(&pa, c, e);
}
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf("%lf %d", &c, &e);
listInsert(&pb, c, e);
}
addMutiPoly(pa, pb);
printList(pa);
return 0;
}
```
这段 C 代码实现了题目要求的功能,包括链表的初始化、元素插入、多项式加法以及结果的打印。请注意,这个代码假设输入的多项式已经按照升序插入到了链表中。
阅读全文