数据结构课程设计报告

发布 2022-10-05 19:02:28 阅读 6296

数据结构与算法分析报告。

班级:计算机051班。

曹玮(05190101)

葛生生(05190107)

董毅(04190107)

指导老师:瞿有甜。

数理与信息工程学院。

数据结构与算法设计》课程设计。

组号: 无设计主题: 数据结构相关实现程序。

指导老师: 瞿有甜组长(学号): 曹玮(05190101

组员(学号):葛生生(05190107)、董毅(04190107)

完成时间: 2024年1月26日

需求分析:该程序实现菜单化、可视化、界面良好的输入和输出效果,各部分之间。

用模块连接。第一部分模块实现输入功能,用户可根据提示按要求输入;在选择。

数字后,就进入了各个分模块中。第一模块是约瑟夫环(joseph)问题,这是一。

个模拟报数的问题,用户根据提示输入总的人数和要循环报的数,通过运行程序。

输出最后剩下的人的编号。第二部分是有关二叉树的层序和先序遍历问题,输入。

结点数,建立二叉树,然后层序和先序输出结果。第三部分是有关哈夫曼树的建。

立,输入要建立的哈夫曼树各结点的权值,按照最优生成树的建立方法建立哈夫。

曼树,最后输出最小全值。第四部分是纸牌游戏,用户按要求输入和输出,这是。

一道典型的模拟题。第五部分是有关图的广度优先遍历和深度优先遍历问题,输。

入各边的两端点和长度,建立存储结构,按两种方法输出。第六部分是有关运动。

会分数统计的问题。

概要设计:第一部分:有关运动会分数统计的问题,涉及排序、搜索算法,用到结构体,链表的运用以及数组等数据结构,按要求实现即可。

第二部分:飞机定票系统,通过结构体,和两个单链表的运用完成飞机定票系统的各项功能设计,再在主函数里实现这些功能。

第三部分:约瑟夫环(joseph)问题实际上是一个模拟问题,我们可以利用链表这一数据结构来求解,利用链表的删除结点来模拟人的退出,直到最后只剩下一个结点。

第四部分:猴子选大王的思想和约瑟夫环一样,不做分析。

第五部分:二叉树的层序和先序遍历问题,我们可以通过建立二叉树来实现这一要求,遍历可以用递归或非递归算法实现。

第六部分:建立哈夫曼树并编码,所用的数据结构也是二叉树,算法就是生成最优二叉树的算法最后按照左0右1的顺序编码,并输出哈夫曼树和各个字符的哈夫曼编码。

第七部分:模拟纸牌游戏,根据数的因子的个数是否是偶数,奇数来确定牌的朝上还是朝下,在循环的时候,时间复杂度明显降低。

第八部分:图的广度优先遍历,用邻接矩阵存储。算法就是图的固定算法。

详细设计:见源程序。

调试分析:第一部分是有关运动会的,时间和空间复杂度计算都比较复杂,运动会在调试的时候出现的问题最多,头文件就有很多问题,一开始的时候出现的120个错误都是有关头文件的,因为既用又用iostream,所以问题比较多,随后统一为studio,h则问题得到解决,从中知道,两个头文件不能混合使用,运动会数涉及到文件的输入输出,这里也碰到很多问题,首先是文件不能正常的读出,以及一些格式的错误,最后也得到解决,整个程序最主要的是建立学校和项目这两个链表,以及两者之间的具体关系,所以这个地方比较容易搞错,只要能熟练运用链表,就没问题。

第二部分的任务:设计系统,实现飞机定票,退票,查询航班信息,自定义存储结构,设计程序完成功能。程序设计:

用单链表数据结构分别存储航班和乘客的信息。定票:用链表查找方法查找出乘客链表c的尾节点,用来增加定票乘客的信息。

查找航班链表h的第一个还有空座位的节点,修改其中的座位信息。退票:在乘客链表中按名字找到该乘客的节点,做链表的删除操作。

再找到航班。链表h的第一个还有空座位的节点,其中的座位信息加1。查询:

即两个链表的遍历,在遍历过程中输出各节点的信息。

1、用于存储的数据结构的选择:单链表。

2、如何用链表实现各个功能的实现。以前一般做一些只有一个链表的题目,而且自己又缺少实践练习,现在要实现系统的定票和退票功能时必须要用到二个链表 ,一开始无从下手。后来仔细分析,再通过翻书看程序学习如何处理两个链表, 巩固了链表插入、查找、删除、遍历的基本知识,也搞清楚了一些原来不懂的问题,似懂非懂的问题。

还有一些很细小的错误,编程的时候一不小心就错了,但找错误要花很多时间 ,有的时候甚至要比重新遍一次还难,找到错误才发现只是一个很简单的语句。 这就是基本功的问题了,现在这个程序还知识简单地实现了一点功能,还只是一个不完善的系统,以后要加强锻炼。

第三部分的约瑟夫环(joseph)问题采用链表实现功能,时间复杂度为o(n2)的,若采用数学方法,则复杂度为o(n)的。

第四部分和第三部分一样。

第五部分是二叉树的层序和先序遍历若采用递归算法,复杂度为 o(n),但空间开销比较大,若用非递归算法,时间上花费大些,空间省些。

第六部分建立哈夫曼树并编码的时间和空间上的开销都是o(n*logn)的。

第七部分:模拟纸牌游戏,运用到的是一个数的因子,因为只要是他的因子,他就会被翻一次,所以只要计算出它的因子就可以了,这样使时间复杂度大大降低,小于o(n2);也可以先把使素数的先定下来,因为它只被翻一下,也即朝下,但是要先找到素数,这个时间就比较浪费。

第八部分是图的图的广度优先遍历,也用矩阵存储,时间复杂度为o(n2)的。在编写的时候发现用深度搜索不能正常输出答案,这个问题还没有得到解决,因为我们用的是递归的算法,还没有找到解决方法。

课设总结:本学期我们学习了数据结构课程,在此之前,我们中的很多人参加了暑假acm训练,通过基本的训练和基础知识的巩固,在对数据结构算法进行初步了解的同时也提高了语言设计能力,本次短学期在经过一个学期数据结构学习后,我们总结归纳了重点知识,并通过重点知识的运用设计了一个多功能菜单,以实现多方面的需求。

就我们计算机专业看来,编程能力是很重要的,一个计算机专业学生首先需要了解的运用的知识就是程序语言设计。而要学习编程,必须明确学习的目的,也就是学习编程是为了什么。是为了了解计算机,还是为了自己的发展或者是因为个人爱好。

程序的实现不是一时爱好就可以完成的。一般来说在学习程序设计方法和语言时掌握基本理论及语法时比较容易,但是在实际应用和算法估量时却觉得无从下手。比如本次程序设计中的第一个程序,运动会分数统计,拿到题目的时候觉得很简单,可以通过结构体输入文本和数据,然后经过几个函数的计算得出分数,但是在语言编辑过程中,发现无法区分各学校以及各选手,无法用恰当的方法储存数据和字符,这就是知识在实际中的运用问题。

如何编写符合要求的程序、如何编写高质量的程序更是我们所面临的难题。这就要求我们仔细体会,在反复实践的过程中掌握编程技巧,通过不断的克服困难来提高自己的编程能力。这是一个长期的过程,所以必须有坚定的恒心才能开始学习。

这是我们在本次课程设计中得到的体会之一。

通过本次课程设计,我们体会到编程能力的高低主要是由以下几点决定:①编程的习惯;②数学应用能力,其中包括逻辑思维,分析问题的能力;③对数据结构的认识能力;④经验的多少,包括各种语言的掌握能力。其实,最主要的一点还是要认真勤奋,为自己的目标而不怕困难不断前进,这不只是对程序设计而言,学习其他所有的东西都应如此。

为了做出一个程序,我们组组员甚至一大早到机房编程,一直到深夜。

数据结构重在算法,据我们的认识,数据结构为数据的一种组织形式。每一种结构就是一种容器,用来装数据的容器。数据是什么呢?

数据是一切计算机可以处理的信息。如字符,**,文件等等,其实这些数据说白了,这些数据在电脑里面就是01码。这只是我们组同学再学习数据结构并巧妙运用数据结构算法后的理解,可以说是通俗并应用化的理解吧。

本次我们采取分工集讨论形式,每个人分别对自己有兴趣的题目进行编译和设计,再针对碰到的问题进行讨论分析,一起解决。这让我们体会到的共同奋斗的乐趣,就如同acm程序设计大赛中组队合作一样,充满了依托感和奋斗心。

数据结构课程设计报告

东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...

数据结构课程设计报告

设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...

数据结构课程设计报告

河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...