1 /*
2 多项式ADT数组实现
3 */
4
5
6 /*接口声明*/
7 #ifndef _POLYNOMIAL_H
8 #define _POLYNOMIAL_H
9
10 #define MaxDegree 100 //指定多项式的最大指数
11
12 struct node
13 {
14 int CoeffArray[ MaxDegree + 1 ];
15 int HighPower;
16 };
17
18 struct node * Polynomial;
19
20 /*操作集*/
21
22 /*将多项式初始化为零*/
23 void ZeroPolynomial( Polynomial Poly );
24
25 /*两个多项式相加*/
26 void AddPolynomial( const Polynomial Poly1, const Polynomial Poly2, Polynomial PolySum );
27
28 /*两个多项式相乘*/
29 void MulPolynomial( const Polynomial Poly1, const Polynomial Poly2, PolyNomial PolyProd );
30
31
32
33
34 /*接口实现*/
35 #include <stdlib.h>
36 #include "polynomial.h"
37
38 int Max( int A, int B );
39
40 void ZeroPolynomial( Polynomial Poly )
41 {
42 for ( int i = 0; i <= MaxPolynomial; i++ )
43 Poly->CoeffArray[ i ] = 0;
44 Poly->HighPower = 0;
45 }
46
47 void AddPolynomial( const Polynomial Poly1, const Polynomial Poly2, Polynomial PolySum )
48 {
49 ZeroPolynomial( PolySum );
50 PolySum->HighPower = Max( Poly1->HighPower, Poly2->HighPower );
51
52 while ( int i = PolySum->HighPower; i >= 0; i-- )
53 PolySum->CoeffArray[ i ] = Poly1->CoeffArray[ i ] + Poly2->CoeffArray[ i ];
54 }
55
56 void MulPolynomial( const Polynomial Poly1, const Polynomial Poly2, Polynomial PolyProd )
57 {
58 PolyProd->HighPower = Poly1->HighPower + Poly2->HighPower;
59 if ( PolyProd->HighPower > MaxDegree )
60 {
61 printf( "数组溢出,退出程序\n" );
62 exit( 1 );
63 }
64
65 for ( int i = 0; i <= Poly1->HighPower; i++ )
66 for ( int j = 0; j <= Poly2->HighPower; j++ )
67 PolyProd->CoeffArray[ i + j ] += Poly1->CoeffArray[ i ] * Poly2->CoeffArray[ j ];
68 }
69
70 int Max( int A, int B )
71 {
72 return A > B ? A : B;
73 }