数据结构与算法分析c语言描述(Mark Allen)--多项式ADT数组实现

版权声明:请注明转载地址 https://blog.csdn.net/OCEANtroye https://blog.csdn.net/OCEANtroye/article/details/82824099

多项式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

加油

猜你喜欢

转载自blog.csdn.net/OCEANtroye/article/details/82824099
今日推荐