PolyAdd.h
#define _CRT_SECURE_N0_WARNINGS 1#define Max 20 #include <stdio.h>#include <stdlib.h>typedef struct{ float coef; int expn; }PolyArray[Max]; typedef struct Poly{ float coef;//系数 int expn; //指数 struct Poly *next; }PolyNode; void CreatPolyList(PolyNode** pList, PolyArray arr, int n) { PolyNode *cur, *tail; *pList = (PolyNode *)malloc(sizeof(PolyNode));//创建一个空的多项式链表 (*pList)->next = NULL; tail =*pList; for (int i = 0; i < n; i++) { cur = (PolyNode*)malloc(sizeof(PolyNode)); cur->coef = arr[i].coef; cur->expn = arr[i].expn; cur->next = NULL; tail->next = cur; tail = tail->next; } }//打印多项式void PrintPolyList(PolyNode* pList) { PolyNode *p = pList->next; while (p!=NULL) { printf("%gX^%d",p->coef,p->expn); if (p->next!=NULL) printf("+"); p = p->next; } printf("\n"); }//多项式链表排序 指数从大到小 插排void PolyListSort(PolyNode** head) { PolyNode *cur= (*head)->next; PolyNode *pHead, *tail; if (cur->next != NULL) { tail = cur->next; cur->next = NULL; cur= tail; while (cur != NULL){ tail= cur->next; pHead = *head; while (pHead->next != NULL && (pHead->next->expn) > (cur->expn)) pHead = pHead->next; cur->next = pHead->next; pHead->next = cur; cur = tail; } } }//多项式相加void AddPoly(PolyNode *pHeadA, PolyNode* pHeadB, PolyNode** pHeadC) { PolyNode* pA = pHeadA->next; PolyNode* pB = pHeadB->next; PolyNode*cur, *tail_c; *pHeadC = (PolyNode*)malloc(sizeof(PolyNode)); tail_c = *pHeadC; while (pA != NULL&&pB != NULL) { if (pA->expn > pB->expn) { cur = (PolyNode*)malloc(sizeof(PolyNode)); cur->coef = pA->coef; cur->expn = pA->expn; cur->next = NULL; tail_c->next = cur;//新结点尾插在c链表上 tail_c = tail_c->next; pA = pA->next; } if (pB->expn > pA->expn) { cur = (PolyNode*)malloc(sizeof(PolyNode)); cur->coef = pB->coef; cur->expn = pB->expn; cur->next = NULL; tail_c->next = cur;//新结点尾插在c链表上 tail_c = tail_c->next; pB = pB->next; } else { cur = (PolyNode*)malloc(sizeof(PolyNode)); cur->coef = (pA->coef + pB->coef); cur->expn = pA->expn; cur->next = NULL; tail_c->next = cur;//新结点尾插在c链表上 tail_c = tail_c->next; pA = pA->next; pB = pB->next; } } //多余结点 while (pA != NULL&&pB == NULL) { cur = (PolyNode*)malloc(sizeof(PolyNode)); cur->coef = pA->coef; cur->expn = pA->expn; cur->next = NULL; tail_c->next = cur;//新结点尾插在c链表上 tail_c = tail_c->next; pA = pA->next; } while (pA == NULL&&pB != NULL) { cur = (PolyNode*)malloc(sizeof(PolyNode)); cur->coef = pB->coef; cur->expn = pB->expn; cur->next = NULL; tail_c->next = cur;//新结点尾插在c链表上 tail_c = tail_c->next; pB = pB->next; } }
main.c
#define _CRT_SECURE_N0_WARNINGS 1#include "PolyAdd.h"int main(){ PolyNode *a_Head = NULL; PolyNode *b_Head = NULL; PolyNode *c_Head = NULL; PolyArray a = { { 7, 0 }, { 3, 1 }, { 9, 8 }, { 5, 17 } }; PolyArray b = { { 8, 1 }, { 22, 7 }, { 9, 8 } }; CreatPolyList(&a_Head, a, 4); CreatPolyList(&b_Head, b, 3); printf("原多项式a: "); PrintPolyList(a_Head); printf("原多项式b: "); PrintPolyList(b_Head); PolyListSort(&a_Head); printf("排序后多项式a: "); PrintPolyList(a_Head); PolyListSort(&b_Head); printf("排序后多项式b: "); PrintPolyList(b_Head); AddPoly(a_Head, b_Head, &c_Head); printf("相加后多项式c: "); PrintPolyList(c_Head); return 0; }
运行结果:
一元多项式相加.png
作者:修夏之夏i
链接:https://www.jianshu.com/p/2e1b6cfb1b90