数据结构总结论文

数据结构课程总结与感想

课程总结:

第一章 绪论

本章主要起到总领作用,对数据结构的学习进行进行了一些先期铺垫。主要是数据结构的基本概念,时间和空间复杂度的概念及度量方法,算法设计时的注意事项。

第二章 线性表

本章主要介绍了线性表的相关基本概念,前驱、后继、表长、空表、首元结点,头结点,头指针等概念。线性表除第一及最后一个元素外,每个结点都只有一个前趋和只有一个后继的结构特点。线性表的顺序存储方式及其在具体语言环境下的两种不同实现:表空间的静态分配和动态分配,静态链表与顺序表的相似及不同之处。线性表的链式存储方式及以下几种常用链表的特点和运算:单链表、循环链表,双向链表,双向循环链表。其中,单链表的归并算法、循环链表的归并算法、双向链表及双向循环链表的插入和删除算法等。线性表的顺序存储及链式存储情况下,其不同的优缺点比较,即其各自适用的场合。单链表中设置头指针、循环链表中设置尾指针而不设置头指针以及索引存储结构的各自优点。

第三章 栈和队列

本章主要学习了栈、队列的定义及其相关数据结构的概念,包括:顺序栈,链栈,循环队列,链队等。栈与队列存取数据的特点,栈是后进先出而队列则是先进先出。以及递归算法,栈与递归的关系,借助栈将递归转向于非递归的经典算法:fibonacci数列问题、hanoi问题等。栈的应用:数值表达式的求解,括号的配对等的原理。循环队列中判队空、队满条件,循环队列中入队与出队算法。

第四章 串

本章主要是了解串的基本概念,串与线性表的关系,空串与空格串的区别,串相等的条件,串的基本操作,以及这些基本函数的使用,包括:取子串,串连接,串替换,求串长等等。顺序串与链串及块链串的区别和联系,以及实现方式。

第五章 数组和广义表

本章学习了数组的定义,数组的顺序表示和实现。矩阵的压缩存储一节中学习了特殊矩阵和稀疏矩阵的压缩储存,其次是学习广义表的定义,广义表的存储结构,广义表的递归算法:求广义表的深度、复制广义表的算法、建立广义表的存储结构。

第六章 树与二叉树

第六章主要介绍了二叉树的概念、性质和存储结构,二叉树遍历的三种算法(递归与非递归),在三种基本遍历算法的基础上实现二叉树的其它算法,线索二叉树的概念和线索化算法以及线索化后的查找算法,最优二叉树的概念、构成和应用,树的概念和存储形式,树与森林的遍历算法及其与二叉树遍历算法的联系,树与森林和二叉树的转换。

学习数据结构感受:

在刚拿到这本书的时候就浏览了一遍,大体感觉上和上学期学的C语言程序设计有了很大的改变。虽然程序设计和数据结构都是基于C语言这门计算机语言所编写的书,但是数据结构的侧重点有所改变,程序设计这本书总体上是注重程序语言语法以及函数的使用,而这学期学的数据结构则将重点放在了编程的核心上“算法”。数据结构整本书介绍了各种数据结构的算法,例如线性表、栈和队列、串、数组和广义表以及树和二叉树等。在初次学习的时候感觉数据这门课有很大难度,首先是对大多数算法难以理解,就更不用说去自主编写算法了。数据结构真本书引入很多算法符号,刚开始的时候对大多数符号都不理解,自然对算法就很难理解,在对这些符号做了一些了解之后,再回头来开那些算法的时候感觉熟悉了很多,大概能看懂算法功能,但在一些细节上,比如在一些特殊的语法上还是有一定理解难度。这本书给我最大的疑惑就是没有一段完整的程序,都是一些算法或者是是一些程序段,将这些输入计算机根本无法运行,这就是这本书最大的缺点,只有一些理论知识,而没有实践,知识的过于理论化也给我们的学习带来了相当大的难度。

