C 语言实现:随机式子驱动一元稀疏多项式建立、销毁、运算全解析
以下是一个使用 C 语言实现一元稀疏多项式的表示及基本操作(建立、销毁、输出、加法、减法)的示例代码: ```c #include <stdio.h> #include <stdlib.h> // 多项式的项结构体 typedef struct PolyTerm { int coefficient; // 系数 int exponent; // 指数 struct PolyTerm* next; } PolyTerm; // 创建新的项 PolyTerm* createTerm(int coefficient, int exponent) { PolyTerm* newTerm = (PolyTerm*)malloc(sizeof(PolyTerm)); if (newTerm == NULL) { printf("内存分配失败\n"); return NULL; } newTerm->coefficient = coefficient; newTerm->exponent = exponent; newTerm->next = NULL; return newTerm; } // 销毁多项式 void destroyPoly(PolyTerm* poly) { PolyTerm* current = poly; PolyTerm* temp; while (current!= NULL) { temp = current; current = current->next; free(temp); } } // 输出多项式 void printPoly(PolyTerm* poly) { PolyTerm* current = poly; while (current!= NULL) { printf("%dx^%d ", current->coefficient, current->exponent); if (current->next!= NULL) { printf("+ "); } current = current->next; } printf("\n"); } // 多项式加法 PolyTerm* addPoly(PolyTerm* poly1, PolyTerm* poly2) { PolyTerm* result = NULL; PolyTerm* tail = NULL; PolyTerm* p1 = poly1; PolyTerm* p2 = poly2; while (p1!= NULL && p2!= NULL) { if (p1->exponent > p2->exponent) { PolyTerm* newTerm = createTerm(p1->coefficient, p1->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } p1 = p1->next; } else if (p1->exponent < p2->exponent) { PolyTerm* newTerm = createTerm(p2->coefficient, p2->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } p2 = p2->next; } else { int sum = p1->coefficient + p2->coefficient; if (sum!= 0) { PolyTerm* newTerm = createTerm(sum, p1->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } } p1 = p1->next; p2 = p2->next; } } while (p1!= NULL) { PolyTerm* newTerm = createTerm(p1->coefficient, p1->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } p1 = p1->next; } while (p2!= NULL) { PolyTerm* newTerm = createTerm(p2->coefficient, p2->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } p2 = p2->next; } return result; } // 多项式减法 PolyTerm* subtractPoly(PolyTerm* poly1, PolyTerm* poly2) { PolyTerm* result = NULL; PolyTerm* tail = NULL; PolyTerm* p1 = poly1; PolyTerm* p2 = poly2; while (p1!= NULL && p2!= NULL) { if (p1->exponent > p2->exponent) { PolyTerm* newTerm = createTerm(p1->coefficient, p1->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } p1 = p1->next; } else if (p1->exponent < p2->exponent) { PolyTerm* newTerm = createTerm(-p2->coefficient, p2->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } p2 = p2->next; } else { int diff = p1->coefficient - p2->coefficient; if (diff!= 0) { PolyTerm* newTerm = createTerm(diff, p1->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } } p1 = p1->next; p2 = p2->next; } } while (p1!= NULL) { PolyTerm* newTerm = createTerm(p1->coefficient, p1->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } p1 = p1->next; } while (p2!= NULL) { PolyTerm* newTerm = createTerm(-p2->coefficient, p2->exponent); if (result == NULL) { result = newTerm; tail = newTerm; } else { tail->next = newTerm; tail = newTerm; } p2 = p2->next; } return result; } int main() { // 构建第一个多项式 3x^2 + 5x^4 PolyTerm* poly1 = createTerm(3, 2); PolyTerm* term2 = createTerm(5, 4); poly1->next = term2; // 构建第二个多项式 2x^2 - 4x^4 PolyTerm* poly2 = createTerm(2, 2); PolyTerm* term4 = createTerm(-4, 4); poly2->next = term4; printf("第一个多项式:"); printPoly(poly1); printf("第二个多项式:"); printPoly(poly2); PolyTerm* sum = addPoly(poly1, poly2); printf("两多项式之和:"); printPoly(sum); PolyTerm* difference = subtractPoly(poly1, poly2); printf("两多项式之差:"); printPoly(difference); // 销毁多项式 destroyPoly(poly1); destroyPoly(poly2); destroyPoly(sum); destroyPoly(difference); return 0; } ``` 这个程序使用链表来表示稀疏多项式,并实现了多项式的建立、销毁、输出、加法和减法操作。在`main`函数中,创建了两个示例多项式并进行了相关操作。 ######[AI写代码神器 | 1842点数解答 | 2024-10-29 08:45:36]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- C 语言实现一元稀疏多项式 a=3x^14+2x^8+1 与 b=8x^14–3x^10+10x^6 的表示及基本操作(字节豆包 | 1615点数解答 | 2024-10-18 17:19:15)237
- 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)236
- 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
- 用 JavaScript 实现福利彩票抽奖:一键体验浏览器上的中奖乐趣!(GPT | 282点数解答 | 2024-09-25 20:36:52)265
- JavaScript实现福利彩票抽奖:含规则、界面与代码示例(GPT | 1542点数解答 | 2024-09-27 14:41:50)430
- 用 C++ 和 OpenCV 生成带随机偏移的圆周上的点:代码剖析(字节豆包 | 29点数解答 | 2024-11-06 23:40:42)259
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310