C 语言:链表实现一元稀疏多项式的建立、销毁、输出及加减运算
以下是一个使用链表实现两个一元稀疏多项式的表示及基本操作(建立、销毁、输出、加法、减法)的 C 语言示例代码: ```c #include <stdio.h> #include <stdlib.h> // 多项式的项结构体 typedef struct PolyNode { int coef; // 系数 int exp; // 指数 struct PolyNode* next; } PolyNode; // 创建新的多项式项节点 PolyNode* createNode(int coef, int exp) { PolyNode* newNode = (PolyNode*)malloc(sizeof(PolyNode)); if (newNode == NULL) { printf("内存分配失败\n"); return NULL; } newNode->coef = coef; newNode->exp = exp; newNode->next = NULL; return newNode; } // 销毁多项式链表 void destroyPoly(PolyNode* head) { PolyNode* curr = head; PolyNode* temp; while (curr!= NULL) { temp = curr; curr = curr->next; free(temp); } } // 输出多项式 void printPoly(PolyNode* head) { PolyNode* curr = head; while (curr!= NULL) { printf("%dx^%d ", curr->coef, curr->exp); if (curr->next!= NULL && curr->next->coef > 0) { printf("+ "); } curr = curr->next; } printf("\n"); } // 多项式加法 PolyNode* addPoly(PolyNode* poly1, PolyNode* poly2) { PolyNode* result = NULL; PolyNode* tail = NULL; PolyNode* curr1 = poly1; PolyNode* curr2 = poly2; while (curr1!= NULL && curr2!= NULL) { if (curr1->exp > curr2->exp) { if (result == NULL) { result = createNode(curr1->coef, curr1->exp); tail = result; } else { tail->next = createNode(curr1->coef, curr1->exp); tail = tail->next; } curr1 = curr1->next; } else if (curr1->exp < curr2->exp) { if (result == NULL) { result = createNode(curr2->coef, curr2->exp); tail = result; } else { tail->next = createNode(curr2->coef, curr2->exp); tail = tail->next; } curr2 = curr2->next; } else { int sum = curr1->coef + curr2->coef; if (sum!= 0) { if (result == NULL) { result = createNode(sum, curr1->exp); tail = result; } else { tail->next = createNode(sum, curr1->exp); tail = tail->next; } } curr1 = curr1->next; curr2 = curr2->next; } } while (curr1!= NULL) { if (result == NULL) { result = createNode(curr1->coef, curr1->exp); tail = result; } else { tail->next = createNode(curr1->coef, curr1->exp); tail = tail->next; } curr1 = curr1->next; } while (curr2!= NULL) { if (result == NULL) { result = createNode(curr2->coef, curr2->exp); tail = result; } else { tail->next = createNode(curr2->coef, curr2->exp); tail = tail->next; } curr2 = curr2->next; } return result; } // 多项式减法 PolyNode* subtractPoly(PolyNode* poly1, PolyNode* poly2) { PolyNode* result = NULL; PolyNode* tail = NULL; PolyNode* curr1 = poly1; PolyNode* curr2 = poly2; while (curr1!= NULL && curr2!= NULL) { if (curr1->exp > curr2->exp) { if (result == NULL) { result = createNode(curr1->coef, curr1->exp); tail = result; } else { tail->next = createNode(curr1->coef, curr1->exp); tail = tail->next; } curr1 = curr1->next; } else if (curr1->exp < curr2->exp) { if (result == NULL) { result = createNode(-curr2->coef, curr2->exp); tail = result; } else { tail->next = createNode(-curr2->coef, curr2->exp); tail = tail->next; } curr2 = curr2->next; } else { int diff = curr1->coef - curr2->coef; if (diff!= 0) { if (result == NULL) { result = createNode(diff, curr1->exp); tail = result; } else { tail->next = createNode(diff, curr1->exp); tail = tail->next; } } curr1 = curr1->next; curr2 = curr2->next; } } while (curr1!= NULL) { if (result == NULL) { result = createNode(curr1->coef, curr1->exp); tail = result; } else { tail->next = createNode(curr1->coef, curr1->exp); tail = tail->next; } curr1 = curr1->next; } while (curr2!= NULL) { if (result == NULL) { result = createNode(-curr2->coef, curr2->exp); tail = result; } else { tail->next = createNode(-curr2->coef, curr2->exp); tail = tail->next; } curr2 = curr2->next; } return result; } // 示例用法 int main() { PolyNode* poly1 = NULL; PolyNode* poly2 = NULL; // 构建多项式 1:3x^3 + 2x^2 - 5x + 1 poly1 = createNode(3, 3); poly1->next = createNode(2, 2); poly1->next->next = createNode(-5, 1); poly1->next->next->next = createNode(1, 0); // 构建多项式 2:2x^3 - 4x^2 + 6 poly2 = createNode(2, 3); poly2->next = createNode(-4, 2); poly2->next->next = createNode(0, 1); poly2->next->next->next = createNode(6, 0); printf("多项式 1: "); printPoly(poly1); printf("多项式 2: "); printPoly(poly2); PolyNode* sum = addPoly(poly1, poly2); printf("多项式 1 和多项式 2 的和: "); printPoly(sum); PolyNode* diff = subtractPoly(poly1, poly2); printf("多项式 1 减去多项式 2 的差: "); printPoly(diff); // 销毁多项式 destroyPoly(poly1); destroyPoly(poly2); destroyPoly(sum); destroyPoly(diff); return 0; } ``` 这段代码实现了稀疏多项式的基本操作,通过链表存储多项式的项,能够进行加法和减法运算,并输出结果。在示例的 `main` 函数中演示了如何创建两个多项式并进行相关操作。 ######[AI写代码神器 | 1939点数解答 | 2024-10-18 17:30:58]
- C 语言实现一元稀疏多项式 a=3x^14+2x^8+1 与 b=8x^14–3x^10+10x^6 的表示及基本操作(字节豆包 | 1615点数解答 | 2024-10-18 17:19:15)238
- C 语言:链表实现一元稀疏多项式的建立、销毁、输出及加减运算(字节豆包 | 1939点数解答 | 2024-10-18 17:30:58)226
- C 语言实现:随机式子驱动一元稀疏多项式建立、销毁、运算全解析(字节豆包 | 1842点数解答 | 2024-10-29 08:45:36)177
- C 语言实现一元稀疏多项式:建立、销毁、输出及加减运算全解析(字节豆包 | 1832点数解答 | 2024-10-29 08:49:08)237
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- Java 实现计算所需最少钱币张数和个数(字节豆包 | 590点数解答 | 2026-03-05 21:44:59)18
- C#工程师必知:数组、链表、哈希、队列、栈数据结构优缺点大揭秘! (百度文心 | 561点数解答 | 2023-11-09 17:56:30)260
- Java 实现仿 Windows 资源管理器:文件管理器功能全解析与代码示例(字节豆包 | 623点数解答 | 2025-01-01 14:59:04)247
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- C语言实现顺序表基本功能:建表、初始化、销毁等全解析( | 1665点数解答 | 2024-03-21 16:21:47)260
- C语言数据结构:顺序表基本功能(建表、增删查等)实现代码解析( | 2210点数解答 | 2024-03-21 16:53:28)247
- C 语言实现单链表全功能操作:创建、增删查改与逆置测试( | 4796点数解答 | 2024-03-28 16:24:20)340