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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计报告.docx

1、数据结构课程设计报告数据结构课程设计报告专 业: 计算机科学与技术 班 级: 计算机科学与技术一班 姓 名: XXX XXXX 学 号: XXXXXXXXXXXX 指导教师: XXXXX 二零一零年十二月二十七日目录摘要 2第一章 课程设计目的 3第二章 设计过程 32.1 数据结构背景 32.2 程序设计 62.2.1 猴子选大王 62.2.2 josoph环 82.2.3 拓扑排序 112.2.4 纸牌游戏 132.2.5 哈弗曼树 15第三章 总结 17参考文献 19摘要一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存

2、储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。 在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。 选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语

3、言就是其中之一。数据结构包括数组、链表、栈、二又树、哈希表等等。它是对在计算机内存(有时是磁盘)中的数据的一种安排。 算法:用于对数据结构中的数据进行各种处理。 掌握了数据结构和算法后,能解决的问题:现实世界数据存储、程序员的工具、建模:有些数据结构能直接对真实世界的情况建造模型,其中最重要的数据结构是图。关键词:数据结构、数据元素、链表、算法第一章 课程设计目的数据结构是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部

4、表示出来,并培养基本的、良好的程序设计技能。根据课堂讲授内容,我们做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。第二章 设计过程2.1 数据结构背景在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 “数据结构”作为一门独立的课程在国外是从1968年才开始设立的。 1968年美国唐欧克努特教授开创了数据结构的最初体系,他所著的计算机程序设计技巧第一卷

5、基本算法是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。 计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:信息的表示,信息的处理 。 而信息的表示和组织又直接关系到处理信息的程序的效率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。因此,为了编写

6、出一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容。数据的结构,直接影响算法的选择和效率。 计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。计

7、算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法 。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。 数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体考虑。一个数据元素由若干个数据项组成。数据项是数据的不可分割的最小单位。有两类数据元素:一类是不可分割的原子型数据元素,如:整数5,字符 N 等;另一类是由多个款项构成的数据元素,其中每个款项被称为一个数据项。例如描述

8、一个学生的信息的数据元素可由下列6个数据项组成。其中的出生日期又可以由三个数据项:年、月和日组成,则称出生日期为组合项,而其它不可分割的数据项为原子项。 关键字指的是能识别一个或多个数据元素的数据项。若能起唯一识别作用,则称之为 主 关键字,否则称之为 次 关键字。 数据对象是性质相同的数据元素的集合,是数据的一个子集。数据对象可以是有限的,也可以是无限的。 数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的操作过程。在早期,计算机主要用于科学和工程计算,进入八十年代以后,计算机主要用于数据处理。据有关统计资料表明,现在计算机用于数据处理的时间比例达到80%以上,随着时间