学完数据结构这本书后,我学会了多种存储数据方式,如使用线性表、栈和列队、串等等数据结构。在学习线性表的时候,刚开始学的顺序表和单链表时难度不是很大,但在学到循环链表和双向链表时就感觉有点难,算法上复杂了一点。经过反复的摸索和查询大体上学会了线性表的使用,但是算法依然只停留在理解上,要独立自主编写一个算法仍然有很大的难度。紧接着进入第三章的学习栈和队列,在对栈定义理解上没有什么难度,栈和线性表有类似的地方,但是栈有其自身的特点,在学习栈的时候难度在于栈的应用上,如在迷宫求解和栈与递归的实现上有一定的难度。在后来的队列学习上没有什么特别大的难度。接下来串与数组和广义表的学习与前两章的学习情况基本上相同,大多数定义都还能理解,但是在算法的学习上还是有一定的难度的。但在第六章的学习上就较为简单了,这一张结合图形的理解来学习,形象生动图形表示给学习这一章节带来了巨大的帮助,其次关于树的学习在上学期学的离散数学课本中也有所体现,并且有很多知识是通用的,所以也给这一章的学习提供了辅助作用。这本数据结构给我的总体感受是过于理论化缺少实践操作,没有提供具体的实验操作步骤,所以在实验时有一定的难度。学完这本书以后总体的感觉就是在算法的学习上有点难,但是大多数数据结构的定义还是比较容易理解的;总而言之,学完数据结构以后熟悉掌握了各种数据结构的定义,能看懂一些基本算法并知道它们的功能,但在一些新算法的编写上还是有一些困难,需要更多的上机实践来锻炼算法的编辑能力。

 

第二篇:数据结构总结

本学期开设的《数据结构与算法》课程已经告一段落,现就其知识点及其掌握情况、学习体会以及对该门课程的教学建议等方面进行学习总结。一、《数据结构与算法》知识点在课本的第一章便交代了该学科的相关概念,如数据、数据元素、数据类型以及数据结构的定义。其中,数据结构包括逻辑结构、存储结构和运算集合。逻辑结构分为四类:集合型、线性、树形和图形结构,数据元素的存储结构分为:顺序存储、链接存储、索引存储和散列存储四类。紧接着介绍了一些常用的数据运算。最后着重介绍算法性能分析,包括算法的时间性能分析以及算法的空间性能分析。第二章具体地介绍了顺序表的概念、基本运算及其应用。基本运算有:初始化表、求表长、排序、元素的查找、插入及删除等。元素查找方法有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序及归并排序等。最后介绍了顺序串的概念,重点在于串的模式匹配。链表中数据元素的存储不一定是连续的,还可以占用任意的、不连续的物理存储区域。与顺序表相比,链表的插入、删除不需要移动元素,给算法的效率带来较大的提高。链表这一章中介绍了链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结构、功能和基本算法。堆栈与队列是两种运算受限制的线性结构。其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵循“先进后出”的规则,对堆栈的操作只能在栈顶进行;而队列要遵循“先进先出”的规则,教材中列出了

两种结构的相应算法,如入栈、出栈、入队、出队等。在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。第六章介绍了特殊矩阵和广义表的概念与应用。其中,特殊矩阵包括对称矩阵、三角矩阵、对角矩阵和稀疏矩阵,书中分别详细介绍了它们的存储结构。稀疏矩阵的应用包括转置和加法运算等。最后介绍了广义表的相关概念及存储结构,关于它的应用,课本中举了m元多项式的表示问题。

第七章二叉树的知识是重点内容。在介绍有关概念时,提到了二叉树的性质以及两种特殊的二叉树:完全二叉树和满二叉树。接着介绍二叉树的顺序存储和链接存储以及生成算法。重点介绍二叉树的遍历算法(递归算法、先序、中序和后序遍历非递归算法)和线索二叉树。二叉树的应用:基本算法、哈弗曼树、二叉排序树和堆排序。树与二叉树是不同的概念。教材介绍了树和森林的概念、遍历和存储结构,还有树、森林和二叉树的相互关系,树或森林怎样转化成二叉树,二叉树又如何转换为树和森林等算法。散列结构是一种查找效率很高的一种数据结构。本章的主要知识点有:散列结构的概念及其存储结构、散列函数、两种冲突处理方法、线性探测散列和链地址散列的基本算法以及散列结构的查找性能分析。最后一章介绍了图的概念及其应用,是本书的难点。图的存储结构的知识点有:邻接矩阵、邻接表、逆邻接表、十字链表和邻接多重表。图的遍历包括图的深度优先搜索遍历和广度优先搜索遍历。其余知识点有:有向图、连通图、生成树和森林、最短路径问题和有向无环图及其应用。有向无环图重点理解AOV网和拓扑排序及其算法。二、对各知识点的掌握情况总体来看,对教

