收藏 分销(赏)

数据结构课程设计-多元多项式的操作.docx

上传人:s4****5z 文档编号:8951867 上传时间:2025-03-09 格式:DOCX 页数:5 大小:18.33KB
下载 相关 举报
数据结构课程设计-多元多项式的操作.docx_第1页
第1页 / 共5页
数据结构课程设计-多元多项式的操作.docx_第2页
第2页 / 共5页
点击查看更多>>
资源描述
数 据 结 构 课 程 设 计 姓名:杨文杰 班级:2013130301 专业:计算机科学与技术 学号:201313030123 实验报告——5.3 1. 实验题目:多元多项式的操作。 2. 问题描述: (1)实现多元多项式的求函数值、求偏导函数和加法运算。 (2)稀疏多元多项式采用广义表存储; (3)输入要求:输入多元多项式的变元个数,各项按(系数,指数)对输入,可按任意顺序输入各项,相同指数项可以多次输入,由程序合并同类项,以(0,0,…,0)结束输入,建立该多项式的广义表存储结构; 例如:输入为 3 //变元个数为3 3 2 1 3 //3x2yz3 -4 1 0 5 //-4xz5 2 2 0 3 //2 xyz3 0 0 0 0 (4)输出要求:按多项式的形式输出,如上面输入的多项式输出为:(2x+3x^2)yz^3-4xz^5; (5)求多元多项式的函数值:从键盘输入各个变元的当前值; (6)求多元多项式的偏导函数,仍然采用广义表存储,并输出; (7)多元多项式的加、减、乘法运算。 3.概要设计 (1)存储结构的选择:由于是多元稀疏多项式的基本运算,用顺序表存储浪费存储空间,故采用广义表表示稀疏多项式。用广义表存储多元多项式P(x1,x2,..,xn),实为按变元xn的升幂顺序建立一个带头结点的有序链表,链表中的每个节点结构有两种:(1,exp,hp,tp),其中1表示表结点,即xn的系数是一个多项式,hp指向其系数多项式的链表(也是一个与xn的有序表同构的链表),tp指向xn的下一幂次项的结点;(0,coef,exp,tp),0表示原子结点,即xn的exp幂次项的系数是常数。 (2)多项式的结点抽象数据类型: ADT PNode{ 数据对象:D={ai|ai∈TermSet,i=1,2,3,…,n,n≥0,TermSet中的每个元素是多项式的一项(系数,指数)} 数据关系:R={<ai-1,ai,>|ai-1,ai∈D,i=2,3,4,…,n,且ai-1的指数小于ai 的指数,即按指数递增} 基本操作: PNode(P); 构造一个节点P。 PNode(const PNode &pa); 通过Pa构造节点P。 PNode & operator=(const PNode &pa); 运算符重载 ClearNode(); 清除节点P 实现多项式的乘法:La*=Lb,并将Lb置空。 }ADT PNode; (3)存放系数指数对的结构体定义: struct Term{ double coef; 系数。 int expn[MAXVAR+1]; 指数。 }struct Term; (4)多元多项式的广义表的ADT定义: ADT PList{ 数据对象:D={ai|i=2,3,…,n,n≥0;ai∈D0 或者属于某个广义表,D0是某个数据对象} 数据关系:R={<ai-1,ai,>|ai-1,ai∈D,i=2,3,4,…,n} 基本操作: InitPList(&LS); 建立空的广义表LS。 GreatePList(&LS); 建立广义表LS。 DestroyPList(&LS); 销毁广义表LS。 CopyPList(&LS,L); 由广义表L复制到广义表LS。 PListEmpty(LS); 判断广义表LS是否是空表。 GetHead(LS); 取广义表LS的表头。 InsertInOrder(PNode * &p,PNode *pb); 将pb头结点后各项插入到p中使P仍递增有序并合并同类项。 PList &operator =(const PList &L); 重载辅赋值运算符。 PList &operator +=(PList &L); 重载复合赋值运算符。 PList &operator -=(PList &Lb); 重载复合赋值运算符:La-=Lb。 PList &operator *=(double a); 重载复合赋值运算符:La*=Lb。 void Derivative(); 求偏导函数。 void Display(PNode *p)const; 输出多项式。 double Value(PNode *p,double *value); 求多项式在x处的值 } ADT GList 4. 详细设计 (1)广义表结点类: class PNode //多项式的广义表结点类 { friend class PList; //将广义表类说明为友元类 public: int tag; //标志域,原子结点tag=0,表结点tag=1 int exp; //指数域 PNode *tp; //指向相同层的下一个链接点 union{double coef; //原子结点使用coef域存放字符 PNode *hp;}; //表结点使用hp指针指向下层单链表的第一个结点 PNode():tag(1),tp(NULL),hp(NULL){}; //构造函数 PNode(const PNode &pa); PNode(int t,int ex):tag(t),exp(ex),tp(NULL),hp(NULL){}; PNode & operator=(const PNode &pa); //运算符重载 void ClearNode(); }; (2)广义表类 class PList //多元多项式的广义表类 { friend PList & operator +(PList &La,PList &Lb); //重载加法运算 friend PList & operator -(PList &La,PList &Lb); //重载减法运算 friend PList & operator *(PList &La,double a); //重载乘法运算 private: PNode *head; //表头指针 void CreateTerm(PNode * &h,Term x,int n); //根据x创建不带头结点的广义表 void InsertInOrder(PNode * &p,PNode *pb); //pb头结点后各项有序插入到p中 void CopyPList(PNode *L,PNode * &T); //由广义表L复制得到T递归函数 public: PList(int x=0){head=new PNode;head->tag=1;head->exp=x;};//构造函数 PList(const PList &L){head=L.head;}; //拷贝构造函数 PList &operator =(const PList &L); PList &operator +=(PList &L); //重载复合赋值运算符 PList &operator -=(PList &Lb); //重载复合赋值运算符:La-=Lb PList &operator *=(double a); //重载复合赋值运算符:La*=Lb void MUL(PNode *p,double a); double Value(PNode *p,double *value); void Derivative(); //求偏导函数 void Display(PNode *p)const; //输出多项式 PNode *Head(){return head;} void CreatePList(); bool IsEmpty(){return !head->hp;} }; 5.调试分析
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服