酷代码 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) { 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; } ``` 这段代码实现了一元稀疏多项式的基本操作,通过链表来存储多项式的各项,并进行相应的运算和输出。在实际使用时,您可以根据需要进行修改和扩展。 [2024-10-29 08:49:08 | AI写代码神器 | 1832点数解答]

相关提问