一元多项式相加减(数据结构)
2017-10-25 15:40
375 查看
/* Name: 类C通用模块 Copyright: BTC 2004 Author: Zhuang Bo Date: 2004 Description: [Constants] TRUE/FALSE/OK/ERROR/INFEASIBLE/DS_OVERFLOW [Types] Status [Functions] max(a,b) min(a,b) read(char/int/float/double/char*) write(char/int/float/double/char*) */ #ifndef _DS_H_ #define _DS_H_ // 函数结果状态代码 const int TRUE = 1; const int FALSE = 0; const int OK = 1; const int ERROR = 0; const int INFEASIBLE = -1; const int DS_OVERFLOW = -2; // Status 是函数的类型,其值是函数结果状态代码 typedef int Status; //基本函数 #define max(a,b) (((a)<(b))?(b):(a)) #define min(a,b) (((a)<(b))?(a):(b)) #include <stdio.h> //不用格式串的输入输出(目的是为了方便书写算法) // 比如输入一个基本类型(char, int, float, double, char*)的 // 变量 x,可以直接用 read(x);输入,而打印则用 write(x);。 // 对于自定义类型,可以继续扩充。 inline void readM(char& e) { getchar(); e = getchar(); } inline void read(char& e) { e = getchar(); } inline void read(int& e) { scanf("%d", &e); } inline void read(float& e) { scanf("%f", &e); } inline void read(double& e) { scanf("%lf", &e); } inline void read(char *e) { gets(e); } inline void read(float &e1, int &e2) {scanf("%f%d",&e1,&e2);} inline void write(char e) { printf("%c", e); } inline void write(int e) { printf("%d", e); } inline void write(float e) { printf("%f", e); } inline void write(double e) { printf("%lf", e); } inline void write(char *e) { printf("%s",e); } #endif // _DS_H_ /* Name: Polynomial.h Author: WangHeng Data: 3 / 4 / 2017 ; Description: 1)调用LinkList.h头文件,用实现链表的各种功能 来创建一元多项式的各种算法实现; 2)调用ds.h来进行基本的输入输出等操作 b627 3)头文件Polynomial.h主要完成一元多项式的各种操作 */ #ifndef POLYNOMIAL_H_INCLUDED #define POLYNOMIAL_H_INCLUDED #ifndef ElemType #define ElemType int //数据类型默认为int #define ELEMTYPE_TAG #endif #include "ds.h" #include "LinkList.h" typedef LinkList polynomial; /************************************************************************* * 基本操作的函数原型说明 *************************************************************************/ //输入m项的系数和指数,建立表示一元多项式的有序链表P void CreatPolyn(polynomial &P, int m); //销毁一元多项式P void DestroyPolyn(polynomial &P); //打印输出一元多项式P void PrintPolyn(polynomial P); //返回一元多项式P中的项数 int PolynLength(polynomial P); //完成多项式相加运算,即:Pa = Pa + Pb,并销毁一元多项式Pb void AddPolyn(polynomial &Pa,polynomial &Pb); //完成多项式相减运算,即:Pa = Pa - Pb,并销毁一元多项式Pb void SubtractPolyn(polynomial &Pa,polynomial &Pb); //完成多项式相乘运算,即:Pa = Pa * Pb,并销毁一元多项式Pb void MultiplyPolyn(polynomial &Pa,polynomial &Pb); //完成多项式的求导函数,即:Pa = Pa' void Derivative(polynomial &P); //完成多项式的积分函数, Pa = ∫Pa' dx void Calculus (polynomial &P); /********************************************************************* * 基本操作的算法描述和实现 *********************************************************************/ //创建一元多项式P,当输入的指数和系数都为0时,输入结束。 // 一元多项式就被创建 。 void CreatPolyn(polynomial &P) { InitList(P); printf(" \n输入系数和指数:\n"); read(P->coef,P->expn); //输入系数和指数 //这里的read读的是ds.h通用模板中的inline void read(float &e1, int &e2) {scanf("%f%d",&e1,&e2);} //通用模板中的read可以是任意类型的 //-------------------TODO------------------// while(P->coef!=0||P->expn!=0){ ListInsert(P,1,P->coef,P->expn); printf("\n输入系数的指数:\n"); read(P->coef,P->expn); } //------------初始化表达式,不断输入系数和指数,直到读到0,0为止----------// } //销毁一元多项式P void DestroyPolyn(polynomial &P) { DestroyList(P); //调用LinkList.h头文件中的销毁函数 } //打印输出一元多项式P void PrintPolyn(polynomial P) { printf("打印一员多项式的各系数和指数\n "); UnionList(P); //用来合并在一元多项式计算结果中具有相同指数的项 PrintLinkList(P); } //返回一元多项式P中的项数 int PolynLength(polynomial P) { return ListLength(P); //合并后的一元多项式的项数 } //完成多项式相加运算,即:Pa = Pa + Pb,并销毁一元多项式Pb void AddPolyn(polynomial &Pa,polynomial &Pb) { UnionList(Pa); //合并一元多项式中具有 UnionList(Pb); //相同指数的项 for (int i=1; i<=ListLength(Pb); i++) { float co; int ex; GetElem(Pb, i, co, ex); if(LocateElem(Pa, ex) > 0) //判断Pa中是否具有Pb中相同指数的项, { //如果有,进行相加 int j = LocateElem(Pa, ex); //记录Pa中相同项的位置 int k = 0; polynomial s = Pa; while(k < j) //查找这一位置 { //-------------------TODO------------------// s=s->next; k++; } s->coef += co; //系数项相加 } else //不存在相同的指数,将Pb中的该项插入Pa ListInsert(Pa, 1, co, ex); } DestroyList(Pb); //销毁Pb } //完成多项式相减运算,即:Pa = Pa - Pb,并销毁一元多项式Pb void SubtractPolyn(polynomial &Pa,polynomial &Pb) { UnionList(Pa); //合并一元多项式中具有 UnionList(Pb); //相同指数的项 for (int i=1; i<=ListLength(Pb); i++) { float co; int ex; GetElem(Pb, i, co, ex); if(LocateElem(Pa, ex) > 0) //判断Pa中是否具有Pb中相同指数的项, { //如果有,进行相加 int j = LocateElem(Pa, ex); //记录Pa中相同项的位置 int k = 0; polynomial s = Pa; while(k < j) //查找这一位置 { //-------------------TODO------------------// s=s->next; k++; } s->coef -= co; //系数项相加 } else //不存在相同的指数,将Pb中的该项插入Pa ListInsert(Pa, 1, co, ex); } DestroyList(Pb); //销毁Pb } //完成多项式相乘运算,即:Pa = Pa * Pb,并销毁一元多项式Pb void MultiplyPolyn(polynomial &Pa,polynomial &Pb) { UnionList(Pa); //合并一元多项式中具有 UnionList(Pb); //相同指数的项 for (int i=1; i<=ListLength(Pb); i++) { float co; int ex; GetElem(Pb, i, co, ex); if(LocateElem(Pa, ex) > 0) //判断Pa中是否具有Pb中相同指数的项, { //如果有,进行相加 int j = LocateElem(Pa, ex); //记录Pa中相同项的位置 int k = 0; polynomial s = Pa; while(k < j) //查找这一位置 { //-------------------TODO------------------// s=s->next; k++; } s->coef *= co; //系数项相加 s->expn+=ex; } else //不存在相同的指数,将Pb中的该项插入Pa ListInsert(Pa, 1, co, ex); } DestroyList(Pb); //销毁Pb } //完成多项式的求导函数,即:Pa = Pa' void Derivative(polynomial &P) { } //完成多项式的积分函数, Pa = ∫Pa' dx void Calculus (polynomial &P) { } #ifdef ELEMTYPE_TAG #undef ElemType #undef ELEMTYPE_TAG #endif #endif // POLYNOMIAL_H_INCLUDED
相关文章推荐
- 数据结构 一元多项式相加
- 一元多项式的表示及相加 数据结构
- 数据结构 一元多项式的创建、显示、相加、相减、相乘
- 数据结构 一元多项式的表示及相加
- 【重学数据结构】一元多项式的表示及相加
- 数据结构学习笔记 --- 线性表 (一元多项式的表示及相加)
- PHP数据结构之四 一元多项式的相加PHP单链实现
- 数据结构(12)线性表之C++实现一元多项式相加
- 数据结构学习笔记 --- 线性表 (一元多项式的表示及相加)
- 一元多项式的相加 数据结构链表实现
- 数据结构 - 一元多项式相加减(C语言)
- 重学数据结构(一):链表基本操作与一元多项式相加
- 数据结构:一元多项式相加和相减
- 重学数据结构001——链表基本操作与一元多项式相加
- 【数据结构 链表的应用】一元多项式相加及相乘 和对问题的分析
- 重学数据结构001――链表基本操作与一元多项式相加
- c语言版数据结构(奇迹冬瓜)-链表实战(3)解升序排列的一元多项式相加
- 数据结构实现一元多项式相加
- 一元多项式表示和相加
- 用C写的一元多项式相加