資料結構與演算法分析c語言描述(Mark Allen)--多項式ADT陣列實現
阿新 • • 發佈:2018-12-11
多項式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
加油