数据结构与算法课程学习总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构与算法课程学习总结
2010年05月20日
班级:姓名:学号:
一、课程学习内容总结
(1)第一章知识点及主要知识:
本章的重点是数据结构中的逻辑结构、存储结构、数据的运算3个方面的概念及相互关系,难点是算法复杂度的分析方法。

基本概念和术语有数据、数据元素、数据项、数据结构。

特别是数据结构的逻辑结构、存储结构及运算的含义及其相互关系;数据的结构的两大类逻辑结构和4个常用的存储表示方法;算法、算法的时间复杂度和空间复杂度、最坏的和平均时间复杂度等概念,算法描述和算法分析的方法、对一般的算法要能分析出时间复杂度和空间复杂度。

本人掌握知识情况及分析:
通过对这一章的学习,我理解了数据和数据结构的有关概念,熟悉了数据结构的逻辑结构和存储结构。

但对算法的时间、空间性能分析还不太熟练,尤其是空间性能分析需要加强。

(2)第二章知识点及主要知识:
本章介绍了顺序表、顺序串的结构、数据类型、基本运算及相关应用。

顺序表是一种具有线性逻辑结构、顺序存储结构的数据集合,它的一些基本运算包括初始化表、求表长、查找表中元素、插入元素及删除元素等。

其中,实现顺序表的插入与删除运算时要大量移动元素,算法的时间复杂度为O(n)。

顺序串是顺序表的一个特列。

其特别之处在于组成顺序串的数据元素是一组字符。

顺序串的运算主要是针对字符串来进行的,其基本运算大多数都比较简单,只有“子串定位”(串的模式匹配)运算较为复杂。

模式匹配时各种串处理系统中重要的操作之一,本章介绍了模式匹配的简单算法思想。

本人掌握知识情况及分析:
通过对这一章的学习,对于顺序表的概念、生成算法理解较为清晰,并且熟悉简单顺序查找和二分查找,不过对于分块查找较为含糊;在排序问题中,因为冒泡排序在大一C语言课上已经学习过了,再来学习感觉很轻松。

对于插入排序和选择排序理解的不错,但是,在实际运用中仍然出现明显不熟练的现象。

在学习归并排序过程中感觉较吃力,现在对这种排序方法仍然非常模糊,所以需要花较多的时间来补习。

此外串的模式匹配也是我较难理解的一个内容。

(3)第三章知识点及主要知识:
本章介绍了几种链表的结构、数据类型、基本运算及相关的应用。

单链表是一种简单、常用的数据结构。

与顺序表相比,其插入、删除结点不需要移动元素,且不必事先估计存储空间的大小。

所以,应用链表来完成多项式相加、有序表的归并及箱子排序等运算,其时间性能较好。

对单链表中的每个结点增加一个指向其前驱结点的指针域就构成了双向链表。

双向链表的插入操作有前插和后插之分,其操作过程较单链表的复杂、灵活。

链串是链接存储的字符串。

若每个字符占用一个结点空间,链串的存储空间浪费较大;且由于对字符串的操作通常不是针对单个字符进行,所以链串中的每个结点一般存放多个字符,称为块链串。

本章介绍了在结点大小为1的的链块串上实现的串匹配算法,算法的时间复杂度与顺序串上的串匹配算法相同。

本人掌握知识情况及分析:
通过对这一章的学习,对于单链表的概念理解的不错了,并且学会了有关单链表的基本算法,但在双向循环链表这一块知识点上,感觉理解有点困难,在这一方面还需加强
(4)第四章知识点及主要知识:
本章介绍了栈及其相关应用。

栈是一种运算受限制的线性结构,遵守“先进后出”的规则,其插入与删除操作都在栈顶进行。

顺序存储和链接存储的栈分别被称为顺序栈和链栈。

不同的存储结构决定了各种运算实现方法的不同。

在对栈的逻辑结构、存储结构及基本运算介绍的基础上,本章重点介绍了栈的一些基本应用。

栈作为一类重要的数据类型,被广泛应用各种程序设计中。

本章选取了一些典型的应用问题。

分别进行了问题分析,提出了算法思想,并给出了解决问题的算法实现过程,供读者在学习和工作中借鉴使用。

本人掌握知识情况及分析:
通过这一章学习,认识了一种新的线性结构---堆栈,有关堆栈的知识,除有关算法较为特殊以外,新的知识点比较少,因为其余算法都在先前学过的顺序表和链表中遇到过,并且学这一新知识点时比较重视,所以对这部分内容学的还是很不错的,只是仍然在算法的性能分析上有所不足。

(5)第五章知识点及主要知识:
本章介绍了队列及其相关应用。

队列是一种运算受限制的线性结构,遵守“先进先出”的规则,其插入在队尾、删除在对头。

顺序存储和链接存储的队列分别被称为顺序队列和链队列。

