ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:75.75KB ,
资源ID:17958156      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17958156.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构报告一元多项式.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

数据结构报告一元多项式.docx

1、数据结构报告一元多项式数据结构课程设计报告主题:实现一元多项式抽象数据类型学号:20091003768班级:计科四班姓名:熊金莲指导老师:郭艳内容概要(1) 题目要求(2) 实现该一元多项式抽象数据类型的要点(3) 函数模块及各函数可实现的功能简介(4) 具体的源代码(5) 使用说明(6) 实验心得一:题目要求如下:1 构造一个空的多项式2 多项式插入新的一项3 多项式合并同类项4 多项式加法5 多项式乘法6 打印多项式7 计算多项式的值二:构思要点以链表形式创建两个多项式a与b,a与b的加法与乘法用到链式结构的操作。因为系数coef设置为浮点类型,指数expn设置为整形,所以构思是输入多项式

2、的系数和指数时,以0 0为输入结束标志,并设置这一判断语句。在插入函数中,寻找多项式适当的插入位置,可以实现多项式的升序排列,同时也在该插入函数中实现多项式合并同类项的功能。为实现多项式相加相乘定义了相加函数及相乘函数,实现a与b的相加相乘时直接调用。还有就是定义输出函数,打印各多项式。再者计算多项式的值时,先输入x的值,带入多项式计算即可。在主函数中使用switch语句,在此为了让本一元多项式功能步步展示,省去了各个case后的break语句。三:各函数模块1) /*第一,二部分 构造一个空的多项式并用链表插入法创建多项式*/void Insertlinklist(linklist p,li

3、nklist q) /*第一部分 链表插入*/ if(p-coef=0)free(p); /系数为0则该项为空 释放结点空间 else linklist q1,q2; q1=q;q2=q-next; while(q2&p-expnq2-expn)q1=q2;q2=q2-next; /寻找将插入的位置 if(q2&p-expn=q2-expn) q2-coef+=p-coef;free(p); if(q2-coef=0)q1-next=q2-next;free(q2); /系数为0则该项为空 释放结点空间 else p-next=q2;q1-next=p; /指数异于其他项指数时将结点插入 li

4、nklist Createlinklist(linklist head) /*第二部分 创建链表*/ linklist p;int n;float m; p=head=(linklist)malloc(sizeof(struct lnode); p-next=NULL; scanf(%f%d,&m,&n); while(m!=0|n!=0) /当输入为0 0时结束输入 p=(linklist)malloc(sizeof(struct lnode); p-coef=m;p-expn=n; Insertlinklist(p,head); /*调用第一部分函数*/ scanf(%f%d,&m,&n)

5、; return head;2)/*第二部分 销毁链表*/void Destroylinklist(linklist p) linklist q1=p-next,q2=q1-next; while(q2)free(q1);q1=q2;q2=q2-next;3)/*第三部分 打印链表*/void Printlinklist(linklist p) linklist q=p-next; int c=1; if(!q)putchar(0);printf(n);return; while(q) if(q-coef0&c!=1)putchar(+); if(q-coef!=1&q-coef!=-1) p

6、rintf(%f,q-coef); if(q-expn=1)putchar(x); else if(q-expn)printf(x%d,q-expn); else if(q-coef=1) if(!q-expn)putchar(1); else if(q-expn=1)putchar(x); else printf(x%d,q-expn); else if(q-coef=-1) if(!q-expn)putchar(-1); else if(q-expn=1)printf(-x); else printf(-x%d,q-expn); q=q-next; c+; /项数自加1 printf(n)

7、;4)/*第四部分 多项式非空判断*/int Comparelinklist(linklist a,linklist b) if(a&b) if(a-expnb-expn|!b) return -1; else if(!a|a-expnexpn) return 1; else return 0; else if(!a&b) return -1; /多项式a为空 b不为空 else return 1; /多项式不a为空 b为空5)/*第五部分 多项式相加*/linklist Addlinklist(linklist pa,linklist pb) linklist head,x,y,qa=pa-

