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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计多项式及猴子吃桃问题.docx

1、数据结构课程设计多项式及猴子吃桃问题天津职业技术师范大学课 程 设 计 任 务 书 理 学院 数学0902 班 学生 邓吉利(0772*) 课程设计课题:第一题: 在顺序结构、动态链表结构下实现一元多项式的加法、减法、乘法运算。 设有一元多项式和请实现求: 要求:1)首先判定多项式是否稀疏; 2)分别采用顺序和动态存储结构实现; 3)结果中无重复阶项、无零系数项; 4)要求输出结果的升幂和降幂两种排列情况。第二题:猴子吃桃问题: 有一群猴子摘了一堆桃子,它们每天都吃当前桃子的一半再多吃一个,到了第10天就剩下一个桃子,用多种方法实现求出原来这群猴子共摘了多少桃子。要求:1)采用数组数据结构实现

2、上述求解; 2)采用链式数据结构。一、课程设计工作日自 2012 年 2 月 21 日至 2012 年 3 月 2 日二、同组学生: 无 。三、课程设计任务要求(包括课题来源、类型、目的和意义、基本要求、完成时间、主要参考资料等):课题来源:教师提供课题类型:设计目的和意义:通过数据结构课程设计掌握在C语言中结构体的建立和使用,并能用合适的数据结构设计大型程序完成时间:2012年2月29日主要参考资料:1 严蔚敏数据结构(C语言版)清华大学出版社,20072 严蔚敏数据结构题集(C语言版)清华大学出版社,20073 谭浩强C语言程序设计清华大学出版社,20054 与所用编程环境相配套的C语言或

3、C+相关的资料指导教师签字: 教研室主任签字: 2012年2月29日天津职业技术师范大学课 程 设 计 评 审 表 理 学院 数学0902 班 学生 邓吉利 设计任务完成情况及指导教师评语答辩情况评定成绩成绩: 指导教师签字: 日期: 教研室主任: 院长签字: 日期: 日期: 一、设计分析1 顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。可以分为几个模块:输入模块、输出模块(升幂降幂)、数据处理模块(多项式的加减乘)、主程序模块。2 在程序过程中加入汉字提示符,让读者清楚明白的操作该程序。运行程序时看起来简洁有序,操作简单明了。3 程序执行时的命令:选择创建两个一元多项式输入第

4、一个一元多项式的项数依次输入一元多项式的系数和指数以相同方式输入第二个一元多项式选择操作方式选择降幂或升幂排序输出结果是否退出4.测试数据。输入的一元多项式系数指数分别为7 0,3 1,9 8,5 17和8 1,22 7,-9 8。加法结果为;升幂 降幂减法结果为:升幂 降幂乘法结果为:升幂 降幂二、具体设计概要1、数据结构的设计 在该程序中分别分为顺序存储和链式存储结构。2、算法的设计本程序主要分为四大模块主程序模块输入模块:通过Getpolyn函数输入输出模块(升幂降幂):PrintPolyn函数实现输出数据处理模块(多项式的加减乘):通过一元多项式的Polynomial基本操作实现3、抽

5、象数据类型的设计一元多项式抽象数据类型的定义:抽象数据类型Polynomial的定义:三、详细程序设计及运行结果:第一题程序及运行结果:#includeusing namespace std;struct term float xishu; /系数 int zhishu; /指数;struct LNode term data; /term多项式值 struct LNode *next;typedef LNode* polynomail;/*合并同类项*/polynomail hebing(polynomail Head) polynomail r,q,p,Q; for(q=Head-next;

6、q!=NULL;q=q-next)/合并同类项 for(p=q-next,r=q;p!=NULL;) if(q-data.zhishu=p-data.zhishu) q-data.xishu=q-data.xishu+p-data.xishu; r-next=p-next; Q=p;p=p-next; delete Q; else r=r-next; p=p-next; return Head;/*由小到大排列*/void arrange1(polynomail pa) polynomail h=pa,p,q,r; for(p=pa;p-next!=NULL;p=p-next);r=p; wh

