酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

实现两个一元稀疏多项式的表示及基本操作(建立、销毁、输出、加法、减法)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` 函数中演示了如何创建两个多项式并进行相关操作。 [2024-10-18 17:30:58 | AI写代码神器 | 1939点数解答]

相关提问