数据结构的重点和难点

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

编程技术精品!
数据结构的重点和难点

1) 课程的重点:
(1) 数据结构的逻辑结构、存储结构以及基本操作的概念及相互关系,抽象数据类型(ATD)的概念和实现方法,算法的时间复杂性和空间复杂性分析。
(2) 线性表ADT顺序存储实现中的创建、查找、插入和删除等基本操作及相关算法,线性表ADT链式存储实现中单链表、循环链表和双向链表的创建、查找、插入和删除等基本操作及相关算法。
(3) 栈、队列的定义、特点、性质和应用,ADT栈、ADT队列设计实现中的基本操作及相关算法。
(4) ADT串的设计、实现方法和基本操作;②串的朴素模式匹配算法,KMP算法。
(5) 数组的存储表示方法,顺序存储数组时数据元素之间的地址关系,特殊矩阵的压缩存储方法,稀疏矩阵的压缩存储方法,广义表的定义、性质和存储结构。
(6) 二叉树的定义、结构特点和性质,ADT二叉树的设计和实现,二叉树存储结构的特点,先序、中序、后序遍历的递归和非递归算法,二叉树的线索化过程和算法,最优二叉树的特性及建立最优二叉树的算法,哈夫曼编码的算法。
(7) 图的定义、术语、结构特点和性质,ADT图的设计和实现,图的邻接矩阵、邻接表的存储结构及其构造方法,图的深度优先搜索和广度优先搜索算法,连通图的最小生成树算法,有向无环图的拓扑排序算法、关键路径的算法,最短路径求解中的Dijkstra算法和Floyed算法。
(8) 顺序表和有序表的查找算法,二叉排序树的构造方法和查找算法,哈希表的构造方法和查找算法,各种查找算法的应用背景、优缺点和时间复杂性分析。
(9) 简单插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序、基数排序算法,各种排序算法的特点、时间复杂性、空间复杂性和稳定性分析。
2) 课程的难点:
(1) 抽象数据类型(ATD)的概念和实现方法,算法的时间复杂性和空间复杂性分析。
(2) 线性表ADT链式存储实现中的某些操作。
(3) 栈和队列在解决实际问题中的应用。
(4) 串的模式匹配算法中的KMP算法。
(5) 二叉树的先序、中序、后序遍历的非递归算法,二叉树的线索化算法。
(6) 有向无环图的关键路径算法,最短路径求解中Floyed算法。
(7) 二叉排序树结点的删除算法,二叉平衡树的构造算法。
(8) 堆排序、归并排序算法以及它们的时间复杂性和空间复杂性分析。
3) 解决方案:
针对数据结构的知识点、重点和难点的

教学,我们采用了以下方法和解决方案,达到了很好的教学效果,
(1) 采用从实践到理论的教学方法
数据结构是一门从实践抽象到理论,又用理论来指导实践的学科,因此我们在教授这门课程的过程中,首先应从实践入手,从日常生活入手,然后再抽象到理论,下面我们举两个例子来说明这种方法。
【例1】图的广度优先搜索和深度优先搜索算法
想一想在日常生活中,如果有很多个房间,现在需要我们检查每一个房间中都放了什么物品,我们会怎么检查?
第一种检查方式,我们先检查离我们最近的房间,为了避免重复,每检查过一个房间,我们需要标记,然后层层推进,这其实就是广度优先搜索的思想,我们把这种搜索过程进一步规范,按算法的规则写出来,就是广度优先搜索算法。
第二种检查方式,我们先从离我们最近的某一个房间检查,同样为了避免重复,检查完一个房间后我们要作标记,按同样的方式每次都从刚检查过的房间重新开始,直到走不动时再逐级回退看看是否还存在没有检查过的房间,这是深度优先搜索的思想。
【例2】快速排序算法
假设有一班30个学生上体育课,现在需要对这30个学生从低到高进行排序,体育老师可以随意选身高中等的学生,然后让比这个学生高的站在这个学生右边,比这个学生矮的站在这个学生左边,再对这个学生两边的学生作同样处理,这就是快速排序的思想,同时也是算法中分治的思想,把这种过程规范地描述出来,就是快速排序算法。
(2) 从逻辑结构到存储结构的讲授方法
数据结构的一项重要任务就是把实际应用中的实际问题抽象成数学模型(逻辑结构),然后再根据不同计算机语言的特点,安排存储结构,为进一步的操作和计算服务,我们在讲授数据结构时,通过采用从逻辑结构到存储结构的讲授方法,可以加深学生对所学知识的理解,同时也能增强学生利用所学知识解决实际问题的能力。
【例3】顺序存储结构、链式存储结构、索引存储结构
假设现在有一套24史书籍,需要放在书架上,从1到24是有次序的,不能放乱,根据书架的不同情况,我们有不同的放置方法,(1)如果书架上有足够的空间能同时放下这24本书,我们可以依次放下这些书,就是顺序存储结构;(2)假设没有一个足够大的空间能够同时放下这些书,同时书架上有很多小空间,这些小空间合起来可以放下这些书,想一想我们都有那些放置方式:第一种,我们可以先放第1本书,记下第1本书的位置,然后放第2本书,第2本书的位置我们可以写一张纸条夹在第1本书

