数据结构教学中若干问题的探讨

2023-02-19

《数据结构》是计算机专业教学计划中的一门重要的专业基础课, 也是非计算机专业的主要选修课程之一, 它不仅是一般程序设计 (特别是非数值计算的程序设计) 的基础, 而且是设计和实现编译原理、操作系统、数据库系统及其它系统和大型应用程序的重要基础。其教学目的是使学生学会分析研究计算机所要加工处理的数据的特征, 掌握组织数据、存储数据和处理数据的基本方法, 并加强在实际应用中选择合适的数据结构和相应算法的训练, 本课程的学习效果直接影响到学生数据抽象和程序设计能力的培养。然而, 由于以下三方面的原因, 使得本课程的学习相当困难。

(1) 教学内容非常抽象。需要数理逻辑、集合论、图论和代数等方面的知识。

(2) 教学内容丰富, 学习量大, 隐藏在各部分内容中的方法和技术很多, 动态链表存储结构和递归技术令不少初学者望而生畏;

(3) 需要运用到许多先修课程没有涉及的知识。

几年来, 笔者曾先后担任通信、电子科学与技术、电子信息工程、自动化、计算机科学与技术等专业本科生数据结构课程的教学工作, 在该课程的教学中取得了一些浅显心得, 在这里提出以便和同行进行交流讨论。

1 调动学习兴趣, 明确学习目的

俗话说:“兴趣是最好的老师”, “良好的开端是成功的一半”。学生普遍认为《数据结构》这门课抽象、难学, 而且不知道它有什么用处。因此, 在开始讲授《数据结构》时, 不能急于介绍理论部分, 而强调该课程的实践应用性, 结合一些具体的应用实例, 说明各种数据结构在一些典型软件中的具体应用。因此, 在讲授《数据结构》课程时, 必须首先讲授如下四个问题: (1) 图书馆的书目检索系统自动化问题; (2) 计算机和人对弈问题; (3) 多叉路口交通灯的管理问题; (4) R-L-C网络问题。通过这些例子的学习, 可以达到如下目的: (1) 了解《数据结构》课程所要处理的对象, 即数据结构是一门研究非数值计算 (问题 (1) (2) (3) ) 的程序设计问题中计算机的操作对象以及它们之间关系和操作等的学科; (2) 理解W i r t h公式“算法+数据结构=程序”或“ (算法+数据结构=程序) ”的真正涵义; (3) 明确学习《数据结构》课程的学习目的, 在介绍实例时, 可以提出一些本课程学完后会解决而目前不会解决的实际问题, 学会如何解决这些问题将成为本课程的主要目的, 进一步引出学习本课程的目的; (4) 揭发学生的学习兴趣, 这四个实际应用贴近生活, 而且学生比较熟悉, 从而使学生容易产生学习兴趣, 形成了一个良好的开端。

2 正确处理好数据结构和程序设计语言之间的关系

日前, 在高校《数据结构》教材选用上, 非计算机专业广泛采用的是使用抽象数据类型并用类C描述算法的C语言版, 计算机专业将采用类C++描述算法的C++语言版。C语言或C++语言程序设计是《数据结构》的主要前导课程之一, 学生对它的熟悉和掌握程度直接关系到《数据结构》课程的教学效果。

由于课时的关系, 《数据结构》中使用频率较高的内容 (如模板类, 指针、函数、结构体等) 在C或C++语言中作为难点、次难点进行了讲述。对这些内容, 尽管老师费尽唇舌, 学生仍模糊不清, 导致教学效果不理想, 课时浪费严重。因此, 在教授《数据结构》课程时, 教师应督促并指导学生对这程序设计语言进行有针对性的复习, 只有这样, 《数据结构》的教学效果才有可靠的保障。

C或C++语言教学的不足为《数据结构》课程的教学埋下了隐患, 教师必须采用科学的教学方法, 合理组织教学, 正确处理好数据结构和程序设计语言之间的关系。时刻记住, 《数据结构》不是一门程序设计语言课程, 也不是程序设计语言的后续课程, 而是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间关系和操作等的学科, 不能主次颠倒。

3 理清重要概念

为了学好《数据结构》这门课程, 必须深刻理解并领会以下两组重要概念:

3.1 数据类型和抽象数据类型 (Abstract DataType, ADT)

数据类型是一组性质相同的值的集合以及定义于这个集合上的一组操作的总称。抽象数据类型是用户在数据类型的基础上定义和实现的数据类型, 定义了一种新的数据元素集合和该数据元素集合上所允许的操作集合。引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开, 使它们相互独立, 在更高一级的抽象程度上实现了信息的隐藏和封装, 具有代码可重用、信息隐藏、便于软件调试和维护等特点。从本质上讲, 数据类型和抽象数据类型是同一概念。

3.2 数据的逻辑结构和物理结构

数据的逻辑结构属于用户视图, 是用户所看到的数据结构, 是面向问题的, 描述的是数据元素之间的逻辑结构。数据的物理结构是数据的逻辑结构在计算机中的物理存储方式, 属于具体实现的视图, 是面向计算机的。它们是密切相关的两个方面。

抽象数据类型是本课程的重点之一, 同时更是一个难点。由于教材中大量使用抽象数据类型, 而大部分学生对此内容又比较陌生。一般初学者习惯于根据具体的例子来学习, 而水平较高者习惯于通过抽象的数学语言来描述问题。所以, 教师对这部分内容的讲解应该也值得多花些精力, 不要局限于教材上的内容, 要多方收集资料, 进行补充, 耐心讲解。