7、ile(h-next!=r)/大的沉底 for(p=h;p-next!=r&p!=r;p=p-next) if(p-next-data.zhishup-next-next-data.zhishu) q=p-next-next; p-next-next=q-next; q-next=p-next; p-next=q; r=p;/r指向参与比较的最后一个,不断向前移动 /*由大到小排序*/void arrange2(polynomail pa) polynomail h=pa,p,q,r; for(p=pa;p-next!=NULL;p=p-next); r=p; while(h-next!=r)

8、/小的沉底 for(p=h;p-next!=r&p!=r;p=p-next) if(p-next-data.zhishunext-next-data.zhishu) q=p-next-next; p-next-next=q-next; q-next=p-next; p-next=q; r=p;/r指向参与比较的最后一个,不断向前移动 bool judge(polynomail Head) arrange2(Head); polynomail p; p=Head-next; bool xi=false; while(p!=NULL&p-next!=NULL&!xi) if(p-data.zhis

9、hu-p-next-data.zhishu1) xi=true; p=p-next; return xi;/*打印多项式,求项数*/void printpolyn(polynomail P) int i; polynomail q; if(P=NULL) coutnext=NULL) coutY=0n; else coutnext; i=1; if(q-data.xishu!=0&q-data.zhishu!=0) coutdata.xishuXdata.zhishu; i+; if(q-data.zhishu=0&q-data.xishu!=0) coutdata.xishu;/打印第一项

10、q=q-next; if(q=NULL) coutdata.xishu!=0&q-data.zhishu!=0) if(q-data.xishu0) cout+; coutdata.xishuXdata.zhishu; i+; if(q-data.zhishu=0&q-data.xishu!=0) if(q-data.xishu0) cout+; coutdata.xishu; q=q-next; if(q=NULL) coutn; break; /*1、创建并初始化多项式链表*/polynomail creatpolyn(int m) polynomail Head,r,s; int i;

11、Head=new LNode; r=Head; for(i=0;im;i+) s=new LNode; cout请输入第i+1s-data.xishus-data.zhishu; r-next=s; r=s; r-next=NULL; if(m1) Head=hebing(Head); return Head;/*2、两多项式相加*/polynomail addpolyn(polynomail pa,polynomail pb) polynomail s,newHead,q,p,r;int j; p=pa-next; q=pb-next; newHead=new LNode; r=newHea

12、d; while(p) s=new LNode; s-data.xishu=p-data.xishu; s-data.zhishu=p-data.zhishu; r-next=s; r=s; p=p-next; while(q) s=new LNode; s-data.xishu=q-data.xishu; s-data.zhishu=q-data.zhishu; r-next=s; r=s; q=q-next; r-next=NULL; if(newHead-next!=NULL&newHead-next-next!=NULL)/合并同类项 newHead=hebing(newHead);

13、cout升序 1 , 降序 2n; coutj; if(j=1) arrange1(newHead); else arrange2(newHead); return newHead;/*3、两多项式相减*/polynomail subpolyn(polynomail pa,polynomail pb) polynomail s,newHead,q,p,r; int j; p=pa-next;q=pb-next; newHead=new LNode; r=newHead; while(p) s=new LNode; s-data.xishu=p-data.xishu; s-data.zhishu

14、=p-data.zhishu; r-next=s; r=s; p=p-next; while(q) s=new LNode; s-data.xishu=-q-data.xishu; s-data.zhishu=q-data.zhishu; r-next=s; r=s; q=q-next; r-next=NULL; if(newHead-next!=NULL&newHead-next-next!=NULL)/合并同类项 newHead=hebing(newHead); cout升序 1 , 降序 2n; coutj; if(j=1) arrange1(newHead); else arrange

15、2(newHead); return newHead;/*4两多项式相乘*/polynomail mulpolyn(polynomail pa,polynomail pb) polynomail s,newHead,q,p,r; int j; newHead=new LNode; r=newHead; for(p=pa-next;p!=NULL;p=p-next) for(q=pb-next;q!=NULL;q=q-next) s=new LNode; s-data.xishu=p-data.xishu*q-data.xishu; s-data.zhishu=p-data.zhishu+q-d

