数据结构与算法课程设计汇总
文件夹
总结有助于我们更好地认识自己,并为自己的成长做出调整和规划。借助总结,我们可以更好地掌握知识和技能,我想我们需要学会用总结的方式来学习。想了解更多总结的经典案例,请点击查看。
课程设计是《数据结构》课程的一个重要的实践环节,它可加深学生对该课程所学内容的进一步的理解与巩固,达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,培养基本的对基本数据结构的理解和运用,良好的程序设计方法、提高编码及调试程序技能的能力,为整个专业的学习以及软件设计水平的提高打下良好的基础。
二、设计内容。
每位学生可以从《数据结构课程设计备选题目》中选择一个题目自行完成。要求每班中题目不能重复。
三、设计要求。
1.学生必须仔细阅读《数据结构课程设计任务书》,认真主动完成课设的要求。有问题及时主动通过各种方式与指导教师联系沟通。
2.学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时向教师汇报。
3.课程设计按照教学要求需要两周时间完成,学院安排设计时。
间学生不得缺席。
4、每位学生必须认真、独立完成设计任务,发现抄袭者或雷同者,一律按零分处理。
5、程序设计语言可选择c或c++。
6、程序要正确且具有一定的健壮性,不会因为用户的输入错误引起程序运行错误而中断执行,对输入值的类型、大小范围、字符串的长度等,进行正确性检查,对不合法的输入值给出出错信息,指出错误类型,等待重新输入。
四、上交相关内容要求。
上交的成果的内容必须由以下三个部分组成,缺一不可。
3.课程设计报告:(保存在word文档中,文件名要求按照“学号_姓名_课程设计报告题目”起名,如文件名为“001_张三_二叉树动态演示”.doc)。报告要求文字工整通顺、图表规范、思路清楚、内容正确。设计报告必须按照规定格式规范,a4纸双面打印、装订。
将以上三个部分放在一个文件夹里,文件夹名要求按照"学号_姓名_课程设计报告题目”.zip命名。每个班将所有学生的文件夹收集起来刻成光盘上交。
五、时间安排。
设计时间为两周(7.07—7.18),7月16日—7月18日答辩。考核方式。
成绩按五分制,包括课程设计过程、课程设计结果、课程设计报告三部分。其中:
课程设计过程:20%。
包括设计态度(10分)、出勤(10分)。
课程设计结果:40%。
其中:程序正确性:30分,运行效果:10分,答辩:10分。课程设计报告:40%。
其中:正确性:20分,完整性:10分,规范性:10分。
六、设计报告格式。
计算机技术已成为现代化发展的重要支柱和标志,并逐步渗透到人类生活的各个领域。随着计算机硬件的发展,对计算机软件的发展也提出了越来越高的要求。由于软件的核心是算法,而算法实际上是对加工数据过程的描述,所以研究数据结构对提高编程能力和设计高性能的算法是至关重要的。
非数值计算问题的数学模型不再是传统的数学方程问题,而是诸如表、树、图之类的数据结构。因此,简单地说,数据结构是一门研究非数值计算的程序设计问题的学科,主要研究数据的逻辑结构、存储结构和算法。
一、教学目的与要求---了解数据的逻辑结构和物理结构;
教学要求在每章教学内容给出,大体上为三个层次:了解、掌握和熟练掌握。他们的含义大致为:了解是正确理解概念,掌握是学会所学知识,熟练掌握就是运用所学知识解决实际问题。
教学目的为:了解算法对于程序设计的重要性;学习掌握基本数据结构的描述与实现方法,熟练掌握典型数据结构及其应用算法的设计。了解算法分析方法。
二、教学重点与难点--数据结构中基本概念和术语,算法描述和分析方法。
1、链表插入、删除运算的算法。算法时间复杂度。
2、后缀表达式的算法,数制的换算。
利用本章的基本知识设计相关的应用问题。
3、循环队列的特点及判断溢出的条件。
利用队列的特点设计相关的应用问题。
4、串的模式匹配运算算法。
5、二叉树遍历算法的设计。
利用二叉树遍历算法,解决简单应用问题哈夫曼树的算法。
6、图的遍历。
最小生成树。
最短路径。
7、二叉排序树查找。
平衡树二叉树。
8、堆排序。
快速排序归并排序。
四、教学内容、目标与学时分配。
教学内容教学目标课时分配。
1、绪论。
逻辑结构与存储结构。
算法和算法分析。
2、线性表。
线性表的定义与运算。
线性表的顺序存储。
线性表的链式存储。
3、栈。
栈的定义与运算。
栈存储和实现。
栈的应用举例。
4、队列。
队列的定义与基本运算。
队列的存储与实现。
队列的应用举例。
5、串。
串的定义与基本运算。
串的表示与实现。
串的基本运算。
6、树和二叉树。
树的定义和术语。
二叉树树的基本概念和术语遍历二叉数和线索二叉树。
二叉树的转换。
二叉树的应用。
哈夫曼树及其应用。
7、图。
图的定义和术语。
图的存储结构。
图的遍历算法。
图的连通性。
8、查找。
查找的基本概念与静态查找动态查找。
哈希表。
了解。
了解。
掌握。
熟练掌握顺序表存储地址的计算。
掌握单链表的结构特点和基本运算。
掌握双链表的结构特点和基本运算。
掌握栈的定义与运算。
掌握栈的存储与实现。
熟练掌握栈的各种实际应用。
掌握队列的定义与基本运算。
熟练掌握队列的存储与实现。
掌握循环队列的特征和基本运算。
了解串的逻辑结构。
掌握串的存储结构。
熟练掌握串的基本运算。
了解。
了解二叉树。
熟练掌握二叉树定义和存储结构。
了解二叉树的遍历算法。
掌握。
掌握哈夫曼的建立及编码。
了解。
了解。
熟练掌握。
熟练掌握。
了解。
熟练掌握。
了解哈希表与哈希方法。
4学时。
1学时。
1学时。
2学时。
8学时。
2学时。
2学时。
4学时。
8学时。
2学时。
2学时。
4学时。
6学时。
2学时。
2学时。
2学时。
6学时。
2学时。
2学时。
2学时。
12学时。
2学时。
2学时。
2学时。
2学时。
2学时。
2学时。
8学时。
2学时。
2学时。
2学时。
2学时。
8学时。
4学时。
2学时。
2学时。
9、排序。
12学时插入排序。
熟练掌握基本思想。
3学时快速排序。
了解各种内部排序方法和特点。
3学时选择排序。
掌握。
2学时各种排序方法比较。
掌握。
2学时。
实验内容实验目标课时分配算法编程实验:
1、用指针方式编写程序复习c(c++)语言指针、结构体等的用法。
2、对单链表进行遍历。
链表的描述与操作实现。
3、栈及其操作。
描述方法及操作。
4、编写串子系统1串的特点及顺序定长存储、操作、查找。
5、编写串子系统2串的特点及顺序定长存储、操作、查找。
6、编写树子系统1二叉树的特点及存储方式、创建、显示、遍历等。
7、编写树子系统2二叉树的特点及存储方式、创建、显示、遍历等。
8、图子系统。
图的邻接矩阵的存储、遍历、广度/深度优先搜索。
9、查找子系统。
理解查找基本算法、平均查找长度、静态、动态查找等。
五、考试范围与题型。
1、考试范围与分数比例。
1)绪论。
12%2)线性表。
17%3)栈。
7%4)队列。
6%5)串。
4%6)树和二叉树。
14%7)图。
15%8)查找。
4%9)排序。
21%。
2、考试题型与分数比例。
1)名词解释。
18%2)判断对错。
16%3)填空。
16%4)单项选择。
18%5)应用。
32%。
六、教材与参考资料。
1、教材:实用数据结构基础(谭浩强)中国铁道出版社。
2、参考资料:数据结构(严蔚敏)清华大学出版社。
(撰写人:
审核人:2学时2学时2学时2学时2学时2学时2学时2学时2学时)。
在两周的学习和实践过程中,通过解决学生搭配问题这一实际问题,让我对循环队列有了更深的了解,对数据结构也产生了更加浓厚的兴趣,同时也是对我解决实际问题能力的一次提升。
记得王教授给我们上课时就要不断的通过走算法的方式,掌握所学习的数据结构、算法等,而上机则能进一步巩固自己所学的知识、提高自己的学习能力。在上机的同时也改正了自己对某些算法的错误使用,使自己能在通过程序解决问题时抓住关键算法,能够很好的够造出解决问题的数据结构、算法的设计思想和流程图,并用c语言描绘出关键算法。
首先对于这次的课程设计题目而言,主要是对队列这一知识点的运用。首先是对问题的分析,明白题目的具体要求,即将现实生活中的舞会搭配问题,用链队列这一数据结构描绘出来。用两个链队列boy和girl分别代表男生和女生,当播放每一首歌曲时,便可使两队各有一元素出队列,这样就可以模拟出搭配情况。同时,由于题目要求系统能模拟动态地显示出上述过程,所以就考虑调用一个延迟函数sleep(),使歌曲之间有一段时间间隔,即模拟了显示中的那一动态过程。其次便是在实现过程中遇到的具体细节问题,比如一开始设计了两个出对函数dequeue(),让首元素结点出队,然后调用入队函数add(),使其入队到队尾,但在测试时发现,如果输入的人数为2,那么在到第三首歌曲时程序便会终止;经过分析发现是这两个函数的调用,使数据出错,所以就将这两个出对函数用一个函数change()代替,这个函数能实现将首元素结点移到队尾的功能。这样不仅没有了之前的问题,而且使程序更加易懂。在这些细节方面的具体设计,是对个人分析问题、解决问题能力的一个很好的锻炼。通过这个过程的锻炼,不仅能对所学的知识点有很好的掌握,而且还是对个人能力的很好的训练。
其次,以前我对数据结构(c语言描述)的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。让自己有一定的能力去改正一些常见的错误语法,很高兴这两周的学习让我对数据结构(c语言描述)有了新的认识,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。在这次课程设计的实验中,我收获了许多知识,通过查找大量资料,请教老师,以及不懈的努力,也培养了独立思考、动手操作的能力。我也学会了许多学习和解决实际问题的方法,让我受益匪浅。课程设计对我来说,趣味性强,不仅锻炼能力,而且可以学到很多东西,在与老师和同学的交流过程中,互动学习,将知识融会贯通,也增强了我和同学之间的团队合作的能力。让我们知道只要努力,集中精力解决问题,一定会有收获的,过程也是很重要的。
在这次课程设计中我们要学会利用时间,在规定的时间内完成我们的任务,要逐渐养成用c语言编写程序的良好习惯。这些对我来说都是一种锻炼,一个知识积累的过程,一种能力的提高。要打好基础,才能用更好的办法,更简洁明了的程序解决实际问题,只有这样才能进一步的取得更好的成绩。我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它。
当然我现在的水平还是很有限,但我还会继续努力的,在解决实际问题时如果遇到了难题,我们要学会去查找大量的有关这方面的资料,还要借助于网络不断扩大自己的知识面和阅读量。这样也可以锻炼我们的自主学习能力和解决问题的能力,学到了许多以前没学到的东西。
在课程设计中的程序都比较复杂,所以需要我们要更加地细心,认真的完成每一步的操作,修改语法,按照老师的指导思想来完成。还记得一开始拿到题目时我们的一脸茫然,而现在是收获满满的自信,每个人都或多或少有所收获,也让我们对程序设计和算法有了进一步理解、认识。
完成了这次的二元多项式加减运算问题的课程设计后,我的心得体会很多,细细梳理一下,有以下几点:
1、程序的编写中的语法错误及修改。
因为我在解决二元多项式问题中,使用了链表的方式建立的二元多项式,所以程序的空间是动态的生成的,而且链表可以灵活地添加或删除结点,所以使得程序得到简化。但是出现的语法问题主要在于子函数和变量的定义,降序排序,关键字和函数名称的书写,以及一些库函数的规范使用,这些问题均可以根据编译器的警告提示,对应的将其解决。
2、程序的设计中的逻辑问题及其调整。
我在设计程序的过程中遇到许多问题,首先在选择数据结构的时候选择了链表,但是链表的排序比较困难,特别是在多关键字的情况下,在一种关键字确定了顺序以后,在第一关键字相同的时候,按某种顺序对第二关键字进行排序。在此程序中共涉及到3个量数,即:系数,x的指数和y的指数,而关键字排是按x的指数和y的指数来看,由于要求是降幂排序且含有2个关键字,所以我先选择x的指数作为第一关键字,先按x的降序来排序,当x的指数相同时,再以y为关键字,按照y的指数大小来进行降序排列。
另外,我在加法函数的编写过程中也遇到了大量的问题,由于要同时比较多个关键字,而且设计中涉及了数组和链表的综合运用,导致反复修改了很长的时间才完成了一个加法的设计。但是,现在仍然有一个问题存在:若以0为系数的项是首项则显示含有此项,但是运算后则自动消除此项,这样是正确的。但是当其不是首项的时候,加法函数在显示的时候有0为系数的项时,0前边不显示符号,当然,这样也可以理解成当系数为0时,忽略这一项。这也是本程序中一个不完美的地方。
我在设计减法函数的时候由于考虑不够充分就直接编写程序,走了很多弯路,不得不停下来仔细研究算法,后来发现由于前边的加法函数完全适用于减法,只不过是将二元多项式b的所有项取负再用加法函数即可,可见算法的重要性不低于程序本身。
3、程序的调试中的经验及体会。
我在调试过程中,发生了许多小细节上的问题,它们提醒了自己在以后编程的时候要注意细节,即使是一个括号的遗漏或者一个字符的误写都会造成大量的错误,浪费许多时间去寻找并修改,总结的教训就是写程序的时候,一定要仔细、认真、专注。
我还有一个很深的体会就是格式和注释,由于平时不注意格式和注释这方面的要求,导致有的时候在检查和调试的时候很不方便。有的时候甚至刚刚完成一部分的编辑,结果一不注意,就忘记了这一部分程序的功能。修改的时候也有不小心误删的情况出现。如果注意格式风格,并且养成随手加注释的习惯,就能减少这些不必要的反复和波折。还有一点,就是在修改的时候,要注意修改前后的不同点在哪里,改后调试结果要在原有的基础上更加精确。
数据结构与算法是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。随着高级语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。通过学习,先报告如下:
第一章的内容主要包括有关数据、数据类型、数据结构、算法、算法实现、c语言使用中相关问题和算法分析等基本概念和相关知识。其中重点式数据、数据类型、数据结构、算法等概念;c语言中则介绍了指针、结构变量、函数、递归、动态存储分配、文件操作、程序测试与调试问题等内容。
第二章主要介绍的是线性逻辑结构的数据在顺序存储方法下的数据结构顺序表(包括顺序串)的概念、数据类型、数据结构、基本运算及其相关应用。其中重点一是顺序表的定义、数据类型、数据结构、基本运算和性能分析等概念和相关知识。二是顺序表的应用、包括查找问题(简单顺序查找、二分查找、分块查找)、排序问题(直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、归并排序)、字符处理问题(模式匹配)等内容。本章重点和难点在查找和排序问题的算法思想上,6种排序方法的性能比较。
第三章主要介绍的是线性逻辑结构的数据在链接存储方法下数据结构链表的相关知识。主要是单链表、循环链表的数据类型结构、数据结构、基本运算及其实现以及链表的相关应用问题,在此基础上介绍了链串的相关知识。在应用方面有多项式的相加问题、归并问题、箱子排序问题和链表在字符处理方面的应用问题等。本章未完全掌握的是循环链表的算法问题和c的描述。
第四章介绍在两种不同的存储结构下设计的堆栈,即顺序栈和链栈的相关知识,了解堆栈的相关应用,掌握应用堆栈来解决实际问题的思想及方法。本章主要内容是顺序栈和链栈的概念、数据类型、数据结构定义和基本运算算法及其性能分析。本章堆栈算法思想较为简单,所以能较好掌握。
第五章主要介绍顺序存储和链接存储方法下的两种队列、顺序(循环)队列和链队列的数据结构、基本运算及其性能分析以及应用。顺序队列(重点是循环队列)和链队列的概念、数据类型描述、数据结构和基本运算算法及其性能分析等。本章同堆栈有点类似,算法思想较为简单,所以能较好掌握;但难点重在循环队列队空、队满的判断条件问题。第六章“特殊矩阵、广义表及其应用”将学习数组、稀疏矩阵和广义表的基本概念,几种特殊矩阵的存储结构及其基本运算,在此基础上学习特殊矩阵的计算算法与广义表应用等相关问题。本章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。
第七章“二叉树及其应用”的知识结构主要是:非线性结构数据二叉树的定义、性质、逻辑结构、存储结构及其各种基本运算算法,包括二叉树的建立、遍历、线索化等算法。在此基础上,介绍二叉树的一些应用问题,包括哈夫曼编码问题、(平衡)二叉排序树问题和堆排序问题等。
第八章“树和森林及其应用”介绍树和森林的数据结构、基本算法及其性能分析,树和森林与二叉树之间的转换算法等,在此基础上介绍树的应用---b-树,应用b-树来实现数据元素的动态查找。本章基本掌握树和森林的概念和性质、数据结构、树的基本算法及性能分析,树和二叉树间的转换及其算法,并用应用b-树来实现数据元素的动态查找未能掌握好。
第九章“散列结构及其应用”是逻辑结构“集合型”的数据元素在散列存储方法下的数据结构及其应用知识内容。主要介绍散列函数的概念、散列结构的概念、散列存储结构的概念---散列表、散列函数和散列表中解决冲突的处理方法---开放定址法、链地址法以及散列表的基本算法及其性能分析。本章概念较为多,所以掌握不太好。
第十章“图及其应用”是逻辑结构为“图形”的数据结构及其应用知识内容,主要介绍图的定义和基础知识,图的2种存储结构。图的基本算法以及图的典型应用问题(最小生成树、最短路径、拓扑排序和关键路径等)。
二、对各知识点的掌握情况。
我对各知识点的掌握情况总结如下:
第一章不太难,能基本掌握。但关系全书的时间性能分析有些未能全部掌握。第二章本章重点和难点在查找和排序问题的算法思想上,6种排序方法的性能比较。本章未掌握的为希尔排序、快速排序、归并排序的时间复杂度分析。第三章,对链表掌握还好,对其数据结构进行了分析,有循环链表,掌握的不是很好,对其中一些用法不熟练。第四章堆栈,本章堆栈算法思想较为简单,所以能较好掌握,但表达式计算问题未掌握好的。第五章的循环队列队空、队满的判断条件问题掌握的不是很好。第六章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。第七章对二叉树掌握较好,其概念,存储,遍历有很好的掌握。就是对二叉排序树有点生疏,它的生成算法不是很会。第八章树树与二叉树之间的转换,森林与二叉树的转换算法思想基本掌握。第九章散列的一些知识,没有深入学习,大概了解了散列存储结构散列表,散列函数,冲突的处理方法。第十章了解了图的逆邻接表的存储结构,关键路径求解算法未能掌握好,不能灵活运用图的不同数据结构和遍历算法解决复杂的应用问题。
三、学习体会。
通过学习数据结构与算法,让我对程序有了新的认识,也有了更深的理解。同时,也让我认识到,不管学习什么,概念是基础,所有的知识框架都是建立在基础概念之上的,所以,第一遍看课本要将概念熟记于心,然后构建知识框架。并且,对算法的学习是学习数据结构的关键。在第二遍看课本的过程中,要注重对算法的掌握。对于一个算法,读一遍可能能读懂,但不可能完全领会其中的思想。掌握一个算法,并不是说将算法背过,而是掌握算法的思想。我们需要的是耐心。每看一遍就会有这一遍的收获。读懂算法之后,自己再默写算法,写到不会的地方,看看课本想想自己为什么没有想到。对算法的应用上,学习算法的目的是利用算法解决实际问题。会写课本上已有的算法之后,可以借其思想进行扩展,逐步提高编程能力。
四、对课程教学的建议。
1、感觉上课时的气氛不是很好,虽然大部分人都在听,可是效果不是很好。所以希望老师能在授课中间能穿插一些活跃课堂氛围的话题,可以是大家都非常关心的一些内容,这样既让大家能在思考之余有一个放松,也能够提高学生的学习积极性和学习效率。
2、学习的积极性很重要,有时候我们花了很长时间去写实验报告,也很认真的去理解去掌握,可是最后实验报告可能就只得了一个c,抄的人反而得a,这样的话很容易打击学生的积极性,在后面的实验报告中没动力再去认真写。所以希望老师能在这方面有所调整。
3、虽然讲课的时间很紧,但是还是希望老师能在讲述知识点的时候能运用实际的调试程序来给我们讲解,这样的话能让我们对这些内容有更深刻的印象和理解。
一、基本信息。
课程编号:e1132107课程类别:学科基础课必修课适用层次:本科。
二、教学目的。
数据结构与算法课程设计不仅是数据结构与算法课程的实践教学环节,而且是一门综合性实验项目。通过这个实验,培养学生综合运用数据结构基本知识和程序设计基本知识,解决实际问题,提高程序设计的能力和团队协作精神。
本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
1.学生通过实践掌握线性表、树、图等数据结构的存储结构及算法实现;2.培养学生利用数据结构知识解决实际问题的能力;3.使学生初步具备查阅资料、分析设计、上机实现和书写科技报告的能力。
三、基本要求。
1.指导教师要在选题、设计、上机实现等诸环节上投入精力,加强指导、讨论和答疑的力度。尤其在选题上,要充分考虑学生目前所具有的知识水平、掌握的开发工具、以及综合设计能力的现状,使题目取材合理、大小适中、难易适度,使学生在完成设计工作后,能有所收获。2.参加课程设计的学生要珍惜机会、勤奋工作、勇于创新、勇于探索、勇于实践,虚心向指导教师请教,向同学学习,独立完成设计任务。
3.学生需保质、保量、保时间进度地提交规范的课程设计报告,审查由指导教师负责。
四、教学内容。
1.主要内容:应用所掌握的线性表、树、图等数据结构知识解决实际问题。2.软件开发工具:c/c++、java。
3.课程设计题目:指导教师拟定(参考题目见附录1)。
4.具体步骤:指导教师拟定设计题目,学生研究具体问题、进行需求分析、选择合适的数据结构、设计算法、编写并调试代码、书写文档材料、提交设计报告,最后,由指导教师验收并评定成绩。
5.设计内容及时间安排:第1-3天,选定题目,明确题目要求、确定数据结构、设计算法,并分析算法复杂度;第4-8天,编写程序、调试程序、测试程序;第9-10天,撰写设计报告,准备答辩(上机演示,回答教师提问)。6.设计报告书写要求:按照软件开发规范的要求书写设计报告(参见附录三报告书写格式);要求报告层次结构清晰、图表完整、语言通顺、字迹工整。7.验收要求:1)运行所设计的程序;2)回答有关问题;3)提交课程设计报告(打印或手写在实习报告册上);4)提交软盘(源程序)。(鼓励学生创新。对内容有创新者,成绩评定将适当提高)。
五、考核方法。
学习成绩的评定方式:考查。
课程设计成绩评定=平时出勤(20%)+设计报告(40%)+答辩(40%)通过设计答辩方式,并结合学生的动手能力,独立分析解决问题的能力和创新精神,总结报告和答辩水平以及学习态度综合考评。成绩分为优、良、中、及格和不及格五等。
六、教材与参考资料1.建议教材:
2.建议参考书目:
附录一。
参考题目(可分若干组,每个学生选择其中一个题目)。
1.商厦家电库存管理2.排序算法的时间比较。
16.文字统计系统—文字研究助手17.修道士野人问题18.考试问题。
19.计算机辅助考核系统20.学籍管理系统。
注:学生可以自选题目或选择指导老师拟定的题目。
附录二。
开发步骤。
1.分析题目的要求、目的;2.选择适当的数据结构;
3.抽象数据类型的设计;4.抽象数据类型的实现;5.编写代码、上机调试;6.总结验收、评价。
附录三报告书写格式。
1.问题描述。
题目内容、基本要求2.需求分析。
软件的基本功能、输入/输出形式、测试数据要求3.概要设计。
所需的adt及作用、主程序流程及模块调用关系4.详细设计。
编码与调试过程中遇到的问题及解决的办法,还存在哪些没有解决的问题?6.使用说明。
简要说明程序运行操作步骤7.测试结果。
8.课程设计心得体会。
1004012033陈孝婕10计本3“数据结构与算法”这门课程对于计算机科学与技术系的学生来说是非常重要的课程。这门课程主要包括十个章节。
一.每章主要知识点总结和个人掌握情况。
第一章主要要求学生掌握数据、数据类型、数据结构、算法及算法分析等基本概念和基础知识。另外,第一章结合课程学习要求,复习和掌握算法描述工具--c语言中的指针类型与指针变量、结构类型与结构变量、函数与参数、递归定义和递归函数、动态存储分配、文件操作、程序测试和测试集、测试数据的设计和程序调试等问题。
从这一章中我不仅学到了数据结构的基本概念和基础知识,了解到什么是数据结构,我们为什么要学习数据结构这门课程。而且复习了大一下学期所学的c语言程序课程设计中的算基本法语句。有利于数据结构与算法后面课程的学习。
第二章主要学习顺序表(包括顺序串)数据类型、数据结构、基本算法及相关应用。知识点包括顺序表的概念、数据结构定义、数据类型描述、基本算法的实现及其性能的分析等知识;还有“查找”和“排序”的概念,“查找”包括3种查找方式:简单顺序查找、二分查找、分块查找;“排序”包括直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序和归并排序(重点为二路归并排序)6种排序方式;掌握应用顺序表来进行查找和排序的各类算法以及不同的查找和排序算法间的性能差异。在此基础上,理解顺序串的相关应用。
从这一章中我学习到各种不同的查找方法和排序方式,其中二分查找作为重点查找方法我进行了重点学习,熟悉并熟练地运用二分查找并且了解到各种排序方法适合于不同的顺序表。对于顺序串的学习,我主要掌握了字符串的基本运算,包括:求串长strlen(s)、连接stract(st1,st2)、求子串substr(s,i,j)、比较串的大小strcmp(s,t)、插入insert(s1,i,s2)、删除delete(s,i,j)、子串定位index(s1,s2)、置换(replace(s1,i,j,s2)、replace(s,t,v)两种)。
第三章主要学习链表(单聊表、循环链表)的概念、数据结构、数据类型描述、基本算法以及链表相关应用。需要掌握各种链表的概念、数据结构定义、基本算法实现以及算法的性能分析等知识,掌握链表的相关应用方法,在此基础上掌握链串的相关知识。
通过这一章我学习了另一种数据结构——链表,在逻辑结构上,链表与顺序表一样,也是线性逻辑结构;单链表借助“地址”的概念,使用了链式存储结构,产生了一种新的数据结构——链表,链表的基本操作是地址运算,在此基础上构成的链表基本算法的特点也就不同,从链表算法的功能看,链表的基本运算与顺序表基本相同,但实现方法和过程与顺序表是不同的,链表可分为静态链表和动态链表两种。这一章我学习到的实际应用是链表的创建、插入和删除等基本操作。循环链表的建立和查询方法。
第四章主要知识点是在两种不同的存储结构下设计的堆栈,即顺序栈和链栈。主要内容是顺序栈和链栈的概念、数据类型、数据结构定义和基本运算算法及其性能分析。通过对本章的学习,要求掌握顺序栈及链栈的数据类型描述、数据结构、基本算法及其性能分析等知识。在此基础上,了解堆栈的相关应用,掌握应用堆栈解决实际问题的思想及方法。
通过对这一章的学习,我了解了堆栈的概念,堆栈的原理、创建方法以及使用方式。“后进先出”是其基本原则。利用堆栈可以轻松方便的解决对称问题以及括号匹配等问题。堆栈与顺序表、链表不同的是,堆栈只能对一端的数据元素进行操作,即只在栈顶进行元素的插入和删除。掌握顺序栈和链表的存储结构是学习堆栈的要素之一。堆栈是一类常用的数据结构,被广泛应用于各种程序设计中。
第五章的重点知识是在顺序存储和链接存储下的两种队列——顺序(循环)队列和链队。
列的数据结构、基本运算及其性能分析以及应用。通过本章的学习,要求掌握顺序队列(重点是循环队列)及链队列的概念、数据类型描述、数据结构、基本算法及其性能分析等知识。在此基础上,了解队列的相关应用,掌握应用队列来解决实际问题的思想及方法。
通过这一章的学习,我掌握了队列的定义,概念,创建以及“对头删除”,“队尾插入”的原则。重点了解了判断循环队列空和满的判断条件。同堆栈一样,队列也是一种具有线性逻辑结构、运算受限制的数据结构。与堆栈只在一端(栈顶)进行元素的插入和删除运算不同的是,队列是在对头进行插入,而在队尾完成数据元素的删除,所以队列的算法和适用的应用问题与堆栈有很大的区别。队列作为一类常用的数据结构,被广泛应用于各种程序设计中。
第六章主要学习数组、系数矩阵和广义表的基本概念、集中特殊矩阵的存储结构及基本运算,在此基础上学习特殊矩阵的计算算法与广义表应用等相关问题。通过本章的学习,要求掌握特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解稀疏矩阵的计算和广义表的存储结构及其基本运算。了解矩阵与广义表的相关应用。
通过这章的学习和前几章的比较,我了解到前几章的线性结构中的数据元素都是非结构的原子类型,即每一个元素都是不可再分解的。本章讨论的数组和广义表等数据结构可以看成是在前几章线性结构基础上的一个扩展:组成该数据结构的数据元素本身也是一个数据结构。矩阵计算应该数值计算方面的问题,由于矩阵和数组的关系以及特殊矩阵存储结构的复杂性,进而使得特殊矩阵的存储结构和算法也表现出其特殊性,所以数据机构课程应该解决其计算问题。
第七章的学习重点是二叉树的概念、数据类型、数据结构定义和各种基本算法,在此基础上介绍二叉树的一些应用问题。通过本章的学习,我掌握了二叉树概念及其性质、二叉树的逻辑结构和存储结构等知识,掌握二叉树的建立、遍历、线索化等基本概念和算法及性能分析,能熟练应用二叉树这章结构来解决一些实际问题,如哈夫曼树及哈夫曼编码、查找与排序(二叉树排序)等问题。了解堆栈排序及其算法等知识。二叉树是非线性数据结构,是树形结构的一种特殊形式。在现实生活有许多数据关系可抽象为树或二叉树的形式。本章中的二叉树的概念及其性质、二叉排序树、存储结构、遍线索(化)、基本算法为重点内容,二叉排序树的应用为难点内容。
第八章的学习重点是树和森林的数据结构、基本算法及其性能分析,树和森林与二叉树间的转化算法等,在此基础上介绍树的应用——b-树。通过本章的学习,我掌握了树和森林的概念和性质、数据结构、树的基本算法及性能分析、树与二叉树间的转换及其算法,并能应用b-树来实现数据元素的动态查找。舒适一种非线性结构,它在二叉树的基础上做了更为一般化的扩展,而森林是树的集合。在树结构中,每一个元素最多只有一个前驱,但可能有多个后继。现实生活中的家族关系、单位的组成结构等,均可抽象为树的形式。
第九章学习重点是散列结构的相关知识,学习常用的散列函数和冲突处理方法,散列表的常用算法及其性能分析,通过本章的学习,我掌握了散列结构和散列函数的相关概念,掌握散列结构的存储(散列表)的相关概念,要求掌握散列冲突处理方法(散列法)的相关知识,并能灵活运用散列法解决应用问题。
散列结构是使用散列函数建立数据结点关键字与存储地址之间的对应关系并提供多种当数据节点存储地址发生“冲突”时的处理方法而建立的一种数据结构。散列结构的查找等运算效率是很高的,本章中的散列函数、散列结构、散列表、散列法的基本概念和基本算法是重点,线性探测散列算法、链地址法散列算法和散列法的应用是难点。
第十章的学习重点是图的定义及性质,图的四种存储结构,图的两种遍历算法以及图的典型应用,包括最小生成树、最短路径、拓扑排序和关键路径等。通过本章学习,我掌握了图的概念和基本性质,图的存储结构(邻接矩阵和邻接表)及其基本算法、图的遍历及算法、图的最小生成树普利姆算法或者克鲁斯卡尔算法、图的最短路径迪杰斯特拉算法和弗洛伊德算法、有向无环图拓扑排序算法。了解了图的逆邻接表、十字链表、邻接多重表存储结构及其基本算法、关键路径求解算法,并能灵活运用图的不同的数据结构和遍历算法解决复杂的应用问题。
二.课程学习体会。
在学习开始的时候,老师就明确提出它不是一种计算机语言,不会介绍c语言的变成语言,而是通过学习可以设计出良好的算法,高效地组织数据。一个程序无论采用何种语言,其基本算法思想不会改变。联系到在大一和大二上学期学习的c和c++语言,我深刻认识到了这一点。“软件开发好比写作文,计算机语言提供了许多华丽的辞藻,而数据结构则考虑如何将这些辞藻组织成一篇优秀的文章来。”在学习这门课中,要熟悉对算法思想的一些描述手段,包括文字描述、图形描述和计算机语言描述等。因此,计算机语言基础是必须的,因为它提供了一种重要的算法思想描述手段——机器可识别的描述。
这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。
1、建议在上课过程中加大随堂练习的分量,以便学生能当堂消化课堂上学习的知识,也便于及时了解学生对知识点的掌握情况,同时有助于学生上课积极思考,不会开小差。
2、建议在课时允许的情况下,增加习题课的分量,通过课堂的习题讲解,加深对知识点的掌握,同时对各知识点的运用有一个更为直观和具体的认识。
以上便是我对《数据结构与算法》这门课的学习总结,我会抓紧时间将没有吃透的知识点补齐。今后我仍然会继续学习,克服学习中遇到的难关,在打牢基础的前提下向更深入的层面迈进!
计算机技术已成为现代化发展的重要支柱和标志,并逐步渗透到人类生活的各个领域。随着计算机硬件的发展,对计算机软件的发展也提出了越来越高的要求。由于软件的核心是算法,而算法实际上是对加工数据过程的描述,所以研究数据结构对提高编程能力和设计高性能的算法是至关重要的。
非数值计算问题的数学模型不再是传统的数学方程问题,而是诸如表、树、图之类的数据结构。因此,简单地说,数据结构是一门研究非数值计算的程序设计问题的学科,主要研究数据的逻辑结构、存储结构和算法。
一、教学目的与要求---了解数据的逻辑结构和物理结构;
教学要求在每章教学内容给出,大体上为三个层次:了解、掌握和熟练掌握。他们的含义大致为:了解是正确理解概念,掌握是学会所学知识,熟练掌握就是运用所学知识解决实际问题。
教学目的为:了解算法对于程序设计的重要性;学习掌握基本数据结构的描述与实现方法,熟练掌握典型数据结构及其应用算法的设计。了解算法分析方法。
二、教学重点与难点--数据结构中基本概念和术语,算法描述和分析方法。
1、链表插入、删除运算的算法。算法时间复杂度。
2、后缀表达式的算法,数制的换算。
利用本章的基本知识设计相关的应用问题。
3、循环队列的特点及判断溢出的条件。
利用队列的特点设计相关的应用问题。
4、串的模式匹配运算算法。
5、二叉树遍历算法的设计。
利用二叉树遍历算法,解决简单应用问题哈夫曼树的算法。
6、图的遍历。
最小生成树。
最短路径。
7、二叉排序树查找。
平衡树二叉树。
8、堆排序。
快速排序归并排序。
四、教学内容、目标与学时分配。
教学内容教学目标课时分配。
1、绪论。
逻辑结构与存储结构。
算法和算法分析。
2、线性表。
线性表的定义与运算。
线性表的顺序存储。
线性表的链式存储。
3、栈。
栈的定义与运算。
栈存储和实现。
栈的应用举例。
4、队列。
队列的定义与基本运算。
队列的存储与实现。
队列的应用举例。
5、串。
串的定义与基本运算。
串的表示与实现。
串的基本运算。
6、树和二叉树。
树的定义和术语。
二叉树树的基本概念和术语遍历二叉数和线索二叉树。
二叉树的转换。
二叉树的应用。
哈夫曼树及其应用。
7、图。
图的定义和术语。
图的存储结构。
图的遍历算法。
图的连通性。
8、查找。
查找的基本概念与静态查找动态查找。
哈希表。
了解。
了解。
掌握。
熟练掌握顺序表存储地址的计算。
掌握单链表的结构特点和基本运算。
掌握双链表的结构特点和基本运算。
掌握栈的定义与运算。
掌握栈的存储与实现。
熟练掌握栈的各种实际应用。
掌握队列的定义与基本运算。
熟练掌握队列的存储与实现。
掌握循环队列的特征和基本运算。
了解串的逻辑结构。
掌握串的存储结构。
熟练掌握串的基本运算。
了解。
了解二叉树。
熟练掌握二叉树定义和存储结构。
了解二叉树的遍历算法。
掌握。
掌握哈夫曼的建立及编码。
了解。
了解。
熟练掌握。
熟练掌握。
了解。
熟练掌握。
了解哈希表与哈希方法。
4学时。
1学时。
1学时。
2学时。
8学时。
2学时。
2学时。
4学时。
8学时。
2学时。
2学时。
4学时。
6学时。
2学时。
2学时。
2学时。
6学时。
2学时。
2学时。
2学时。
12学时。
2学时。
2学时。
2学时。
2学时。
2学时。
2学时。
8学时。
2学时。
2学时。
2学时。
2学时。
8学时。
4学时。
2学时。
2学时。
9、排序。
12学时插入排序。
熟练掌握基本思想。
3学时快速排序。
了解各种内部排序方法和特点。
3学时选择排序。
掌握。
2学时各种排序方法比较。
掌握。
2学时。
实验内容实验目标课时分配算法编程实验:
1、用指针方式编写程序复习c(c++)语言指针、结构体等的用法。
2、对单链表进行遍历。
链表的描述与操作实现。
3、栈及其操作。
描述方法及操作。
4、编写串子系统1串的特点及顺序定长存储、操作、查找。
5、编写串子系统2串的特点及顺序定长存储、操作、查找。
6、编写树子系统1二叉树的特点及存储方式、创建、显示、遍历等。
7、编写树子系统2二叉树的特点及存储方式、创建、显示、遍历等。
8、图子系统。
图的邻接矩阵的存储、遍历、广度/深度优先搜索。
9、查找子系统。
理解查找基本算法、平均查找长度、静态、动态查找等。
五、考试范围与题型。
1、考试范围与分数比例。
1)绪论。
12%2)线性表。
17%3)栈。
7%4)队列。
6%5)串。
4%6)树和二叉树。
14%7)图。
15%8)查找。
4%9)排序。
21%。
2、考试题型与分数比例。
1)名词解释。
18%2)判断对错。
16%3)填空。
16%4)单项选择。
18%5)应用。
32%。
六、教材与参考资料。
1、教材:实用数据结构基础(谭浩强)中国铁道出版社。
(撰写人:
审核人:2学时2学时2学时2学时2学时2学时2学时2学时2学时)。
数据结构与算法课程设计(汇总8篇)
文件夹