【数据结构与算法】第三章 表c实现应用一-----------多项式

可以用表来定义一种关于一元多项式的抽象数据类型。若最高幂数比较小,使用数组来存储幂系数是比较简单的;但如果出现幂数跨度比较大的情况,使用链表结构存储是比较合适的。具体内容参见《数据结构与算法分析:c语言描述》第三种。这里先实现了数组存储数据的简单情况。代码如下:

 
  
#include < stdio.h >
#include
< stdlib.h >

#define MaxDegree 10

typedef
struct _Polynomial
{
int CoeffArray[ MaxDegree + 1 ];
int HighPower;
}
* Polynomial;


// Max
int Max( int a, int b )
{
if ( a >= b )
return a;
else
return b;
}

// zero
void
ZeroPolynomial( Polynomial Poly )
{
int i;
for ( i = 0 ; i <= MaxDegree; i ++ )
Poly
-> CoeffArray[ i ] = 0 ;
Poly
-> HighPower = 0 ;
}

// add
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];
}

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

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

if ( PolyProd -> HighPower > MaxDegree )
perror(
" Exceeded array size.\n " );
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];
}

// print
void
PrintPolynomial(
const Polynomial Poly )
{
int i;
printf(
" F(x) = " );
for ( i = 0 ; i <= Poly -> HighPower; i ++ )
{
if ( Poly -> CoeffArray[i] == 0 )
continue ;
else
{
printf(
" %d*X[%d] " , Poly -> CoeffArray[i], i );
if ( i != Poly -> HighPower - 1 )
printf(
" + " );
}
}
}

/* ************************************************************ */
int main()
{
int i;
Polynomial poly1, poly2, polysum, polyprod;

poly1
= ( Polynomial )malloc( sizeof ( struct _Polynomial ) );
poly2
= ( Polynomial )malloc( sizeof ( struct _Polynomial ) );
polysum
= ( Polynomial )malloc( sizeof ( struct _Polynomial ) );
polyprod
= ( Polynomial )malloc( sizeof ( struct _Polynomial ) );

ZeroPolynomial( poly1 );
ZeroPolynomial( poly2 );

for ( i = 0 ; i < 5 ; i ++ )
{
poly1
-> CoeffArray[i] = i ;
poly2
-> CoeffArray[i] = i + 1 ;
}

poly1
-> HighPower = i - 1 ;
poly2
-> HighPower = i;

AddPolynomial( poly1, poly2, polysum );
MultPolynomial( poly1, poly2, polyprod );

printf(
" \npoly1: " );
PrintPolynomial( poly1 );
printf(
" \npoly2: " );
PrintPolynomial( poly2 );
printf(
" \npolysum: " );
PrintPolynomial( polysum );
printf(
" \npolyprod: " );
PrintPolynomial( polyprod );
printf(
" \n " );
}

转载于:https://www.cnblogs.com/qi09/archive/2011/05/31/2065165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值