材中的知识点理解较为完善,但各个章节均出现有个别知识点较为陌生的现象。现将各个章节出现的知识点理解情况列举如下。第一章中我对数据和数据结构的概念理解较为透彻,熟悉数据结构的逻辑结构和存储结构。而对算法的时间、空间性能分析较为模糊,尤其是空间性能分析需要加强。第二章,顺序表的概念、生成算法理解较为清晰,并且熟悉简单顺序查找和二分查找,对分块查找较为含糊;排序问题中,由于冒泡排序在大一C语言课上已经学习过,再来学习感觉很轻松。对插入排序和选择排序理解良好,但是,在实际运用中仍然出现明显不熟练的现象。由于在归并排序学习中感觉较吃力,现在对这种排序方法仍然非常模糊,所以需要花较多的时间来补习。此外串的模式匹配也是较难理解的一个地方。链表这一章中,除对双向循环链表这一知识点理解困难之外,其他的知识点像单链表的建立和基本算法等都较为熟悉。接下来的有关堆栈以及队列的知识点比较少,除有关算法较为特殊以外,其余算法都是先前学过的顺序表和链表的知识,加上思想上较为重视,因此这部分内容是我对全书掌握最好的一部分。不足之处仍然表现在算法的性能分析上。在学习第六章时感觉较为吃力的部分在于矩阵的应用上,尤其对矩阵转置算法的C语言描述不太理解。稀疏矩阵相加算法中,用三元组表实现比较容易理解,对十字链表进行矩阵相加的方法较为陌生。第七章是全书的重点,却也有一些内容没有完全理解。在第一节基本概念中,二叉树的性质容易懂却很难记忆。对二叉树的存储结构和遍历算法这部分内容掌握较好,能够熟练运用,而对于二叉树应用中的哈弗曼树却比较陌生。第八章内

容较少,牵涉到所学的队列的有关内容,总体来说理解上没有什么困难,问题依旧出现在算法的性能分析上。散列结构这一章理解比较完善的知识点有:基本概念和存储结构。散列函数中直接定址法和除留余数法学得比较扎实,对数字分析法等方法则感觉较为陌生。对两种冲突处理的算法思想的理解良好,问题在于用C语言描述上。最后一章,图及其应用中,图的定义、基本运算如图的生成等起初理解有困难,但随着学习深入,对它的概念也逐步明朗起来。邻接矩阵、邻接表和逆邻接表掌握较好,而对十字链表和邻接多重表则较为陌生。感觉理解较为吃力的内容还有图的遍历(包括深度和广度优先遍历),最小生成树问题也是比较陌生的知识点。最短路径和AOV网学习起来感觉比较轻松,而对于C语言描述却又不大明白。三、学习体会接触这门课程以前,我对该课程所学的内容有许多疑点,例如:这门课是否是在介绍一种新的计算机语言?如果不是,那么学习这门课程的用途是什么?为什么市面上各种介绍数据结构的资料采用了不同的计算机语言,如C、C++还有Java?我的C语言学得不好,对学习这门课是否有影响??在学习伊始,老师就明确提出它不是一种计算机语言,不会介绍新的关键词,而是通过学习可以设计出良好的算法,高效地组织数据。一个程序无论采用何种语言,其基本算法思想不会改变。联系到在大一和大二上学期学习的C和C++语言,我深刻认识到了这一点。“软件开发好比写作文,计算机语言提供了许多华丽的辞藻,而数据结构则考虑如何将这些辞藻组织成一篇优秀的文章来。”在学习这门课中,要熟悉对算法思想的一些描述手段,包括文字描述、

图形描述和计算机语言描述等。因此,计算机语言基础是必须的,因为它提供了一种重要的算法思想描述手段——机器可识别的描述。这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。四、对《数据结构与算法》课程教学的建议1、建议在上课过程中加大随堂练习的分量,以便学生能当堂消化课堂上学习的知识,也便于及时了解学生对知识点的掌握情况,同时有助于学生保持良好的精神状态。2、建议在课时允许的情况下,增加习题课的分量,通过课堂的习题讲解,加深对知识点的掌握,同时对各知识点的运用有一个更为直观和具体的认识。以上便是我对《数据结构与算法》这门课的学习总结,我会抓紧时间将没有吃透的知识点补齐。今后我仍然会继续学习,克服学习中遇到的难关,在打牢基础的前提下向更深入的层面迈进!

相关推荐