9、的推移和计算机应用的进一步普及,计算机用于数据处理的时间比例必将进一步增大。 数据结构是指同一数据元素类中各数据元素之间存在的关系。数据结构分别为逻辑结构、存储结构和数据的运算。数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。逻辑结构形式地定义为(K,R)(或(D,S),其中,K是数据元素的有限集,R是K上的关系的有限集。 数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、图状结构(网状结构)。树形结构和图形结构全称为非线性结构。集合结构中的数据元素除了同属于一种类型外,别无其它关系。线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关

10、系,图形结构中元素之间存在多对多关系。在图形结构中每个结点的前驱结点数和后续结点数可以任意多个。 数据结构在计算机中的表示(映像)称为数据的物理(存储)结构。它包括数据元素的表示和关系的表示。数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示称为顺序存储结构。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点

11、间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型来实现。索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。 数据结构中,逻辑上(逻辑结构:数据元素之间的逻辑关系)可以把数据结构分成线性结构和非线性结构。线性结构的顺序存储结构是一种随机存取的存储结构,线性表的链式存储结构是一种顺序存取的存储结构。线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数都无关。2.2 程序设

12、计2.2.1 猴子选大王(1)需求分析一堆猴子都有编号,编号是1,2,3 .m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。(2)功能要求输入数据:输入m,n m,n 为整数,nm输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能 (3)概要设计(流程图) malloc( )分配内存 For循环 指针移动查找 Count=n-1 If(Ptr2=ptr+n) Ptr2=ptr; 保证猴子围成圈 N i+ Y N Y N Y 图 2-1 流程

13、图(4) 调试结果演示图2-2 猴子选大王2.2.2 josoph环(1)需求分析编号是1,2,,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。(2)功能要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。(3)概要设计为实现上述程序功能,应以有序链表表示集合。带头结点的线性表类型定义如下:typedef struc

14、t Lnode/节点类型ElemType data;Struct Lnode *next;*Link,*Position;typedef struct /链表类型Link head,tail; /分别指向线性链表中的头结点和最后一个结点Int len; /只是线性链表中的数据元素LinkList;Status MakeNode(Link&p,ElemType e);/分配由p指向的值为e的结点,并返回OK;若分配失败,则返回ERRORvoid FreeNode(Link&p);/释放p所指接点Status InitList(LinkList&L); /构造一个空的线性表LStatus Dest

15、royList(LinkList&L);/销毁线性表L,L不再存在Status ClearList(LinkList&L); /将线性表L从之唯恐表,并释放原链表的结点空间Status InsFirst(Link h,Link s); /已知h指向线性链表的头结点,将s所直接点插入在第一个结点之前Status DelFirst(Link h,Link&q); /已知h指向线性表的头结点,删除链表中的第一个结点并以q返回Status Append(LinkList&L,Link s);/将指针s所指(彼此以指针项链)的一串结点链接在线性链表L的最后一个结点/之后,并改变链表L的尾指针指向新的尾节

16、点Status Remove(LinkList&L,Link&q); /删除线性链表L中的尾结点并以q返回,改变链表L的尾指针只想新的尾结点Status InsBefore(LinkLIst&L,Link&p,Link s);/已知p指向线性链表L中的一个结点,将s所指结点插入在p所指结点之前,/并修改指针p指向新插入的结点Status InsAfter (LinkLIst&L,Link&p,Link s);/已知p指向线性链表L中的一个结点,将s所指结点插入在p所指结点之后,/并修改指针p指向新插入的结点Status SetCurElem(Link&p,ElemType e);/已知p指向线

17、性链表中的一个结点,用e更新p所指结点中的数据元素的值ElemType GetCurElem(Link p);/已知p指向线性链表中的一个结点,返回p所指结点中数据元素的值Status listEmpty(LinkList L);/若线性链表L为空表,则返回TRUE,否则返回FALSEint ListLength(LinkList L);/返回线性链表L中元素个数Position GetHead(LinkList L); /返回线性链表L中头结点的位置Position GetLast(LinkList L); /返回线性链表L中最后一个结点的位置Position PriorPos (LinkL

18、ist L,Link p);/已知p指向线性链表L中的一个结点,返回p所指结点的直接前驱的位置/若无前驱,则返回NULLPosition NextPos(LinkList L,Link p);/已知p指向线性链表L中的一个结点,返回p所指结点的直接后继的位置/若无后继,则返回NULLStatus LocatePos(LinkList L,int I,Link&p); /返回p指示线性链表L中的第I个节点的位置并返回OK,i值不合法时返回ERRORPosition LocateElem(LinkList L,ElemType e,Status(*compare)(ElemType,ElemTyp

19、e);/返回线性链表L中的第1个与e满足函数compare()判定关系的元素的位置,/若不存在这样的元素,则返回NULLStatus ListTraverse(LinkList L,status(*visit)();/依次对L的每个元素调用函数visit()。一旦visit()失败,则操作失败(4)调试结果演示图2-3 josoph环2.2.3 拓扑排序(1)需求分析任务:编写函数实现图的拓扑排序。(2)功能要求能够求有向图的拓扑排序。通过输入有向图的结点的个数以及边数,并输入各个边,可以求出该图的拓扑排序,而且可以输出结果。(3)概要设计数据关系:VR | v,wV 且P(v,w),表示从v

20、 到w 的弧。谓词P(v,w)定义了弧v,w 的意义或信息基本操作:typedef struct ArcNode / 图的邻接表表结点定义typedef struct VNode /表头结点typedef struct /图的结构定义int LocalVex(MGraph G,char v)/若G 中存在顶点v,则返回该顶点在图中的位置;否则返回其他信息初始条件:图G 存在,v 和G 中顶点有相同特征。操作结果:若G 中存在顶点v,则返回该顶点在图中的位置int CreateDG(MGraph &G)初始条件:图G 存在。操作结果:建立AOV 网图void FindInDegree(MGrap

21、h G,int indegree)初始条件:图G 存在。操作结果:得到各顶点入度,存储在indegree;void TopologicalSort(MGraph G) /对图进行拓扑排序初始条件:图G 存在。操作结果:对图G 进行拓扑排序。(4)调试结果演示图2-4 拓扑排序2.2.4 纸牌游戏(1)需求分析编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;.再依次5的倍数的牌翻一次,6的,7的 直到 以52为基

22、数的 翻过,输出:这时正面向上的牌有哪些? (2) 功能要求能够自动将52张牌编号,并能对正面向上的牌进行标记,以示区别。最后能够求出正面向上的牌的个数,以及正面向上牌的序号。(3)概要设计需要为每张牌设置一个标志位,标志它是正面或是反面。故设立一个一维数组并赋初值为1,表示所有的牌现在都正面朝上(-1表示该牌反面朝上);使用一个嵌套的for循环依次翻牌(当基数从2变到52);最后再使用一个for循环输出所有正面朝上的牌。图2-5 概要设计图(4)调试结果演示图2-6 纸牌2.2.5 哈弗曼树(1)需求分析建立函数输入二叉树,并输出其赫夫曼树(2)功能要求给定各个结点及其权值,能够构建一颗最优

23、二叉树,求出各个结点到树根的路径长度,最后求出总的权值。(3)概要设计图2-7 设计图( 4)调试结果演示图2-8 哈弗曼树第三章 总结在课程设计中,首先要看清问题,将问题要求理解透彻,在构思要如何实现,要用到哪些函数,要用什么算法,在课程构思中选算法是一个很重要的概念,只有确定用这么算法后才能接下来的工作,将流程图画在纸上,再依次编写代码,在程序设计中,编写代码只是一个方面,调试才是关键。它是一个相当繁琐的过程,有许多新的问题需要被解决,但同时它也是一个比较重要的过程,因为在程序调试过程中,你会学到很多新的东西,从而增加你编程的经验。通过本次实习,温固了数据结构的相关知识,加深对课内所学的有

24、关数据的逻辑结构和存储表示、数据结构的选择和应用、算法的设计和时空效率分析等课程基本内容的理解,进一步熟悉了VC+编程环境,巩固并提高了分析问题、解决实际问题的能力。从理论到实践,在整整一个多月的日子里,我学到很多很多的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的内容。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。在设计的过程遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的知识重新温故,巩固了所学的知识。任何一件事情都需要一个过程,在这个过程中,面对许多问题,我们尽最大的努力寻找解决方法,现学现用新的知识,不断积累经验,为未来的发展打下基础。我们是在学习,但是我们真正要学的是学习的能力,我们享受这个过程,因为它引领我们进步!参考文献数据结构(C语言版) 严蔚敏 吴伟民 编著 清华大学出版社

copyright@ 2008-2022 冰豆网网站版权所有

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