在讲解数据的逻辑结构和物理结构概念的同时, 应强调算法设计是基于数据的逻辑结构, 而算法实现则基于数据的物理结构, 同一功能在不同的物理结构下实现, 其运算序列有可能不一样。此外, 在讲解具体数据结构 (如队列、树或图等) 的存储结构时, 必须讲清其必须满足的三个要求: (1) 存储结构应能存储各结点本身的数据信息; (2) 存储结构应能准确地反映队列、树或图等数据结构中各结点之间的逻辑关系; (3) 方便队列、树或图等数据结构上的绝大部分操作。

4 注重习题讲评, 开拓解题思路

对于《数据结构》课程来说, 练习的作用是非常大的。要学好《数据结构》, 光“看、听”不“练”肯定是不行的。只有通过适当的练习, 并在练习中勤于思考, 举一反三, 才能深入理解教材内容。因此, 在讲授《数据结构》过程中, 必须将习题的布置、批改和讲评作为不可缺少的重要环节。

5 加强实践环节, 提高算法设计和程序设计能力

《数据结构》是一门实践性很强的课程, 对于各种数据结构来说, 其存储结构与各种算法的具体实现, 都必须借助于某种程序设计语言 (如C语言、C++语言) , 并通过上机实验来完成, 培养并提高学生的实践能力是其教学重点之一。因此, 在《数据结构》的教学过程中, 理论与实验课应当交叉进行, 切实抓好实验课的教学, 规范实验步骤与过程, 以确保能到达预期的教学效果和教学目的。

对于每一个实验, 应要求学生在上机实验之前做好充分准备, 明确实验目的、内容和要求。对于综合性或设计性实验, 学生必须事先进行相应的需求分析、概要设计和详细设计。然后, 写出具体的程序, 并对其进行严格测试。在实验过程中, 教师应做好相应的辅导, 及时进行答疑解惑, 注意鼓励学生开动脑筋, 认真思考, 努力按时完成有关实验。程序测试通过后, 要对其进行认真总结, 按时提交相应的规范化实验报告。

6 改革教学手段, 研制C A I

在《数据结构》课程课堂教学方面, 积极采用传统教学与多媒体教学相结合的教学方式, 充分发挥多媒体教学知识涵盖量大, 传统教学方式生动、具有启发性的优点。《数据结构》课程内容丰富, 学习量大, 非常适合采用多媒体教学, 如果能将《数据结构》中算法的执行过程 (如冒泡排序列的数据交换过程) 动态模拟演示出来, 或在课后供学生反复体会, 则可以在一定程度上化抽象为直观, 使学生更好地理解算法的思想和过程。另外, 数据结构这门课程隐藏在各部分内容中的方法和技术较多, 贯穿于全书的动态链表存储结构和递归技术令不少初学者望而生畏, 这些内容很难用几张图片或多媒体教学方式能讲述清晰, 为此, 采用传统的黑板教学法加以补充。

在教学中能因材施教。在教学计划框架允许的范围内, 针对不同层次的教学对象, 给出不同的要求。对哪些学习成绩很好, 且有上进心的同学提出更为严格的标准。另外, 在教学过程中, 鼓励学生主动畅谈或点名提问, 实施互动式教学, 及时了解学生的学习情况, 同时也能调动学生学习的积极性和主动精神。

7 注重前后概念的贯穿

《数据结构》教材中的概念比较多, 教师在授课时, 必须注重前后概念的联系。如:教师在讲解图的生成树概念时, 给出了生成树的定义:包含图中全部n个顶点和仅使这n个顶点连通的n条边。从此定义中可以看到, 定义生成树时没有用到树的定义。受此启发, 我们可以给出树的非递归定义:包含n个顶点和 (n-1) 条边的连通图, 无形中把图和树这两个概念又一次联系在了一起。

8 结语

《数据结构》是计算机学科的主干课程, 并处于核心地位, 但由于各种原因, 学生学起来有一定的难度, 这给授课的教师带来了相当大的挑战。《数据结构》的教学是一个复杂的系统工程, 它会涉及到诸多方面的问题, 以上所述仅仅是笔者讲授《数据结构》课程之后的一点粗略总结, 有不妥或不足之处, 敬请大家批评指正。

摘要:《数据结构》是计算机专业的一门专业基础课, 也是通信、信息等与计算机技术关系密切专业的一门基础课, 然而, 由于多方面的原因, 使得本课程的学习相当困难, 这给授课的教师带来了相当大的挑战。剖析了《数据结构》教学过程中出现的重点和难点, 并提出了有针对性的解决方案, 这些方案的采纳可以进一步提高该课程的教学质量。

关键词:数据结构,教学实践,抽象数据类型,算法

参考文献

[1] 缪淮扣, 顾训穰, 沈俊.数据结构——C++实现[M].北京:科学出版社, 2003.

[2] 殷人昆.数据结构[M].北京:清华大学出版社, 2002.

[3] 严蔚敏, 吴伟民.数据结构 (C语言版) [M].北京:清华大学出版社, 1997.

[4] 陈慧南.数据结构 (使用C++语言描述) [M].南京:东南大学出版社, 2001.

[5] 殷人昆, 淘永雷, 谢若阳.数据结构 (用面向对象方法与C++描述) [M], 北京:清华大学出版社, 1999.

上一篇:财产清查结果的会计处理比较下一篇:刍论上市公司收购之中小股东权益的保护