中,然后放第3本书,第3本书的位置写一张纸条放在第2本书中,......,这便是链式存储,第1本书的位置就是头指针;第二种,我们把这些书分别放在不同的位置,然后把这些书的位置记录在一张纸上,这便是索引结构,这张纸就是索引表。
通过对这些实例的分析,书和书架的位置我们可以用不同的符号来表示,这就是逻辑结构,然后我们结合我们学过的计算机语言知识,考虑怎么样才能实现这个存储过程,这便是存储结构,通过这样的教学方法,学生很容易理解。
(3) 课堂教学与上机实验教学相结合
数据结构是一门理论与实验相结合的课程,如果只注重理论,容易造成"眼高手低"的情况,理论知识学的很扎实,但动手能力很差,不符合我们的培养要求,反过来,如果只注重实践,又会造成只见"点"不见"面"的情况,造成系统解决问题的能力差。因此我们在讲授这门课的过程,采用实验与理论学习紧密结合的方式,分析问题、建立模型、设计算法、编制程序、调试优化等各环节的训练来解决一些典型问题,使学生对数据结构课程内容有了较深入理解,进而能够牢固掌握所用到的一些技术,从而提高同时也能提高学习兴趣。
(4) 知识内容共性化与个性化总结的教学方法
在数据结构的内容中,线性结构、树型结构、图型结构都遵循:首先是逻辑结构、其次是存储结构、接下来是基本操作的实现这一原则,通过这些共性化可以理清思路,帮助我们理解,同时针对这三种结构的不同特点,再强调它们各自在逻辑结构、存储结构和基本操作上的个性化,加深我们的理解。
(5) 自顶向下的教学方法
在数据结构的教学中,很多学生反映其中的一些算法非常不容易理解,在程序设计中有一种自顶向下的程序设计方法,这种方法同样适用于我们对数据结构有关算法的教学。对一种算法,首先我们要了解它的思想,然后是分析它的概要,接下来再考虑细节,如果一开始就逐字逐句地读代码,要花很长时间才能对算法彻底搞清楚。下面我们举例说明这种学习过程。
【例4】求最短路径的迪杰斯特拉算法
假设有a,b,c,d,e共5个顶点形成一个图,现在我们要求顶点a到其它各顶点的最短路径。
我们首先理解迪杰斯特拉算法的思想
解迪杰斯特拉算法的思想是:求a到其它顶点的最短路径,我们首先求出离它最近的顶点,也就是与它有边相连并且边长度最短的顶点,假设是c,这样我们就得到了a到c的最短路径。
然后我们再求离a次近的顶点,只能是b,d,e中的一个,这些顶点到a有两种可能,直接到a或通过c到a,因

为c到a的最短路已求出,因此很容易求出b,d,e通过c或不通过c到a的最短距离,找出其中最短的一个,假设是b,这样又求出了a到b的最短路径,依次类推。
理解了这个算法的思想后,我们再逐次考虑算法。
通过采用以上介绍的教学方法,把枯燥的抽象问题变为实际问题,使学生能够轻松地、很好地理解所学内容,活跃了课堂气氛,达到了很好的教学效果。


编程技术精品!

相关文档
最新文档