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) { int coefSum = curr1->coef + curr2->coef; if (coefSum!= 0) { PolyNode* newNode = createNode(coefSum, curr1->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } } curr1 = curr1->next; curr2 = curr2->next; } else if (curr1->exp > curr2->exp) { PolyNode* newNode = createNode(curr1->coef, curr1->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } curr1 = curr1->next; } else { PolyNode* newNode = createNode(curr2->coef, curr2->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } curr2 = curr2->next; } } while (curr1!= NULL) { PolyNode* newNode = createNode(curr1->coef, curr1->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } curr1 = curr1->next; } while (curr2!= NULL) { PolyNode* newNode = createNode(curr2->coef, curr2->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } 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) { int coefDiff = curr1->coef - curr2->coef; if (coefDiff!= 0) { PolyNode* newNode = createNode(coefDiff, curr1->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } } curr1 = curr1->next; curr2 = curr2->next; } else if (curr1->exp > curr2->exp) { PolyNode* newNode = createNode(curr1->coef, curr1->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } curr1 = curr1->next; } else { PolyNode* newNode = createNode(-curr2->coef, curr2->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } curr2 = curr2->next; } } while (curr1!= NULL) { PolyNode* newNode = createNode(curr1->coef, curr1->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } curr1 = curr1->next; } while (curr2!= NULL) { PolyNode* newNode = createNode(-curr2->coef, curr2->exp); if (result == NULL) { result = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } curr2 = curr2->next; } return result; } int main() { // 示例:创建两个多项式 PolyNode* poly1 = createNode(5, 2); poly1->next = createNode(3, 1); poly1->next->next = createNode(2, 0); PolyNode* poly2 = createNode(4, 2); poly2->next = createNode(-2, 1); poly2->next->next = createNode(1, 0); printf("多项式 1: "); printPoly(poly1); printf("多项式 2: "); printPoly(poly2); PolyNode* sum = addPoly(poly1, poly2); printf("相加结果: "); printPoly(sum); PolyNode* diff = subtractPoly(poly1, poly2); printf("相减结果: "); printPoly(diff); // 销毁多项式 destroyPoly(poly1); destroyPoly(poly2); destroyPoly(sum); destroyPoly(diff); return 0; } ``` 这段代码实现了一元稀疏多项式的基本操作,通过链表来存储多项式的各项,并进行相应的运算和输出。在实际使用时,您可以根据需要进行修改和扩展。 ######[AI写代码神器 | 1832点数解答 | 2024-10-29 08:49:08]
- 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)225
- 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
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)274
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)305
- 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