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

上传人:沈*** 文档编号:42771372 上传时间:2021-11-27 格式:DOC 页数:23 大小:113.01KB
收藏 版权申诉 举报 下载
数据结构课程设计——多项式及猴子吃桃问题_第1页
第1页 / 共23页
数据结构课程设计——多项式及猴子吃桃问题_第2页
第2页 / 共23页
数据结构课程设计——多项式及猴子吃桃问题_第3页
第3页 / 共23页
资源描述:

《数据结构课程设计——多项式及猴子吃桃问题》由会员分享,可在线阅读,更多相关《数据结构课程设计——多项式及猴子吃桃问题(23页珍藏版)》请在装配图网上搜索。

1、 课 程 设 计 任 务 书 理 学院 数学0902 班 学生 邓吉利(07720090227) 课程设计课题:第一题: 在顺序结构、动态链表结构下实现一元多项式的加法、减法、乘法运算。 设有一元多项式和请实现求: 要求: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语言或C+相关的资料指导教师签字: 教研室主任签

3、字: 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 termfloat 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;q!=NULL;q=q-next)/合并同类项for

6、(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;elser=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;while(h-next!=r)/大的沉底for(p=h;p-next!=r&p

7、!=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)/小的沉底for(p=h;p-next!=r&p!=r;p=p-next)if(p-next-

8、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.zhishu-p-next-data.zhishu1)xi=true;p=p-next;return xi;/*打印多项式,求

9、项数*/void printpolyn(polynomail P)int i;polynomail q;if(P=NULL)coutnext=NULL)coutY=0n;elsecoutnext;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;/打印第一项q=q-next;if(q=NULL)coutdata.xishu!=0&q-data.zhishu!=0)if(q-data.xishu0) cou

10、t+;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;Head=new LNode;r=Head;for(i=0;im;i+) s=new LNode;cout请输入第i+1s-data.xishus-data.zhishu;r-n

11、ext=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=newHead;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;wh

12、ile(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 arrange2(newHead);return newHead;/*3、两多项式相减*/polynomail subpol

13、yn(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=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;

14、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); elsearrange2(newHead);return newHead;/*4两多项式相乘*/polynomail mulpolyn(polynomail pa,polynomail pb) polynomail s,newHead,q,p,r; int j;newHead=new LNode;r=n

15、ewHead;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-data.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!=

16、NULL)/合并同类项newHead=hebing(newHead);return newHead;/*5、销毁已建立的两个多项式*/void delpolyn(polynomail pa,polynomail pb)polynomail p,q;p=pa;while(p!=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

17、;int n,m;while(1)cout1、创建两个一元多项式n;cout2、两多项式相加得一新多项式n;cout3、两多项式相减得一新多项式n;cout4、两多项式相乘得一新多项式n;cout5、销毁已建立的两个多项式n;cout6、退出n;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;elsecout该多项式稠密n;c

18、out请输入第二个多项式:n;coutm;pb=creatpolyn(m);printpolyn(pb);if(judge(pb)cout该多项式稀疏n;elsecout该多项式稠密n;break;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请先创建两个

19、一元多项式!n;break; mulp=mulpolyn(pa,pb);printpolyn(mulp);break;case 5: if(pa=NULL)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

20、 Node public Node next;public Object data;public Node(Object data, 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

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

22、se Node cur = cursor();temp = cur.data;if(cur = Head)Head = cur.next;else if(cur = Tail) Pointer.next = null;Tail = Pointer;reset();elsePointer.next = cur.next;Length -;return temp;/返回当前结点的指针private Node cursor() if(Head = null)return null;else if(Pointer = null)return Head;elsereturn Pointer.next;/

23、返回当前结点的值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(数组实现:);

24、System.out.println(桃子总数: + a0);System.out.println(*);1)package com.zw.tute.list;public class Monkey public static void main(String args) List l = new List();l.array();l.link();2)package com.zw.tute.list;/构成链表的结点定义public class Node public Node next;public Object data;public Node(Object data, Node nex

25、t) this.data = data;this.next = next;/具体方法实现要求3)package com.zw.tute.list;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

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

27、.data;if(cur = Head)Head = cur.next;else if(cur = Tail) Pointer.next = null;Tail = Pointer;reset();elsePointer.next = cur.next;Length -;return temp;/返回当前结点的指针private Node cursor() if(Head = null)return null;else if(Pointer = null)return Head;elsereturn Pointer.next;/返回当前结点的值public Object currentNode

28、() 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.out.println(桃子总数= + a0);System.out.println(*);运行结果:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!