以下是一个使用 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`函数中,创建了两个示例多项式并进行了相关操作。 [2024-10-29 08:45:36 | AI写代码神器 | 1842点数解答]