题目链接:https://pintia.cn/problem-sets/434/problems/5803
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct PolyNode* PtrToPolyNode; 5 struct PolyNode { 6 int Coef; 7 int Expon; 8 PtrToPolyNode Next; 9 }; 10 11 typedef struct PolyNode* Polynomial; 12 13 14 int Compare(int e1, int e2) 15 { //比较两项指数e1和e2,根据大、小、等三种情况分别返回1, -1, 0 16 if (e1 > e2) 17 return 1; 18 else if (e1 < e2) 19 return -1; 20 else 21 return 0; 22 } 23 24 void Attach(int coef, int expon, Polynomial *PtrRear) 25 { 26 Polynomial p = (Polynomial)malloc(sizeof(struct PolyNode)); 27 p -> Coef = coef; 28 p->Expon = expon; 29 p->Next = NULL; 30 (*PtrRear)->Next = p; 31 *PtrRear = p; 32 } 33 34 Polynomial PolyAdd(Polynomial P1, Polynomial P2) 35 { 36 Polynomial front, rear, temp; 37 int sum; 38 front = rear = (Polynomial)malloc(sizeof(struct PolyNode)); 39 while (P1 && P2) 40 { 41 switch (Compare(P1->Expon, P2->Expon)) 42 { 43 case 1: 44 Attach(P1->Coef, P1->Expon, &rear); 45 P1 = P1->Next; 46 break; 47 case -1: 48 Attach(P2->Coef, P2->Expon, &rear); 49 P2 = P2->Next; 50 break; 51 case 0: 52 sum = P1->Coef + P2->Coef; 53 if (sum) 54 Attach(sum, P1->Expon, &rear); 55 P1 = P1->Next; 56 P2 = P2->Next; 57 break; 58 } 59 } 60 while (P1) 61 { 62 Attach(P1->Coef, P1->Expon, &rear); 63 P1 = P1->Next; 64 } 65 while (P2) 66 { 67 Attach(P2->Coef, P2->Expon, &rear); 68 P2 = P2->Next; 69 } 70 rear->Next = NULL; 71 temp = front; 72 front = front->Next; 73 free(temp); 74 return front; 75 } 76 77 Polynomial CreatePoly() 78 { 79 int n, coef, expon; 80 Polynomial front, rear, temp; 81 82 front = rear = (Polynomial)malloc(sizeof(struct PolyNode)); 83 scanf_s("%d", &n); 84 while (n--) 85 { 86 scanf_s("%d %d", &coef, &expon); 87 Attach(coef, expon, &rear); 88 } 89 rear->Next = NULL; 90 temp = front; 91 front = front->Next; 92 free(temp); 93 return front; 94 } 95 96 void printPoly(Polynomial P) 97 { 98 Polynomial cell; 99 cell = P; 100 for (cell; cell; cell = cell->Next) 101 { 102 printf("%dX^%d ", cell->Coef, cell->Expon); 103 } 104 } 105 106 int main() 107 { 108 Polynomial P1, P2, P3; 109 P1 = CreatePoly(); 110 P2 = CreatePoly(); 111 P3 = PolyAdd(P1, P2); 112 printPoly(P3); 113 114 }