多项式的加法实现

xiaoxiao2021-02-28  19

//多项式的加法实现 #include <stdio.h> #include <stdlib.h> typedef struct _poly { int coef; int expo; struct _poly *next; }Poly; typedef struct _polist { Poly *head; Poly *tail; }PolyList; void add_list(int c, int e, PolyList *list) { //添加多项式的节点 Poly *p = (Poly *)malloc(sizeof(Poly)); p->coef = c; p->expo = e; p->next = NULL; if (list->tail) { list->tail->next = p; } else { list->head = p; } list->tail = p; } void creat_list(PolyList *list) { //构建一个多项式链表 int c = 0; int e = 0; while (true) { printf("input the expo and the coef\n"); scanf("%d %d", &e, &c); if (e != -1) { add_list(c, e, list); } else { break; } } } int Compare(int a, int b) { int i = 2; if (a > b) { i = 1; } else if (a < b) { i = -1; } else { i = 0; } return i; } void PolyAdd(PolyList p1, PolyList p2, PolyList *pp) { int c_sum = 0; while (p1.head && p2.head) { switch (Compare(p1.head->expo, p2.head->expo)) { case 1: add_list(p1.head->coef, p1.head->expo, pp); p1.head = p1.head->next; break; case -1: add_list(p2.head->coef, p2.head->expo, pp); p2.head = p2.head->next; break; case 0: c_sum = p1.head->coef + p2.head->coef; if (c_sum) { add_list(c_sum, p1.head->expo, pp); } p1.head = p1.head->next; p2.head = p2.head->next; break; } } for (; p1.head; p1.head = p1.head->next) { add_list(p1.head->coef, p1.head->expo, pp); } for (; p2.head; p2.head = p2.head->next) { add_list(p2.head->coef, p2.head->expo, pp); } } void print_list(PolyList list) { //完成输入后打印整串链表 Poly *p = (Poly *)malloc(sizeof(Poly)); for (p = list.head; p; p = p->next) { printf("expo: %d coef:%d\n", p->expo, p->coef); } } int main() { PolyList p1, p2, pp; p1.head = p1.tail = NULL; p2.head = p2.tail = NULL; pp.head = pp.tail = NULL; creat_list(&p1); printf("The p1 list is:\n"); print_list(p1); printf("\n"); creat_list(&p2); printf("The p2 list is:\n"); print_list(p2); printf("\n"); PolyAdd(p1, p2, &pp); printf("The final pp list is:\n"); print_list(pp); return 0; }
转载请注明原文地址: https://www.6miu.com/read-2650133.html

最新回复(0)