数据结构与算法课程学习总结
2010年 5月 17日
班级:08计本(2)班姓名:谷敏敏学号:0804012023
时光飞逝,转眼之间,经过十几周的学习,“数据结构与算法”这门课程也已经接近尾声。
通过学习、实验,我们明白“数据结构与算法”这门课是我们计算机专业人才培养计划中的一门必修的核心课程,同时也是计算机科学与技术专业同学的一门重要的基础专业课,重要之处不言而喻,所以,对于这门课大家也是比较认真投入的,学的也是比较尽心。
当然这还与老师独特的教学风格以及不少的实验训练是密不可分的。
对于本学科的知识内容的概括、总结可如下所示:
1.第一章中是介绍的本学科的的一些基础、相关概念,如数据、数据元素、数据类型
以及数据结构的定义。
其中,数据结构包括逻辑结构、存储结构和运算集合。
逻辑
结构分为四类:集合型、线性、树形和图形结构,数据元素的存储结构分为:顺序
存储、链接存储、索引存储和散列存储四类。
紧接着介绍了一些常用的数据运算。
最后着重介绍算法性能分析,包括算法的时间性能分析以及算法的空间性能分析。
2.第二章具体地介绍了顺序表的概念、基本运算及其应用。
基本运算有:初始化表、
求表长、排序、元素的查找、插入及删除等。
而关于元素查找方法课本例举了多种
方法,有:简单顺序查找、二分查找和分块查找。
排序方法有:直接插入排序、希
尔排序、冒泡排序、快速排序、直接选择排序及归并排序等。
最后介绍了顺序串的
概念以及字符处理问题,其重点核心内容在于串的模式匹配。
3.第三章介绍的是链表及其应用,链表中数据元素的存储不一定是连续的,还可以占
用任意的、不连续的物理存储区域。
与顺序表相比,链表的插入、删除等功能是不
需要移动元素的,只需变化指针的取向即可,算法简单快捷,。
链表这一章中介绍
了链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、
查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结
构、功能和基本算法。
4.第四章和第五章是关于堆栈和队列的介绍与应用。
堆栈与队列是两种运算受限制的
线性结构。
其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵
循“先进后出”的规则,对堆栈的操作只能在栈顶进行;而队列要遵循“先进先
出”的规则,课本中列出了两种结构的相应的基本算法,如入栈、出栈、入队、出
队等。
在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。
同时,
对于其应用也分别讲述了如括号匹配问题等。
5.第六章介绍了特殊矩阵和广义表的概念与应用。
其中,特殊矩阵包括对称矩阵、三
角矩阵、对角矩阵和稀疏矩阵等,课本中分别详细介绍了它们的存储结构。
稀疏矩
阵的应用包括转置和加法运算等。
最后介绍了广义表的相关概念及存储结构,关于
关于广义表的应用有:m元多项式的表示问题。
6.第七章是关于二叉树及其应用。
在介绍有关概念时,提到了二叉树的性质以及两种
特殊的二叉树:完全二叉树和满二叉树。
接着介绍二叉树的顺序存储和链接存储以
及生成算法。
重点介绍二叉树的遍历算法(递归算法、先序、中序和后序遍历非递
归算法)和线索二叉树。
二叉树的应用:基本算法、哈弗曼树、二叉排序树和堆与
堆排序。
本章为本课程重点内容,需要重点掌握。
7.第八章是树与森林的介绍,本章中的树与二叉树是不同的概念。
课本中介绍了树和
森林的概念、遍历和存储结构,还有树、森林和二叉树的相互关系,树或森林怎样
转化成二叉树,二叉树又如何转换为树和森林等算法。
对其应用着重介绍了B树。
8.第九章是散列结构,散列结构是一种查找效率很高的一种数据结构。
本章的主要知
识点有:散列结构的概念及其存储结构、散列函数、两种冲突处理方法、线性探测
散列和链地址散列的基本算法以及散列结构的查找性能分析。
9.第十章介绍了图的概念及其应用,是本书的难点。
图的存储结构的知识点有:邻接
矩阵、邻接表、逆邻接表、十字链表和邻接多重表。
图的遍历包括图的深度优先搜
索遍历和广度优先搜索遍历。
其余知识点有:有向图、连通图、生成树和森林、最
短路径问题和有向无环图及其应用。
有向无环图重点理解AOV网和拓扑排序及其算
法。
关于对各章的掌握情况,从总体来来看,对教材中的知识点理解还是较全面的,当然不是很懂的盲点、不能熟练掌握的知识点也是有不少。
在第一章中,关于数据和数据结构的概念以及数据结构的逻辑结构和存储结构理解还是比较容易的,对算法的时间、空间性能分析较为模糊,不易理解。
对于第二章,顺序表的概念理解起来还是较为清晰的,关于其顺序表元素的查找算法中关于插入排序和选择排序等算法理解还好,但是,在实际运用中仍然出现明显不熟练的现象。
使用起来较为吃力,时而模糊,故还是需加强训练力度。
对于链表这一章中总体来说还是掌握非常好的,在接下来的有关堆栈以及队列的两章中主要是介绍两种的基本算法使用,以及运用堆栈和队列的一些实例应用。
总体来说队列中的循环队列有点难度,需好好理解才行。
在学习第六章时感觉较为吃力的部分在于矩阵的应用上,尤其对矩阵转置算法的C语言描述不太理解。
稀疏矩阵相加算法中,用三元组表实现比较容易理解,对十字链表进行矩阵相加的方法较为陌生,使用的也是比较少。
第七章二叉树是全书的重点,需要重点掌握的,概念理解还是比较容易的,但是关于二叉树的建立算法中使用层次遍历建立此二叉树理解起来还是有点难度,不容易搞清楚,算法也是比较繁琐,使用较多的思想是递归调用,此思想简单容易,是二叉树该章的算法设计中常用的思想。
对于哈弗曼树和二叉排序树重在理解,能够准确画出此类二叉树。
关于第八章主要是二叉树与树、森林之间的相互转化以及B树的建立,掌握好定义,还是不难的。
关于第九章散列结构这一章理解比较完善的知识点有基本概念和存储结构等。
散列函数中直接定址法和除留余数法学得比较扎实,但是对于对数字分析法等方法则感觉较为陌生,对两种冲突处理的算法思想的理解良好,主要问题在于算法的设计上面已经程序的实现。
第十章,图及其应用中,图的定义、基本运算如图的生成等起初理解还是比较容易的,毕竟我们刚学过离散数学,对于这些基础概念还是有点印象。
但随着学习深入,所要掌握研究的知识点也是越来越多,邻接矩阵、邻接表和逆邻接表掌握较好,而对十字链表和邻接多重表则感觉有点吃力,估计主要是实验时候用的比较少的缘故。
理解较为吃力的内容还有图的遍历即深度和广度优先搜索遍历,主要是算法的程序实现不容易掌握,最小生成树问题也是比较陌生的知识点,不过关于最短路径和AOV网学习起来感觉比较轻松,毕竟定义还是比较明朗的,不过C语言实现这些理解起来还是很不容易的。
学习体会,在学习这门课程之前,对本门课程的认知基本停留在这是计算机专业的入门基础课程,地位十分重要。
但是也局限于此,更深入的了解也为数不多的一点点。
不清楚本门课程究竟是研究、学习哪方面的内容,是介绍一种新的计算机语言?用途又是什么呢?怀着这些那些的问题我们走进了数据结构与算法这门学科,通过学习,理解我们明白了它的内涵与用途,数据结构与算法这门学科不是一种计算机语言,而是通过学习可以设计出良好的算法,高效地组织数据并通过C语言实现出来。
学习得算法的思想、如何更好、更快捷的设计出一个优秀的程序,算法无论采用何种语言实现,其本质基本算法思想不会改变。
故本门
学科的意义之处那是呼之欲出,整个算法设计的核心之处。
在学习这门课中,要熟悉对算法思想的一些描述手段,包括文字描述、图形描述和计算机语言描述等。
因此,计算机语言基础是必须的,即C语言还是需要好好掌握的,不然空有一套套的思想理论,但是真正使用程序来实现就不会游刃有余,困难重重。
在本门课程中一个最突出的问题在于,教材上的知识理解起来还是比较容易的,但是对于其知识的熟练灵活使用却总是差强人意,不堪入目,十分棘手不容易运行出来,对于使用教材知识来设计出一个个的算法思想有点困难的。
即使设计出来了但也是勉强实现,并不是自认为最好的算法,一些具有高技巧、思想的算法自己还是很难独立自主的设计、编写出来。
对于此种情况,我想最重要的原因还是运用的太过少的缘故,故还是需要加强训练,熟能生巧,只有这样,才能够更容易的设计出高超、快捷及有效的算法。
对于本门课的教学建议,由于本门课程是关于算法设计思想的一门学科,地位在计算机这专业中占有举足轻重的位置,故建议是否在课堂中可以适当的加大一些课程作业典型例题分析讲解的次数,而不仅仅是只重在书本上的知识点的讲解与其中的一些应用,毕竟对知识点的灵活运用是非常重要的,可以通过讲解来使大家更容易的掌握,理解这门学科。
当然这也需要大量的练习来巩固,毕竟理工科类专业还是需要大量的动手、实践操作来更深层次的掌握理解。
以上便是我对《数据结构与算法》这门课的学习总结,学习体会以及教学建议。
也许有的观念、建议差强人意,可毕竟是一家之言,如有不当,还请老师多多包涵。