稀疏多项式的运算(链表,C语言)测试样例
时间: 2024-10-18 21:18:59 浏览: 33
C语言-一元稀疏多项式计算器
稀疏多项式是一种数学表示法,用于表示只包含少数非零系数的多项式,常常用链表数据结构存储,因为这种表示方式非常适合处理大量的零项。在C语言中,我们可以设计一个结构体来表示系数和指数,然后用头结点的next指针链接这些节点。
下面是一个简单的稀疏多项式运算(加法)的链表结构和示例:
```c
typedef struct SparsePolynomialNode {
int coefficient; // 系数
int exponent; // 指数
struct SparsePolynomialNode* next;
} SPNode;
// 创建一个新的节点
SPNode* createNode(int coefficient, int exponent) {
SPNode* newNode = (SPNode*)malloc(sizeof(SPNode));
newNode->coefficient = coefficient;
newNode->exponent = exponent;
newNode->next = NULL;
return newNode;
}
// 合并两个稀疏多项式
SPNode* addSparsePolynomials(SPNode* poly1, SPNode* poly2) {
SPNode* head = NULL;
while (poly1 && poly2) {
if (poly1->exponent > poly2->exponent) {
SPNode* temp = poly1;
poly1 = poly1->next;
free(temp);
} else if (poly1->exponent < poly2->exponent) {
SPNode* temp = poly2;
poly2 = poly2->next;
free(temp);
} else { // 如果指数相同
int newCoefficient = poly1->coefficient + poly2->coefficient;
SPNode* newNode = createNode(newCoefficient, poly1->exponent);
poly1->next = newNode;
poly2 = poly2->next;
}
}
// 将剩余部分添加到结果链表
while (poly1) {
head = poly1;
poly1 = poly1->next;
}
while (poly2) {
head->next = poly2;
poly2 = poly2->next;
head = head->next;
}
return head;
}
// 示例测试
int main() {
SPNode* poly1 = createNode(2, 0); // 2x^0
poly1->next = createNode(1, 1); // 1x^1
SPNode* poly2 = createNode(-1, 1); // -1x^1
poly2->next = createNode(3, 2); // 3x^2
SPNode* result = addSparsePolynomials(poly1, poly2);
// 打印结果
SPNode* temp = result;
printf("Result: ");
while (temp) {
printf("%dx^%d + ", temp->coefficient, temp->exponent);
temp = temp->next;
}
// 因为最后一个节点后没有next,所以不需要额外的加“+”
printf("\n");
return 0;
}
```
阅读全文