链表实践—多项式ADT(数组实现)

17 篇文章 0 订阅
12 篇文章 0 订阅

这个ADT可以存储多项式系数,并进行相加,相乘等计算。
这个是用数组实现的版本。

头文件代码:

#ifndef POLYNOMIAL_H_INCLUDED
#define POLYNOMIAL_H_INCLUDED
#define MaxDegree 100
struct P
{
    int CoeffArray[MaxDegree + 1];
    int HighPower;
};
typedef struct P  * Polynomial;
#endif // POLYNOMIAL_H_INCLUDED

实现源码:

#include "polynomial.h"
#include <stdio.h>
#include <stdlib.h>
int Max(int a,int b)
{
    return a > b? a:b;
}

void Error(char * e)
{

}
void ZeroPolynomial(Polynomial Poly)
{
    int i;

    for( i = 0; i <= MaxDegree; i++)
        Poly->CoeffArray[i] = 0;
    Poly->HighPower = 0;
}

void AddPolynomial(const Polynomial Poly1,const Polynomial Poly2,Polynomial PolySum)
{
    int i;

    ZeroPolynomial(PolySum);
    PolySum->HighPower = Max(Poly1->HighPower,Poly2->HighPower);

    for( i = PolySum->HighPower; i >= 0; i--)
        PolySum->CoeffArray[i] = Poly1->CoeffArray[i] + Poly2->CoeffArray[i];
//  printf("%d ",PolySum->HighPower);
}

void MultPolynomial(const Polynomial Poly1,const Polynomial Poly2,const Polynomial PolyProd)
{
    int i,j;

    ZeroPolynomial(PolyProd);
    PolyProd->HighPower = Poly1->HighPower + Poly2->HighPower;

    if( PolyProd->HighPower > MaxDegree)
        Error("Exceeded  array size");
    else
        for(i = 0; i <= Poly1->HighPower; i++)
            for(j = 0; j <= Poly2->HighPower; j++)
                PolyProd->CoeffArray[i + j] += Poly1->CoeffArray[i]*Poly2->CoeffArray[j];
}

int main()
{
    Polynomial a;
    a = malloc(sizeof(struct P));
    ZeroPolynomial(a);
    a -> HighPower = 4;
    int i;
    for(i = 0; i < 5 ; i++)
    {
        // scanf("%d",(a->CoeffArray)[i]);
        a->CoeffArray[i] = i;
    }
    Polynomial b;
    b = malloc(sizeof(struct P));
    ZeroPolynomial(b);
    b -> HighPower = 4;
    for(i = 0; i < 5 ; i++)
    {
        // scanf("%d",(b->CoeffArray)[i]);
        b->CoeffArray[i] = i;
    }
    Polynomial sum;
    sum = malloc(sizeof(struct P));
  //  AddPolynomial(a,b,sum);
  //  for(i = 0; i < 5 ; i++)
   //     printf("%d ",sum->CoeffArray[i]);
    MultPolynomial(a,b,sum);
    for(i = 0; i < a->HighPower+b->HighPower+1 ; i++)
        printf("%d ",sum->CoeffArray[i]);
}

后面也是加了一个main函数来测试一下。
用数组实现的话,当各项系数比较紧密时效果比较好,但比如2x+3x^200+4x^2000这种多项式的话,浪费的空间就太大了,不过可以试着可以用表来实现。

注:代码改编自《数据结构与算法分析》第二版

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值