兰州理工大学数据结构课程设计-猴子吃桃子问题; 跳马问题;通过单字符置换可以将一个单词改为另一个单词.pdf
《兰州理工大学数据结构课程设计-猴子吃桃子问题; 跳马问题;通过单字符置换可以将一个单词改为另一个单词.pdf》由会员分享,可在线阅读,更多相关《兰州理工大学数据结构课程设计-猴子吃桃子问题; 跳马问题;通过单字符置换可以将一个单词改为另一个单词.pdf(27页珍藏版)》请在咨信网上搜索。
1、实践教学兰州理工大学计算机与通信学院2014年秋季学期数据结构课程设计题 目:猴子吃桃子问题;跳马问题;通过单字符置换可以将一个 单词改为另一个单词专业班级:12级信息与计算科学(2)班姓 名:_学 号:12540236指导教师:_成 绩:_目录摘要.1一.猴子吃桃问题.21.采用类语言定义相关的数据类型.22.算法设计.23.调试分析.34.测试结果.45.源程序(带注释).6二.跳马问题.101.采用类语言定义相关的数据类型.102.算法设计.103.调试分析.114.测试结果.115.源程序(带注释).13三.通过单字符置换可以将一个单词改为另一个单词.161.采用类语言定义相关的数据类
2、型.162.算法设计.163.调试分析.184.测试结果.185.源程序(带注释).19总结.23参考文献.24致谢.25摘要本程序主要主要解决猴子吃桃问题,跳马问题,通过单字符置换可以将一个 单词改为另一个单词。猴子吃桃问题是分别采用数组数据结构,链式数据结构以 及递归方法根据猴子每天吃的桃子数来求解一群猴子摘的桃子数。跳马问题也称 为骑士周游问题,是算法的设计中的经典问题。如果有这样一种走法,则称所走 的这条线为马的周游路线。在8*8的方格棋盘中马的行走规则从棋盘的某一方格 出发,开始在棋盘上周游,如果能不重复地走遍棋盘上的每一个方格,这样的一 条周游路线在数学上被称为国际象棋棋盘上马的哈
3、密尔顿链。通过单字符置换可 以将一个单词改为另一个单词是假设存在一个5字母单词的字典,给出一个算法 确定单词A是否可以通过一系列的单字符置换转换为单词B,并且如果可以的话,输出相应的单词序列。正如bleed通过序列bleed、blend、blond、blood转换为bloodo 这些程序主要功能是加深我们对算法与数据结构中存储,线性表和栈的理解。让 我们对算法与数据结构有个更深刻的认识。关键词:猴子吃桃;跳马;字符转换;数据结构第1页共25页一.猴子吃桃问题有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到 了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个
4、桃 子。要求:1)采用数组数据结构实现上述求解;2)采用链式数据结构实现上述求 解;3)采用递归实现上述求解。1.采用类语言定义相关的数据类型typedef struct Node(int i;intk;数据域struct Node*next;/指针域 Node,*PNode;定义一个指针用于链表求解2.算法设计1.一维数组解决。建立一个一维数组a10从第九天开始算起令a9=l利用for循环计算前八 天猴子吃的桃子数目并同时将后一天吃的桃子数赋值到前一天。最后即可得出猴 子一共吃的桃子数。2.递归函数解决:定义一个整形函数DiGui使用if函数控制是否调用函数本身。桃子数等与一 这说明第九天吃
5、了一个桃子函数便可以结束。如果桃子数不为一则一直调用函数 本身知道调用结束。3链式数据结构解决:定义头指针PL P2指针指向头结点。P2指针负责传值进行循环。利用for函 数进行循环。并将后一天的之赋值给前一天。最后便可得到猴子吃的总的桃子数。主函数控制各子函数的调用流程如图1T所示第2页共25页开始图IT主控制程序流程图3.调试分析a、调试中遇到的问题及对问题的解决方法;根据第十天所剩桃子个数,采用倒推方法,递归的求出第九天,第八天,第七 天.直到算出刚开始猴子拥有桃子的总数。解决方法主要是用递归算法采用数组存储方法。b、算法的时间复杂度和空间复杂度。通过1、2、3数字键选择计算方法时间复杂
6、度为0(n),空间复杂度为0(1)第3页共25页4.测试结果1)执行程序进入主菜单,如图1T所示图1-2主菜单2)输入1用数组方法求解,如图1-2所示图1-3数组求解第4页共25页3)输入2用链表求解,如图1-3所示图1-4链表求解4)输入3用递归方法求解,如图4所示图1-5递归求解第5页共25页5)输入4退出程序,如图1-5所示图1-6退出界面5.源程序(带注释)#include#includetypedef struct Nodeint i;int k;/数据域struct Node*next;/指针域)Node,*PNode;定义一个指针用于链表求解 int ShuZu。/数组求解(in
7、t i,a10;a9=l;for(i=8;i=0;i-)ai=(ai+l+l)*2;第6页共25页return a0;int DiGui(int i,int j,int k)递归求解(if(j=i)return k;k=(k+l)*2;DiGui(i,j-l,k);)int LianBiao。/链表求解(int i;PNode pl,p2;if(p 1=(PNode)malloc(sizeof(Node)=NULL)生成新的结点 printf(分配内存失败!)exit(O);)pl-i=10;pl-k=l;pl-next=NULL;for(i=9;i0;i-)if(p2=(PNode)mall
8、oc(sizeof(Node)=NULL)printf(分配内存失败!)exit(O);)p2-i=9;p2-k=(pl-k+l)*2;p2-next=NULL;free(pl);pl=p2;第7页共25页return pl-k;int main。/主函数 char n;int i,j,k;i=ShuZu();DiGui(l,10,l);k=LianBiao();for(;)printf(t*欢迎进入猴子吃桃问题*n printf(t*1 数组方法*w”)printf(t*2 链表方法*q”)printf(t*3 递归方法*q”)printf(t*4 退 出*4)printf(t 输入选项(1
9、 4):);scanf(%s,&n);switch(n)case T:printf(n);printf(tttt数组方法得出的总桃子数为:%dn,i);printf(n);printf(tttt*如需继续进入主菜单请按回车键*n);break;case 2:printf(n);printf(tttt链表方法得出的总桃子数为:%dn,k);第8页共25页printf(n);printf(tttt*如需继续进入主菜单请按回车键*n);break;case 3:printf(n);printf(tttt递归方法得出的总桃子数为:%dn,j);printf(n);primf(tttt*如需继续进入主菜
10、单请按回车键*n);break;case 4:printf(n);printf(谢谢使用本系统人0);exit(O);break;default:printf(n);printf(n请键入一个正确的选择)printf(n);printf(tttt*如需继续进入主菜单请按回车键*n);break;getchar();getchar();system(cls);)第9页共25页二.跳马问题要求在64个国际象棋格子,任意位置放一个马,如何不重复地把格子走完。1.采用类语言定义相关的数据类型include typedef struct DataTypeint board8 8;/定义一个 int 的二
11、位数组 boardint step;/*走的步数*/int test;/*可以遍历成功的次数*/SeqList;SeqList L;int start;int del tar=-2,-1,1,2,2,1,-1,-2;int deltac=1,2,2,1,-1,-2,-2,T;/*马的可能走法对当前位置的 横纵增量*/2.算法设计该问题分为两步首先 在8*8的棋盘上的任意一 个位置上放一个马(r,c),求马所在位置的出口数。其次选择出口最少的那个 位置。函数执行流程图如图2-1所示图2 T函数执行流程图第10页共25页3.调试分析a、调试中遇到的问题及对问题的解决方法对于跳马问题,一般情况下,可
12、以采用回溯法找解,但对于该问题来说,只 要找到一种解法即可。然而,在写该问题的程序时,有时得到的不止一种,这就 和“贪婪法”的思想相悖,在经过反复的思考和查阅资料之后,才明白须将if(step64)放在dowhile(step=64)循环语句之外,才能达到用贪婪法”解 决该问题的目的。b、算法的时间复杂度和空间复杂度时间复杂度的计算是按照运算次数来进行的,关于空间复杂度的计算是在程 序运行过程所要借助的内容空间大小。时间复杂度:。(/);空间复杂度:0(n)04.测试结果1)进入主界面 如图2 T所示图2-2主界面第11页共25页2)输入初始的行列,结果如图2-2所示图2-3输入初始数据图3)
13、重新设置初始行列5 6如图2-3所示图2-4重新设置初始数据图第12页共25页5.源程序(带注释)#include typedef struct DataType(int board88;定义一个 int 的二位数组 boardint step;/*走的步数*/int test;/*可以遍历成功的次数*/JSeqList;SeqList L;/int board8J8J;int start;int deltar=-2,-1,1,2,2,1,-1,-2);int deltac=1,2,2,1,-1,-2,2-1;/*马的可能走法对当前位置的横纵增量*/int exitn(int r,int c,
14、int nexta)/*求马所在位置(r,c)的出U数,nexta为出口号*/int i,k,a,b;int num=0;for(i=0;i=7;i+)(k=(i+start)%8;a=r+deltark;b=c+deltack;if(a=0&b=0&b=7&L.boardab=0)(nextanum=k;num+4-;)return num;)int number(int r,int c)/*返回下次可以找到的增量的个数*/int i,k,a,b;int num=0;for(i=0;i=7;i+)(k=(i+start)%8;a=r+deltark;b=c+deltack;if(a=0&b=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 兰州理工大学数据结构课程设计-猴子吃桃子问题; 跳马问题;通过单字符置换可以将一个单词改为另一个单词
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【曲****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【曲****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
链接地址:https://www.zixin.com.cn/doc/519961.html