由于不断有出队运算,使得顺序队列出现“假溢出”现象,为了避免这种现象发生,同时也为了节省存储空间,我们提出了循环队列的概念。

队列的不同存储结构决定了各种运算的实现方法的不同。

在对队列的逻辑结构、存储结构及基本运算介绍的基础上,本章介绍了队列的一些基本应用。

队列作为一类重要的数据结构,被广泛应用于各种实际问题解决及程序设计中。

本人掌握知识情况及分析:
通过这一章的学习,又认识了一个新的线性结构---队列,并且队列与堆栈一样,都是运算受限制的线性结构,新的知识点也不多,,与堆栈基本算法在思想上大同小异,只要注意它的出对和入队就行。

但对于循环队列还有一些小模糊,腾出时间来把书好好看一看,应该会有所好转。

(6)第六章知识点及主要知识:
本章在介绍数组的概念和存储的方法的基础上,重点介绍了矩阵的存储及应用,以及广义表的相关概念。

矩阵广泛应用于科学与工程计算问题中,通常采用二维数组来存储矩阵。

在数值计算过程中,经常出现一些阶数很高、但其数据元素分布具有一点规律的矩阵,我们称这样的矩阵为特殊矩阵,包括对称矩阵、三角矩阵、对角矩阵和稀疏矩阵。

本章介绍了这些特殊矩阵的存储方法,并重点介绍了稀疏矩阵的存储及应用。

尽管广义表是线性表的一种推广,但它并不是线性表。

本章在介绍了广义表的相关概念的基础上,介绍了广义表的存储结构。

广义表浓缩了线性表、数组等常见数据结构的特点,在有效利用存储空间方面更胜一筹,目前在文本处理、人工智能、代数操作和计算机图形等各领域都具有应用价值。

本人掌握知识情况及分析:
通过这一章的学习,对于矩阵的存储理解的比较好,但对于矩阵的应用确感觉有点吃力,对于书本上的关于矩阵转置算法的C语言描述也不太理解。

在稀疏矩阵相加算法中,用三元组表实现时比较容易理解,但对于十字链表进行矩阵相加的方法还是感觉有点吃力的。

(7)第七章知识点及主要知识:
本章主要内容有二叉树的概念,二叉树的有关性质,两种特殊的二叉树(完全二叉树和满二叉树),二叉树的两种存储结构(顺序存储结构、链式存储结构),二叉树的遍历的递归算法和非递归算法,线索化二叉树算法,二叉树中叶子个数的统计,二叉树的深度计算等。

这些基本问题和基本算法是学习的要点。

在此基础上,本章列出的二叉树应用问题,如表达式求值、哈夫曼树和哈夫曼编码问题、二叉排序树、堆和堆排序等问题。

本人掌握知识情况及分析:
通过对本章的学习,接触到了本书的一个重点内容---二叉树,由于老师上这章之前说过这部分内容的重要性,所以引起了足够的重视,但却也有一些内容没有完全理解。

比如在第一节基本概念中,二叉树的性质4就没有完全理解,还有一些其他的小内容也是如此。

但对二叉树的存储结构和遍历算法这部分内容掌握较好,能够熟练运用,并且对于二叉树应用中的哈弗曼树也比较熟练。

(8)第八章知识点及主要知识:
树在二叉树的基础上做了更为一般化的扩展,而森林是树的集合。

树或森林与二叉树之间有一个自然的一一对应关系。

任何一个森林或一颗树可以唯一地对应到一颗二叉树;反之,任何一颗二叉树也能唯一对应到一个森林或一棵树。

数的常用存储结构包括双亲表示法、孩子表示法和孩子兄弟表示法3种。

对一棵树,按某种次序访问其中每一个结点一次且仅一次的过程称为树的遍历。

树有两种遍历方法:先序遍历和后序遍历。

同样的森林也有两种遍历方法:先序遍历和中序遍历。

本章还介绍了树的一种典型应用——B树。

它是一种平衡的多路查找树。

本书给出了在B树中查找、插入和删除关键字的算法。

本人掌握知识情况及分析:
通过对该章的学习,学到了树和森林相关知识,其实本章也是第七章的扩展,因为树是在二叉树的基础上做了更为一般化的扩展,而森林是树的集合。

但也有些特殊的地方。

在第一节基本概念中,树和森林的性质很容易懂。

对于树和森林的存储结构和遍历算法这部分内容掌握也较好,其中对于递归思想的运用比较多。

对于孩子兄弟表示法也理解的不错,只是在运用时有时会出现一些错误。

对于B树的掌握还不太熟练,有待进一步加强。

(9)第九章知识点及主要知识:
散列结构是一种查找效率很高的一种数据结构。

它是一种特殊的数据结构,表中各元素之间没有直接的关系。

散列和冲突处理是散列法中最重要的两个概念。

常用的散列函数有直接定址法、除留余数法、数字分析法、平方取中法和折叠法等。

