能否提供一个C语言实现的链表数据结构,用于存储一元多项式,并展示如何用这种链表结构实现两个一元多项式的乘法运算的具体代码示例?
时间: 2024-12-04 21:30:05 浏览: 15
顺序结构、动态链表结构下的一元多项式
当然可以。在C语言中,我们可以使用链表数据结构来表示一元多项式,其中每个节点包含一个系数和一个指数。下面是一个简单的链表结构定义以及两个多项式相乘的函数实现:
```c
// 定义链表节点结构体
typedef struct Term {
double coefficient; // 系数
int exponent; // 指数
struct Term* next; // 指向下一个节点的指针
} Term;
// 创建一个新的链表项
Term* create_term(double c, int e) {
Term* new_node = (Term*)malloc(sizeof(Term));
if (!new_node) {
printf("Memory allocation failed.\n");
return NULL;
}
new_node->coefficient = c;
new_node->exponent = e;
new_node->next = NULL;
return new_node;
}
// 合并两个链表项,创建新链表表示乘积
Term* multiply_terms(Term* term1, Term* term2) {
double product = term1->coefficient * term2->coefficient;
if (product != 0 && term1->exponent + term2->exponent > 0) {
return create_term(product, term1->exponent + term2->exponent);
} else {
free(term1); // 如果乘积为0或者合并后的指数小于等于0,释放term1的空间
free(term2);
return NULL;
}
}
// 插入一个项到链表尾部
void insert_to_list(Term** head, Term* new_term) {
if (*head == NULL) {
*head = new_term;
} else {
Term* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_term;
}
}
// 将多项式分解为链表形式
Term* polynomial_to_list(double coefficients[], int degrees[]) {
Term* head = NULL;
for (int i = 0; i < sizeof(coefficients)/sizeof(coefficients[0]); ++i) {
if (coefficients[i] != 0) {
Term* term = create_term(coefficients[i], degrees[i]);
insert_to_list(&head, term);
}
}
return head;
}
// 主函数演示两个多项式的乘法
int main() {
double poly1_coeffs[] = {1.0, 2.0, 3.0};
int poly1_degrees[] = {0, 1, 2};
double poly2_coeffs[] = {4.0, 5.0};
int poly2_degrees[] = {0, 1};
Term* poly1 = polynomial_to_list(poly1_coeffs, poly1_degrees);
Term* poly2 = polynomial_to_list(poly2_coeffs, poly2_degrees);
Term* result_head = multiply_terms(poly1, poly2);
// 输出结果多项式
Term* current = result_head;
while (current != NULL) {
printf("%.1f * x^%d ", current->coefficient, current->exponent);
current = current->next;
}
free(result_head);
free(poly1);
free(poly2);
return 0;
}
```
这个示例展示了如何使用链表结构存储一元多项式并实现它们的乘法。注意,这里假设输入的多项式系数和指数数组是有效的,并且乘法只考虑非零系数的对应项。
阅读全文