8、next,qb=pb-next; x=(linklist)malloc(sizeof(struct lnode); x-next=NULL; head=x; while(qa|qb) y=(linklist)malloc(sizeof(struct lnode); switch(Comparelinklist(qa,qb) case -1: y-coef=qb-coef; y-expn=qb-expn; qb=qb-next; break; case 0: y-coef=qa-coef+qb-coef; y-expn=qa-expn; qa=qa-next; qb=qb-next; break

9、; case 1: y-coef=qa-coef; y-expn=qa-expn; qa=qa-next; break; if(y-coef!=0) y-next=x-next; x-next=y; x=y; else free(y); return head;6)/*第六部分 多项式相乘*/linklist Multiplylinklist(linklist pa,linklist pb) linklist qa=pa-next,qb=pb-next,w,v; w=(linklist)malloc(sizeof(struct lnode); w-next=NULL; for(;qa;qa=q

10、a-next) for(qb=pb-next;qb;qb=qb-next) v=(linklist)malloc(sizeof(struct lnode); v-coef=qa-coef*qb-coef; v-expn=qa-expn+qb-expn; Insertlinklist(v,w); /调用Insertlinklist函数合并指数相同的项 return w;7)/*第七部分 多项式赋值*/int Valuelinklist(linklist head,int x) int sum=0,i,j;linklist p; for(p=head-next;p;p=p-next) j=1; f

11、or(i=p-expn;i!=0;) if(icoef)*j; return sum;8)/*将多项式每一项都定义为结构体类型 分别有系数 指数 和指向下一个结构体的指针*/typedef struct lnode float coef; int expn; struct lnode *next;lnode,*linklist; 四:具体的源代码工程分多项式Linklist.h及多项式.cpp两部分/*多项式LinkList*/void Insertlinklist(linklist p,linklist q) /*第一部分 链表插入*/ if(p-coef=0)free(p); /系数为0则

12、该项为空 释放结点空间 else linklist q1,q2; q1=q;q2=q-next; while(q2&p-expnq2-expn)q1=q2;q2=q2-next; /寻找将插入的位置 if(q2&p-expn=q2-expn) q2-coef+=p-coef;free(p); if(q2-coef=0)q1-next=q2-next;free(q2); /系数为0则该项为空 释放结点空间 else p-next=q2;q1-next=p; /指数异于其他项指数时将结点插入 linklist Createlinklist(linklist head) /*第二部分 创建链表*/

13、linklist p;int n;float m; p=head=(linklist)malloc(sizeof(struct lnode); p-next=NULL; scanf(%f%d,&m,&n); while(m!=0|n!=0) /当输入为0 0时结束输入 p=(linklist)malloc(sizeof(struct lnode); p-coef=m;p-expn=n; Insertlinklist(p,head); /*调用第一部分函数*/ scanf(%f%d,&m,&n); return head;void Destroylinklist(linklist p) /*第三

14、部分 销毁链表*/ linklist q1=p-next,q2=q1-next; while(q2)free(q1);q1=q2;q2=q2-next;void Printlinklist(linklist p) /*第四部分 打印链表*/ linklist q=p-next; int c=1; if(!q)putchar(0);printf(n);return; while(q) if(q-coef0&c!=1)putchar(+); if(q-coef!=1&q-coef!=-1) printf(%f,q-coef); if(q-expn=1)putchar(x); else if(q-e

15、xpn)printf(x%d,q-expn); else if(q-coef=1) if(!q-expn)putchar(1); else if(q-expn=1)putchar(x); else printf(x%d,q-expn); else if(q-coef=-1) if(!q-expn)putchar(-1); else if(q-expn=1)printf(-x); else printf(-x%d,q-expn); q=q-next; c+; /项数自加1 printf(n);int Comparelinklist(linklist a,linklist b) /*第五部分 链表

16、非空判断*/ if(a&b) if(a-expnb-expn|!b) return -1; else if(!a|a-expnexpn) return 1; else return 0; else if(!a&b) return -1; /多项式a为空 b不为空 else return 1; /多项式不a为空 b为空linklist Addlinklist(linklist pa,linklist pb)/*第六部分 多项式相加*/ linklist head,x,y,qa=pa-next,qb=pb-next; x=(linklist)malloc(sizeof(struct lnode);

17、 x-next=NULL; head=x; while(qa|qb) y=(linklist)malloc(sizeof(struct lnode); switch(Comparelinklist(qa,qb) case -1: y-coef=qb-coef; y-expn=qb-expn; qb=qb-next; break; case 0: y-coef=qa-coef+qb-coef; y-expn=qa-expn; qa=qa-next; qb=qb-next; break; case 1: y-coef=qa-coef; y-expn=qa-expn; qa=qa-next; bre

18、ak; if(y-coef!=0) y-next=x-next; x-next=y; x=y; else free(y); return head;linklist Multiplylinklist(linklist pa,linklist pb) /*第七部分 多项式相乘*/ linklist qa=pa-next,qb=pb-next,w,v; w=(linklist)malloc(sizeof(struct lnode); w-next=NULL; for(;qa;qa=qa-next) for(qb=pb-next;qb;qb=qb-next) v=(linklist)malloc(s

19、izeof(struct lnode); v-coef=qa-coef*qb-coef; v-expn=qa-expn+qb-expn; Insertlinklist(v,w); /调用Insertlinklist函数合并指数相同的项 return w;int Valuelinklist(linklist head,int x) /*第八部分 多项式带值函数*/ int sum=0,i,j;linklist p; for(p=head-next;p;p=p-next) j=1; for(i=p-expn;i!=0;) if(icoef)*j; return sum;#include#inclu

20、de#includetypedef struct lnode float coef; int expn; struct lnode *next;lnode,*linklist; / 将多项式每一项都定义为结构体类型 分别有系数 指数 和指向下一个结构体的指针 typedef linklist ploynominal;#include 多项式LinkList.hvoid main() int a=1,x; char c; linklist pa=0,pb=0,pc; printf(功能如下:n); printf(1:输入多项式a:n); /该一元多项式所能实现的所有的功能 printf(2:输入

21、多项式b:n); printf(3:输出多项式a:n); printf(4:输出多项式b:n); printf(5:代入x的值计算a:n); printf(6:代入x的值计算b:n); printf(7:输出a+b:n); printf(8:输出a*b:n); printf(9:退出程序n); printf(从操作1开始执行,请输入1:);while(a) scanf(%c,&c); switch(c) /本swith语句中并未写break语句 目的是让程序从功能1到9依次执行下去 case1: printf(请以0 0为结束标志输入多项式a各项系数与指数:); pa=Createlinkli

22、st(pa); /*调用第二部分函数 创建链表pa*/ case2: printf(请以0 0为结束标志输入多项式b各项系数与指数:); pb=Createlinklist(pb); /*调用第二部分函数 创建链表pb*/ case3: printf(多项式a为:); Printlinklist(pa); /*调用第四部分函数 打印多项式a */ case4: printf(多项式b为:); Printlinklist(pb); /*调用第四部分函数 打印多项式b */ case5: printf(请输入x给多项式a赋值:); scanf(%d,&x); printf(x=%d时,a=%dn,

23、x,Valuelinklist(pa,x); /*调用第八部分函数 求多项式a的值*/ case6: printf(请输入x给多项式b赋值:); scanf(%d,&x); printf(x=%d时,b=%dn,x,Valuelinklist(pb,x); /*调用第八部分函数 求多项式b的值*/ case7: pc=Addlinklist(pa,pb); /*调用第六部分函数 实现多项式相加*/ printf(a+b=); Printlinklist(pc); /*调用第四部分函数 打印a+b和的多项式*/ printf(请输入x给a+b和的多项式赋值:); scanf(%d,&x); pr

24、intf(x=%d时,a+b=%dn,x,Valuelinklist(pc,x); /*调用第八部分函数 求多项式a-b的值*/ case8: pc=Multiplylinklist(pa,pb); /*调用第七部分函数 实现多项式相乘*/ printf(a*b=); Printlinklist(pc); /*调用第四部分函数 打印a*b积的多项式*/ printf(请输入x给a*b和的多项式赋值:); scanf(%d,&x); printf(x=%d时,a*b=%dn,x,Valuelinklist(pc,x);/*调用第八部分函数 求多项式a*b的值*/ case9: printf(程序

25、结束!); /*调用第三部分函数 销毁链表*/ Destroylinklist(pa); Destroylinklist(pb); a=0; default:printf(n此选择无效,请重新选择); 五:使用说明 新建工程,将两个部分分别插入适当位置,source files 里插入cpp文件,header files里插入 .h文件。运行操作按输出提示输入即可。输出如下六:实验心得构造一个空的多项式,运用尾插法,将新申请的结点接到最后,用while语句实现输入0 0时停止输入。多项式相乘时将多项式系数coef相乘,将指数expn相加,并调用InsertLinklist实现多项式的合并。本次课程设计我掌握了建立链表和删除链表的方法,懂得了用链表方式实现多项式加法与乘法的方法。同时深切感受到耐心与毅力是调试程序时的必备素质。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2