链表实践—多项式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
- 链表实践—多项式ADT(数组实现)
- 多项式ADT的数组实现
- 多项式ADT的链表实现
- 两个一元多项式相乘,数组与链表实现
- ADT多项式
- 用数组实现多项式
- 多项式相乘(链表实现)
- class多项式(链表实现)
- 单链表表示多项式ADT&多项式加法
- 链表实现多项式相加
- 链表实现多项式相加
- 一元多项式--链表实现
- [数据结构] 链表实现多项式
- 链表实现多项式操
- 一元多项式链表实现
- 链表实现多项式相加
- 动态链表实现多项式
- ADT栈的数组实现
- java代码实现二叉树的遍历
- Python 数据处理扩展包: pandas 模块的DataFrame介绍(创建和基本操作)
- 58. Length of Last Word
- 国庆节 班级管理系统
- Uva1625 -Color Length(DP)
- 链表实践—多项式ADT(数组实现)
- 选择你的compileSdkVersion, minSdkVersion, 和targetSdkVersion
- 策略模式
- NoSQL_MongoDB_MongoDB的写安全机制
- linux压缩解压
- 智能小车的制作(五)
- 绿色instance client连接Oracle服务器的配置方法
- Nginx的location匹配问题
- Android View绘制原理的初步理解