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

来源:互联网 发布:淘宝上的自行车怎么样 编辑:程序博客网 时间:2024/04/25 19:47

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

头文件代码:

#ifndef POLYNOMIAL_H_INCLUDED#define POLYNOMIAL_H_INCLUDED#define MaxDegree 100struct 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这种多项式的话,浪费的空间就太大了,不过可以试着可以用表来实现。

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

0 0
原创粉丝点击