編寫將兩個多項式相加的函式
阿新 • • 發佈:2018-11-03
資料結構與演算法分析——C語言描述 習題3.6
#include "stdafx.h" #include"Polynomial.h" int main() { Polynomial P; P = (Polynomial)malloc(sizeof(Node)); P->next = NULL; int m[3][2] = { {10,1000},{5,14},{1,0} }; int n[4][2] = { {-2,1492},{ 3,1990},{11,1},{5,0}}; PlusToPolyList(m, 3, n, 4, P); PrintPoly(P); return 0; }
#include<stdio.h> #include<stdlib.h> typedef struct node { int Coefficient; int Exponent; struct node* next; }Node; typedef Node* PtrToNode; typedef PtrToNode Polynomial; int IsEmpty(Polynomial P) { return P->next == NULL; } int IsLast(Polynomial P) { return P->next == NULL; } //建立多項式連結串列 Polynomial CreatedPoly() { Polynomial head, p1, p2; int n = 0; p2 = p1 = (Polynomial)malloc(sizeof(Node)); if (p1 == NULL) { printf("Can not created!\n"); return NULL; } else { head = NULL; printf("請輸入多項式:\n"); scanf_s("%d%d", &(p1->Coefficient), &(p1->Exponent)); while (p1->Coefficient != 0) { n++; if (n == 1) { head = p1; p2->next = NULL; } else { p2->next = p1; } p2 = p1; p1 = (Polynomial)malloc(sizeof(Node)); scanf_s("%d%d", &(p1->Coefficient), &(p1->Exponent)); } p2->next = NULL; free(p1); p1 = NULL; return head; } } //輸出多項式 void PrintPoly(Polynomial P) { P = P->next; while (P->next != NULL) { printf("(%d*X^%d)+", P->Coefficient, P->Exponent); P = P->next; } printf("(%d*X^%d)\n", P->Coefficient, P->Exponent); } //使用頭插入法插入多項式。 void PushPolyF(int Coefficient, int Exponent, Polynomial P) { Polynomial Tmp; Tmp = (Polynomial)malloc(sizeof(Node)); Tmp->Coefficient = Coefficient; Tmp->Exponent = Exponent; Tmp->next = P->next; P->next = Tmp; } //對多項式進行從大到小的排序(因為是採用頭插入法,則輸出結構的時候,係數小的先輸出) void SortPolyArray(int a[][2], int nums) { //使用氣泡排序法 int Cof = 0; int Exp = 0; for (int i = 0; i < nums; i++) { for (int j = i + 1; j < nums; j++) { if (a[i][1] < a[j][1]) { Cof = a[i][0]; Exp = a[i][1]; a[i][0] = a[j][0]; a[i][1] = a[j][1]; a[j][0] = Cof; a[j][1] = Exp; } } } } //將多項式陣列輸出 void PrintPolyArray(int m[][2], int count) { for (int i = 0; i < count; i++) { printf("(%d*X^%d)", m[i][0], m[i][1]); } } //將兩個多項式中數相加並寫入多項式連結串列中。 void PlusToPolyList(int m[][2],int M, int n[][2],int N, Polynomial P) { SortPolyArray(m, M); SortPolyArray(n, N); int i = 0, j = 0; //任何一個多項式陣列錄入完畢後都會結束 while(i < M) { if (m[i][1] > n[j][1]) { PushPolyF(m[i][0], m[i][1], P); i++; } else if (m[i][1] == n[j][1]) { PushPolyF((m[i][0])+(n[j][0]), m[i][1], P); i++;j++; } else { PushPolyF(n[j][0], n[j][1], P); j++; } } //將還未完成的陣列繼續錄入 if (i == M) { for(;j<N;j++) PushPolyF(n[j][0], n[j][1], P); } else for(;i<M;i++) PushPolyF(m[i][0], m[i][1], P); }