1. 程式人生 > >資料結構與演算法分析c語言描述(Mark Allen)--多項式ADT陣列實現

資料結構與演算法分析c語言描述(Mark Allen)--多項式ADT陣列實現

多項式ADT陣列實現

  • 使用陣列進行儲存
  • 操作集合
    • 乘法
    • 加法

標頭檔案

//cpp head file PloynomialADTarray.h
#define MaxDegree 1000
typedef struct Pol
{
   int CoeffArray[MaxDegree + 1];
   int HighPower;
} * Polynomial;

//使用陣列模擬多項式資料結構

//視覺化一個多項式ADT
void ShowAPoly(Polynomial Poly);

//初始化多項式的例程
void ZeroPloynomial(Polynomial Ploy);

//產生一個隨機的多項式ADT
void RandAPoly(Polynomial Poly); //兩個多項式相加的例程 void AddPloynomial(const Polynomial Poly1,const Polynomial Poly2,Polynomial PloySum); //兩個多項式相乘的例程 void MultPloynomial(const Polynomial Poly1,const Polynomial Poly2,Polynomial PloyProd);

主題部分

#include <stdio.h>
#include <stdlib.h>
#include "PloynomialADTarray.h"
#include <time.h> #include <unistd.h> int main(int argc, char const *argv[]) { //初始化需要用到的多項式 Polynomial p1 = (Polynomial)malloc(sizeof(struct Pol)); ZeroPloynomial(p1); Polynomial p2 = (Polynomial)malloc(sizeof(struct Pol)); ZeroPloynomial(p2); Polynomial psum = (Polynomial)
malloc(sizeof(struct Pol)); ZeroPloynomial(psum); Polynomial pprod = (Polynomial)malloc(sizeof(struct Pol)); ZeroPloynomial(pprod); //對資料操作 int num; while (1) { printf("\t\t\tplease input a intger and choose a option.\n"); printf("\t\t\t1.get a random polynomial.\n"); printf("\t\t\t2.add two poly.\n"); printf("\t\t\t3.plus two poly.\n"); printf("\t\t\t4.shwo a poly\n"); printf("\t\t\t0.exit()\n"); scanf("%d", &num); if (num == 0) break; switch (num) { case 1: printf("Now you get two random polynomial.\n"); RandAPoly(p1); ShowAPoly(p1); sleep(1); RandAPoly(p2); ShowAPoly(p2); break; case 2: printf("\t\t\tadd successfully.\n"); AddPloynomial(p1, p2, psum); ShowAPoly(psum); break; case 3: printf("\t\t\tplus two poly successfully.\n"); MultPloynomial(p1, p2, pprod); ShowAPoly(pprod); break; case 4: int temp; printf("\t\t\tplease input a tager poly to show.\n1.p1\n2.p2\n3.psum\n4.pprod\n"); scanf("%d", &temp); switch (temp) { case 1: ShowAPoly(p1); break; case 2: ShowAPoly(p2); break; case 3: ShowAPoly(psum); break; case 4: ShowAPoly(pprod); break; } break; } } system("pause"); return 0; } //使用陣列模擬多項式資料結構 //視覺化一個多項式ADT void ShowAPoly(Polynomial Poly) { for (int i = 0; i < Poly->HighPower; i++) { if (Poly->CoeffArray[i] != 0) printf("%d %d ", Poly->CoeffArray[i], i); } putchar('\n'); printf("-----------------------------------\n\n"); } //產生一個隨機的多項式ADT void RandAPoly(Polynomial Poly) { srand((unsigned)time(NULL)); int size = rand() % 10+1; Poly->HighPower = size; for (int i = 0; i < size; i++) { Poly->CoeffArray[i] = rand() % 100; } } //初始化多項式的例程 void ZeroPloynomial(Polynomial Ploy) { for (int i = 0; i <= MaxDegree; i++) { Ploy->CoeffArray[i] = 0; } Ploy->HighPower = 0; } //兩個多項式相加的例程 void AddPloynomial(const Polynomial Poly1, const Polynomial Poly2, Polynomial PloySum) { ZeroPloynomial(PloySum); PloySum->HighPower = Poly1->HighPower > Poly2->HighPower ? Poly1->HighPower : Poly2->HighPower; for (int i = PloySum->HighPower; i >= 0; i--) { PloySum->CoeffArray[i] = Poly1->CoeffArray[i] + Poly2->CoeffArray[i]; } } //兩個多項式相乘的例程 void MultPloynomial(const Polynomial Poly1, const Polynomial Poly2, Polynomial PloyProd) { ZeroPloynomial(PloyProd); PloyProd->HighPower = Poly1->HighPower + Poly2->HighPower; if (PloyProd->HighPower > MaxDegree) { printf("Exceeded array size.\n"); return; } for (int i = 0; i <= Poly1->HighPower; i++) { for (int j = 0; j <= Poly2->HighPower; j++) { PloyProd->CoeffArray[i + j] += Poly1->CoeffArray[i] * Poly2->CoeffArray[j]; } } }
  • 實現一個ADT
  • 檢查寫blog
  • 堅持看網課
  • 堅持Leetcode/PAT

加油