16、ata.zhishu; r-next=s; r=s; r-next=NULL; cout升序 1 , 降序 2n; coutj; if(j=1) arrange1(newHead); else arrange2(newHead); if(newHead-next!=NULL&newHead-next-next!=NULL)/合并同类项 newHead=hebing(newHead); return newHead;/*5、销毁已建立的两个多项式*/void delpolyn(polynomail pa,polynomail pb) polynomail p,q; p=pa; while(p!=

17、NULL) q=p; p=p-next; free(q); p=pb; while(p!=NULL) q=p; p=p-next; free(q); cout两个多项式已经销毁n;void main() polynomail pa=NULL,pb=NULL; polynomail addp=NULL,subp=NULL,mulp=NULL; int n,m; while(1) cout1、创建两个一元多项式n; cout2、两多项式相加得一新多项式n; cout3、两多项式相减得一新多项式n; cout4、两多项式相乘得一新多项式n; cout5、销毁已建立的两个多项式n; cout6、退出n

18、; coutn; switch(n) case 1: if(pa!=NULL) cout已建立两个一元多项式,请选择其他操作!; break; cout请输入第一个多项式:n; coutm; while(m=0) coutm; pa=creatpolyn(m); printpolyn(pa); if(judge(pa) cout该多项式稀疏n; else cout该多项式稠密n; cout请输入第二个多项式:n; coutm; pb=creatpolyn(m); printpolyn(pb); if(judge(pb) cout该多项式稀疏n; else cout该多项式稠密n; break;

19、 case 2: if(pa=NULL) cout请先创建两个一元多项式!n; break; addp=addpolyn(pa,pb); printpolyn(addp); break; case 3: if(pa=NULL) cout请先创建两个一元多项式!n; break; subp=subpolyn(pa,pb); printpolyn(subp); break; case 4: if(pa=NULL) cout请先创建两个一元多项式!n; break; mulp=mulpolyn(pa,pb); printpolyn(mulp); break; case 5: if(pa=NULL)

20、cout请先创建两个一元多项式!n; break; delpolyn(pa,pb); pa=pb=NULL; break; case 6: delpolyn(pa,pb); exit(0); s第二题程序及运行结果:public class Monkey /主函数 public static void main(String args) List l = new List(); l.array(); l.link(); /构成链表的结点定义public class Node public Node next; public Object data; public Node(Object dat

21、a, Node next) this.data = data; this.next = next; public class List private Node Head = null; private Node Tail = null; private Node Pointer = null; private int Length = 0; /在当前结点前插入一个结点,并使其成为当前结点 public void insert(Object d) Node e = new Node(d, null); if(Length = 0) Tail = e; Head = e; else Node t

22、emp = cursor(); e.next = temp; if(Pointer = null) Head = e; else Pointer.next = e; Length +; /将当前结点移出链表,下一个结点成为当前结点,如果移出的结点是最后一个结点,则第一个结点成为当前结点 public Object remove() Object temp; if(Length = 0) return 0; else if(Length = 1) temp = Head.data; deleteAll(); else Node cur = cursor(); temp = cur.data; i

23、f(cur = Head) Head = cur.next; else if(cur = Tail) Pointer.next = null; Tail = Pointer; reset(); else Pointer.next = cur.next; Length -; return temp; /返回当前结点的指针 private Node cursor() if(Head = null) return null; else if(Pointer = null) return Head; else return Pointer.next; /返回当前结点的值 public Object currentNode() Node temp = cursor(); return temp.data; public void deleteAll() Head = null; Tail = null; Pointer = null; Length = 0; public void reset() Pointer = null; /链表实现 public void link() int s = 0; List a=new List (); for(int i=1;i=0; i-) ai = 2 * ai+1 +2; System.out.println(数组实现:); System.o

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

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