数据结构实验指导书及练习题曲.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验指导书及练习题曲

数据结构 实验指导书 自动化学院电子系 曲卫芬 编 实验指导教师 曲卫芬 于瑞涛 2007年9月 一前言 1、 《数据结构课程实验》的地位与作用 “数据结构”是理工科专业一门重要的专业技术基础课程。是将来驾驭计算机,指挥计算机,为自己的工作服务的一门核心的关键性课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。   由于以下原因,使得掌握这门课程具有较大的难度: (1) 内容丰富,学习量大,给学习带来困难; (2) 贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点; (3) 所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度; (4)相关的程序设计基础C语言的学习尤其重要。但我们学生的C语言的学习是在大一就开设的,加上是公共课,对数据结构里用的指针和结构体等方面的知识讲解的很少,学生反映考试又不考相关内容,就没有足够的重视和学习,也可以说,就没学这部分的内容,这更加大了这门课的学习难度。 (5) 隐含在各部分的技术和方法丰富,也是学习的重点和难点。    根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。通过实验实践内容的训练,突出构造性思维训练的特征, 目的是提高学生组织数据及编写大型程序的能力。由于学分的限制,安排上课40学时,实验安排9学时。 2、 《数据结构课程实验》的目的和要求 不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术,掌握数据结构中稍微复杂一些的算法设计中可能同时用到的多种技术和方法,如算法设计的构思方法,链表、栈、队列、树等算法的编码,递归技术,与特定问题相关的技术等。 在数据结构中要求重点掌握线性链表、二叉树和树、图、数组等结构相关算法的设计。在掌握基本算法的基础上,提高分析、解决实际问题的能力。 3、 《数据结构课程实验》对相关课程的要求 要求认真复习C语言的程序设计,复习和自学数组,指针、结构体、函数等内容,建立起程序设计思想,锻炼独立编写程序的能力。 实验一 约瑟夫环的程序实现 (1)进一步掌握线性表的各种链式存储结构,包括单链表与循环链表,熟悉各种操作。 (2)认真分析实际项目的内容,将其中的算法付诸实现,目的是练习利用线性表的链表结构来解决实际应用问题的能力,掌握线性表的实际应用。 问题描述:编号是1,2,…,n(n0)的n个人按照顺时针方向围坐一圈,每人持有一正整数密码。开始时任选一个正整数作为报数上限值m,从某个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。令n最大值取30。设计一个程序来求出出列顺序,并输出结果。 基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各人的编号。 关于单循环链表的概念请参见课本中所学的知识要点。循环链表上的运算与单链表上运算基本一致,区别只在于最后一个结点的判断(即循环的条件不同),但利用循环链表实现某些运算较单链表方便(从某个结点出发能求出它的直接前驱,而单链表是不行的,只能从头出发)。图1-1给出带头结点的循环链表的两种结构。 由于该问题是由古罗马著名史学家Josephus提出的问题演变而来,所以通常称之为Josephus问题。Josephus问题的解决需要采用循环链表,先构造一个有n个结点的单循环链表,再给出一个报数上限值m(假设m1),在链表的首结点开始从1计数,计到m时,对应的结点从链表中删除,然后在被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。 本设计采用的是不带头结点的循环链表,问题简化成固定密码,从键盘上输入人数N和密码M,开始报数,出列,直到结束。其中循环链表中结点的结构如下: typedef struct { int num; struct node *next; }linklist; 该问题可由两部分组成,分别由如下两个算法完成: (1)建立一个由头指针head指示的有n个结点的约瑟夫单循环链

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档