是使用带表头结点的单链表储存多项式并实现一元稀疏多项式简单计算器的 C 语言代码
时间: 2024-09-13 09:13:22 浏览: 46
在C语言中,我们可以使用单链表结构存储多项式的系数及其对应的变量次幂。每个节点可以包含一个整数表示系数,另一个整数表示变量的指数。这里是一个简单的例子,展示了如何创建一个带表头结点的链表结构以及如何实现一元稀疏多项式的基本加法操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int coefficient;
int exponent;
struct Node* next;
} PolynomialNode;
// 创建新节点
PolynomialNode* createNode(int coeff, int exp) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coefficient = coeff;
newNode->exponent = exp;
newNode->next = NULL;
return newNode;
}
// 添加项到链表
void addTerm(PolynomialNode** head, int coeff, int exp) {
PolynomialNode* newNode = createNode(coeff, exp);
if (*head == NULL) {
*head = newNode;
} else {
PolynomialNode* current = *head;
while (current->next != NULL && current->exponent > exp) {
current = current->next;
}
if (current->exponent > exp) {
newNode->next = current->next;
current->next = newNode;
} else {
newNode->next = NULL;
}
}
}
// 打印多项式
void printPolynomial(PolynomialNode* head) {
PolynomialNode* current = head;
while (current != NULL) {
printf("%d*x^%d + ", current->coefficient, current->exponent);
current = current->next;
}
printf("0\n");
}
// 简单的多项式加法
PolynomialNode* addPolynomials(PolynomialNode* head1, PolynomialNode* head2) {
PolynomialNode* resultHead = NULL;
// 遍历两个多项式
while (head1 != NULL || head2 != NULL) {
int coeff1 = (head1 != NULL) ? head1->coefficient : 0;
int exp1 = (head1 != NULL) ? head1->exponent : 0;
int coeff2 = (head2 != NULL) ? head2->coefficient : 0;
int exp2 = (head2 != NULL) ? head2->exponent : 0;
// 计算和的系数和次幂
int newCoeff = coeff1 + coeff2;
int newExp = exp1 >= exp2 ? exp1 : exp2;
// 如果结果存在,则更新;如果不存在,创建新节点
PolynomialNode* newNode = createNode(newCoeff, newExp);
if (resultHead == NULL) {
resultHead = newNode;
} else {
PolynomialNode* current = resultHead;
while (current->next != NULL && current->exponent > newExp) {
current = current->next;
}
if (current->exponent > newExp) {
newNode->next = current->next;
current->next = newNode;
} else {
newNode->next = NULL;
}
}
// 移动指针
if (head1 != NULL) {
head1 = head1->next;
}
if (head2 != NULL) {
head2 = head2->next;
}
}
return resultHead;
}
int main() {
PolynomialNode* head1 = NULL;
PolynomialNode* head2 = NULL;
// 添加一些项到第一个多项式
addTerm(&head1, 2, 1); // 2x^1
addTerm(&head1, -1, 2); // -1x^2
// 添加一些项到第二个多项式
addTerm(&head2, 3, 0); // 3x^0
addTerm(&head2, 4, 2); // 4x^2
// 计算并打印结果
PolynomialNode* result = addPolynomials(head1, head2);
printPolynomial(result);
return 0;
}
```
这个示例实现了两个一元多项式的简单加法。注意,这只是一个基本版本,实际应用可能需要处理更复杂的情况,如合并同次幂项、移除零次幂项等。
阅读全文