一个好的散列函数应该是一个均匀的散列函数。

由于散列法的自身特点,冲突的发生时不可避免的。

当不同关键字的结点映射到相同的存储地址时,必须采用某种措施进行处理,才能保证散列法德正常执行。

常用的冲突处理方法分为开放定址法和链地址法两大类,其中开放定址法还可以分为线性探测再散列、二次探测再散列和伪随机探测再散列3中方式。

开放定址法操作简单,节约空间,但容易引起“二次聚集”。

链地址法可以从根本上杜绝二次聚集,但操作繁琐,空间占用大。

本人掌握知识情况及分析:
通过本章的学习,接触到了一个新的数据结构---散列结构,在这一章内容中,理解比较完善的知识点有:基本概念和存储结构。

散列函数中直接定址法和除留余数法学得还不错,但对于数字分析法等方法则感觉比较棘手。

能够理解两种冲突处理的算法思想,但在用C语言描述时会有点吃力。

(10)第十章知识点及主要知识:
本章介绍了图的概念及其应用,是本书的重点。

图是一种较线性表和树更为复杂的数据结构。

一个图中任意两个元素都可以是相关,即每个元素可以有多个前驱和多个后继。

图可以分为有向图和无向图。

图中的数据元素称为顶点。

有向图中顶点之间的关系称为弧,无向图中顶点的关系称为边。

图的存储结构的知识点有:邻接矩阵、邻接表、逆邻接表、十字链表和邻接多重表。

图的遍历包括图的深度优先搜索遍历和广度优先搜索遍历。

深度优先搜索类似树的先序遍历,广度搜索类似树的层次遍历的过程。

通过遍历算法可以检测树的连通性。

对于连通图可以相应的生成深度优先生成树和广度优先生成树。

其余知识点有:生成树和森林、最短路径问题和有向无环图及其应用。

有向无环图重点理解AOV网和拓扑排序及其算法。

本人掌握知识情况及分析:
通过对这一章的学习,对于图的定义理解的比较好,因为之前的离散数学中学习过,现在学习起来就非常轻松了,但对于基本运算如图的生成等起初理解有困难,但随着学习深入,对它的概念也逐步明朗起来。

邻接矩阵、邻接表和逆邻接表掌握较好,而对十字链表和邻接多重表则较难理解。

起初对于图的遍历(包括深度和广度优先遍历)有些概念上的模糊,但拿了几个题目练习之后,也理解的不错了,但对于最小生成树问题还是比较难理解的。

最短路径和AOV网学习起来感觉比较轻松,但用C语言描述的话却又感觉不怎么轻松了。

二、学习体会
这门课程的教材非常好,由于是老师自己编写的教材,对教材有着深刻的理解,上课时能够将问题讲述得非常清晰,还能够联系实际应用,而不是简单的局限于课本。

课堂的学习氛围很浓郁,老师讲解的很透彻,同学们听的也很认真。

另外,这门课还有一个配套的数据结构与算法的实验课程,主要的目的是锻炼我们数据结构的实践能力,课前同学积极的预习,并根据题目要求设计各种算法,课堂上把自己不懂和迷惑的地方向老师请教,老师细心的给同学们讲解,在这种良好的氛围中我们的能力得到了很大的提高。

在上过这门课之后,我感觉我的能力有了不小的进步,对计算机的学习有了很大的兴趣。

学习这门课程时,首先从根本上就要认识到数据结构的本质,数据结构和算法之间的密切关系,以及数据结构的应用方法。

不然我们很可能陷入各种数据结构的复杂特性中却还根本不知道到底什么才是数据结构的本质,学了很多很久却其实什么都没有弄明白。

开始学习的时候一定要静下心来。

从最简单的理论知识开始,在熟悉了各种理论知识之后,比如从最简单的顺序表开始,首先,要了解这种数据结构的特点,包括内涵和外延。

理论知识掌握好之后,就要学会灵活运用了。

开始时写一写所有基本数据结构的基本算法,然后是反思,根据这种结构的具体特点,看看是线性结构还是链式结构,然后来思考应该有哪些操作。

要不断的对比总结,把所有的数据结构的线性结构的实现进行对比,链式结构和链式结构对比,找出它们之间的不同,并找出为什么不同。

这样的方法虽然比较烦,但对数据结构和算法的学习确有很大的帮助。

三、教学建议
1、建议在课时允许的情况下,增加例题的分量,通过对例题的讲解,加深同学们对知识点的掌握,同时也能使同学们对各知识点的运用有一个更为直观和具体的认识。

2、建议在上课过程中多让学生做一些随堂练习,这样不仅能使学生及时消化课堂上学习的知识,同时也加强了学生对知识点的理解和运用能力,避免出现眼高手低的现象,老师也能通过这个方法搞清楚同学们对该知识的掌握情况,更有利于老师教学工作的展开。

相关文档
最新文档