欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构课程论文.docx

    • 资源ID:10002115       资源大小:114.18KB        全文页数:16页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构课程论文.docx

    1、数据结构课程论文一、需求分析八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的,并作了部分解答。高斯在棋盘上放下了八个互不攻击的皇后,他还认为可能有76种不同的放法,这就是有名的“八皇后”问题。在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。现在我们已经知道八皇后问题有92个解答。1.1 选题理由根据自己的知识功底和能力水平择选了

    2、八皇后问题. 而且随着计算机技术的飞速发展,这一古老而有趣的数学游戏问题也自然而然的被搬到了计算机上。运用所学计算机知识来试着解决这个问题是个锻炼和提高我自己编程能力和独立解决问题能力的好机会,可以使我增强信心,为我以后的编程开个好头,故我选择了这个有趣的课题。1.2 涉及到的知识点本次课程设计中,用到的主要知识有:递归法、回溯法的应用,for语句的灵活运用,数据结构中树知识的灵活运用、栈及数组的掌握.下面给出八皇后问题回溯算法的伪代码PlaceQueen(row) for 第row行的各列col If 位置(row,col)可以放置皇后 在位置(row,col)放置一个皇后 If(row9)

    3、 PlaceQueen(row+1); else 成功,打印棋盘 将位置(row,col)上的皇后取走,尝试下一列位置 /回溯其中回溯法的应用如下:回溯法也是设计递归过程的一种重要方法,原理或步骤为:试着先把第一个皇后放在棋盘上,然后再放第二个,使两个皇后不会互相攻击,再放第三个皇后,使得她与前面两个皇后都不会互相攻击,依此类推,直至所有的皇后都放上去。如果第七个皇后放上后,第八个皇后已经没有安全的位置可以放置,则试着调试第七个皇后的位置,再尝试第八个皇后有没有安全的位置;如果第七个皇后的所有安全位置都已尝试过了,第八个皇后还是没有安全的位置,则试着调试第六个皇后的位置,重新放置第七、八个皇后

    4、的尝试。如此类推,最糟糕的事情就是一直到将第一个皇后的位置进行调整。1.3 功能要求当运行程序时,在屏幕上显示每一种方法八个皇后的相对位置,要用比较直观的界面显示。进入界面后,就会提示输入字符串的输入形式,在八皇后求解程序中,只要你选择输出解的格式,选择1则显示为每一列皇后的放置的行数,选择2则显示的是以矩阵形式形象的显示皇后的放置位置,选择0则退出程序的调试。在调试结果中,1的位置也就表示了该皇后应该所在的位置,0代表了空位置。二、概要设计2.1 数据结构1.解数组a,ai表示第i个皇后放置的列,范围为18。2. 行冲突标记数组b,bj=0 表示第j行空闲,bj=1 表示第j行被占领,范围为

    5、18。3. 对角线冲突标记数组c、d。ci-j=0 表示第(i-j)条对角线空闲,ci-j=1 表示第(i-j)条对角线被占领,范围-77。di+j=0 表示第(i+j)条对角线空闲,di+j=1 表示第(i+j)条对角线被占领,范围216。2.2 抽象数据类型的定义Print() /打印每一列皇后的放置的行数以及以矩阵形式形象的显示皇后的放置位置JudgeQueen1() /递归寻找摆放皇后位子void main() /主函数调用2.3 算法流程1.数据初始化。2.从n列开始摆放第n个皇后(因为这样便可以符合每一竖列一个皇后的要求),先测试当前位置(n,m)是否等于0(未被占领)。如果是,摆

    6、放第n个皇后,并宣布占领(记得姚横列竖列斜列一起设置),接着进行递归;如果不是,测试下一个位置(n,m+1),但是如果当n8时,便打印出结果。其算法流程图如下:测试下个位置m=m+1 N Y摆放皇后,并宣布占领 Y N 三、详细设计/定义数组int a8 /表示第i个皇后放置的列,范围为18。int b8 /表示第j行空闲,bj=1 表示第j行被占领,范围为18int c30 /表示第(i-j)条对角线空闲,ci-j=1 表示第(i-j)条对角线被占领,范围-77int d30 /表示第(i+j)条对角线空闲,di+j=1 表示第(i+j)条对角线被占领,范围216。/位置标明法打印void

    7、print1() X+; couttNo.X: ; /每一行皇后放置的列数的第X种情况 for (k=1;k9;k+) cout ak; coutn;/矩阵表示法打印void print2() int t,n; Y+; couttNo.Y: nt; /矩阵形式的第Y种情况 for (k=1;k9;k+) n=ak; for(t=1;tn;t+) cout0 ; cout1 ; t+; for(t;t9;t+) cout0 ; coutnt; coutn;/回溯递归法摆放皇后void PlaceQueen1(int i) int j; for (j=1;j9;j+) /每个皇后都有8种可能位置

    8、if (bj=0) &(ci+j=0)& (di-j=0) /判断位置是否冲突 ai=j; /摆放皇后 bj=1; /宣布占领第J行 ci+j=1; /占领两个对角线 di-j=1; if (i8) PlaceQueen1(i+1); /8个皇后没有摆完,递归摆放下一皇后 else print1(); /完成任务,打印结果 bj=0; /回溯 ci+j=0; di-j=0; void PlaceQueen2(int i) int j ,e=1; for (j=1;j9;j+) if (bj=0) &(ci+j=0)& (di-j=0) ai=j; bj=1; ci+j=1; di-j=1; i

    9、f (i8) PlaceQueen2(i+1); else print2(); /打印结果 bj=0; /回溯 ci+j=0; di-j=0; e+; /调用主函数void main() coutnnt* Welcome to EightQueen inquiries software problems *nn; for( k=0;k24;k+) /数据初始化 bk=0; ck=0; dk=0; ch=y; while(ch=y|ch=Y) coutnt 查 询 菜 单n; coutnt*;coutnt* No.1-每一行皇后放置的列数的情况 *;coutnt* No.2-视图矩阵形式显示皇后

    10、的位置 *;coutnt* No.0-退 出 *;coutnt*;coutchoice; switch(choice) case 1: coutnt每一行皇后放置的列数的情况nn; PlaceQueen1(1); /从第1个皇后开始放置 break; case 2: coutnt使用回车查看下一种情况nn; PlaceQueen2(1); /从第1个皇后开始放置 break; case 0: ch=n; break; default: coutntt菜单选择错误,请重新输入!n; 四、调试分析及测试4.1 遇到的问题及解决方法(1)由于对八个皇后放置的位置不能一次确定,而且前一个皇后的放置位置

    11、直接影响着后面的放置位置,使程序调试时要花费不少时间。(2)本程序有些代码重复出现,显得程序的有些代码看起来很杂乱。但其中最主要的问题是逻辑错误导致程序死循环或不循环或循环一小部分,但是编译时却没有错误,就是没有正确的输出答案。比如说,在void print2()中有for(t;t9;t+) ,如果赋t=1,则在视图显示法中会出现排序紊乱。类似的还有出现死循环的问题,后在同学和老师的帮助下,经细心改正后才把调试工作做完。(3). 这里在编写回溯算法时候需要特别注意以下几点: 回溯循环的结束在于第一个皇后被回溯。 当找到一个解时,需要复制整个棋盘,不然接下来的回溯将破坏已经找到的解。 找到一个解

    12、后,需要在当前皇后的基础上回溯。 回溯一个皇后时,要对当前的列数进行重置。一般在编写完核心代码后,需要编写一定的测试代码进行单元测试。否则的话,后面出现的错误的程序代码问题是好难修正的!4.2 算法的时空分析该算法的运行时间和和皇后的放置方法成正比,在最好情况下的时间和空间复杂度均为O(1),在最差情况下均为O(n*n),平均情况在它们之间。4.3 程序模块构架本程序模块划分比较合理,且利用指数组存储棋盘,操作方便。至于整体的系统架构,为了简单起见,这样的系统可以分成两个模块,第一个模块是负责模拟问题、提供算法,而另外一个模块则致力于窗口演示,是一个窗体应用程序4.4 算法的改进这道题可以用非

    13、递归循环也可以用递归循环的方法来做,这里我用了后者,其方法是分别一一测试每一种皇后摆法,直到得出正确的答案即所谓的回溯法。4.5 程序使用说明(1) 本程序的运行环境为DOS操作系统(2) 进入演示程序后即显示文本方式的用户界面(3) 进入界面后,就会提示输入字符串的输入形式,在八皇后求解程序中,只要你选择输出解的格式,选择1则显示为每一列皇后的放置的行数,选择2则显示的是以矩阵形式形象的显示皇后的放置位置,选择3则退出程序的调试。在调试结果中,1的位置也就表示了该皇后应该所在的位置,0代表了空位置。4.6 测试结果 初步运行界面 位置标明每一行皇后放置的列数视图矩阵形式显示皇后位置五、个人工

    14、作及创新在本次课程设计的学习过程中,我在其中的最大的收获,就是得到了许多的经验以及软件设计的一些新的思路. 迈着时间的步伐,这次的课程设计也即将结束,但这个学期数据结构的学习还是具有相当大的意义,特别是这次的课程设计,它从一个程度上改变了我们的编程思想,如何将一个程序快速而又准备的进行编写,进行编译,都成为了我思考的重点,也通过这一个学期的学习,我们将数据结构的思想带入到了我们以后的编程学习中去。在这个阶段,我也明白了,好的思想,不能提留于字面上的认知,还需要的是平时多练多写一些相关的程序,并且通过修改,加入新的算法去尝试改变自己的一些编程思想。保持更新算法的速度,这才是关键。 比如说,八皇后

    15、在变成初期,由于不自觉的采用了非递归的算法,结果大大增加了程序的复杂程度,并且也让整个程序的时间复杂度变得更大.在这次的八皇后问题中可以用概率算法,也可以采用传统的递归算法,这里我用了后者.而且还用到了回溯法. 回溯法是允许我们在尝试某些选择失败后,能系统的尝试完所有可能的选择。在八皇后问题中越早放置的皇后,她的选择就越多;而越晚放置的皇后,她的选择就越少。八皇后问题和迷宫问题是很相似的,因此,若采用回溯,将能很好很快而且高效率的解决问题。这便是在这次的一些创新之处!当然还可以设计N皇后问题,基本思想不变六、小结通过这次的课程设计,我从中得到了许多经验和软件设计的一些新思路;从这个八皇后问题设

    16、计以及分析中,本人从中理解到了数据结构对于软件设计的重要性,它的使用,可以改变软件的运行周期,思路从繁化简,并且都能够通过其相关引导,将本身以前编程思想进行扩充,发展.这也是在这次课程设计中我所掌握得到的。 但在这次的课设中也遇了一些问题,如,八皇后在变成初期由于没真正体会到“树”在里面的运用,不自觉的采用了非递归的算法,结果大大增加了程序的复杂程度。并且也让整个程序的时间复杂度变得更大;在重温了树的回溯,以及二叉树的遍历后,最终将程序进行了一次较大的改造。并且通过思考,再将以前的数组知识加以运用才最终解决了这个问题,整个程序的算法的可看性也有了较大的改进。 参考文献1.黄晓霞,萧蕴诗数据挖掘

    17、应用研究及展望J. 计算机辅助工程. 2001.4:23-292.黄解军,潘和平,万幼川.数据挖掘技术的应用研究.计算机工程与应用,2003,02:4548.3.吕凤哲,C+语言程序设计(第二版).北京:电子工业出版社,20054.耿国华等著,数据结构C语言描述,西安电子科技大学出版社5.苏仕华,数据结构课程设计.-北京:机械工业出版社,2005.56.严蔚敏,吴伟民,数据结构北京:清华大学出版社,1997附录 致谢在这次课程设计中,我遇到了不少问题,包括程序和课程设计的撰写上的,同学老师给了我许多帮助,在此我表示对你们的忠心感谢。同时,学校给了我做课程设计的很好的条件,我才能够顺利的完成,在此,我仅以文字的形式表示忠心感谢,感谢您们对我的帮助。


    注意事项

    本文(数据结构课程论文.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开