APP下载

数据结构课程中分步式案例设计的探索与实践

2019-10-23陈青青

计算机教育 2019年10期
关键词:结点数据结构代码

陈青青

(莆田学院 信息工程学院,福建 莆田 351100)

0 引 语

数据结构与算法课程是计算机学科的专业基础必修课程,属于专业课程体系中的核心课程,在教学体系中起着举足轻重的作用。它所讨论的知识体系和方法技术,无论对于下一步学习其他相关计算机课程,或是将来从事信息行业开发工作,都是重要且必备的基础之一。

该门课程的教学目标是学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术[1]。另一方面,本课程的学习过程也是复杂程序设计的训练过程,要求学生编写的程序结构清楚和正确易读,符合软件工程的规范。

1 课堂教学存在的问题

该门课程的特点是知识点多,理论性强,内容比较抽象枯燥,掌握起来相对困难。在传统的教学过程中,存在以下问题。

(1)数据结构课程需要学生熟悉不同数据结构的特性,从而在分析解决具体的问题时,为所要处理的数据选择合适的逻辑结构、存储结构;而教师往往按照教材授课,在讲解不同数据结构时,选用不同的案例进行教学,相互之间没有关联与对比,学生无法理解不同数据结构在解决同一问题时的不同点及优缺点,对如何根据实际问题选择恰当的数据结构了解得并不深刻。

(2)本门课程的实践教学环节对学生的程序设计能力具有较高的要求。在莆田学院,C 语言程序设计的课程在大一下学期开设,而数据结构与算法课程在大二下学期开设。经过了一年的时间,大部分学生对高级程序设计语言的相关知识点比较陌生,再加上大一下学期学习时掌握不到位,直接影响了代码的编写质量[2]。常见的问题包括变量定义不规范,指针、结构体和函数相关应用弱,代码可读性差,程序调试能力弱等,同时,传统教学过程偏重于数据结构理论,没有对代码编写进行强调和规范。

(3)数据结构课程实践部分的考核,目前是以学生提交上来的实验报告和代码作为考评依据,但是由于课程的复杂度与难度较大的特点,学生不愿意主动思考,提交上来的实验报告和代码往往千篇一律,抄袭现象严重,从而影响考评的效果,偏离考评的真正目的。

2 分步式案例设计

学生通过设计系统雏形,再利用所学章节知识分步完善系统的方式掌握各知识点,可以解决目前教学过程中各章节的案例设计相互之间没有联系的问题。

2.1 章节案例设计与选择

案例的选择是教学改革中的核心环节之一,通过选择适当的包含旧知识的教学案例,并经过案例分析引出即将学习的新知识,以此驱动数据结构课程不同章节的学习,可以提高学生的学习兴趣,帮助学生进一步理解不同数据结构的选择和取用,从而达到教学目的。

计算机学科的学生在应用数据结构知识解决实际问题时,经常接触数据列表的建立、查找、插入、删除等操作,这也是将来在开发编写完整的系统代码时,不可避免将接触和实现的部分。在线性表这一章节,选用“学生基本信息系统”案例,贴近学生的日常生活,学生也更易理解系统的逻辑条理。通过分步教学,学生使用顺序表结构和链表结构两种物理存储方式进行实现,从而进一步掌握两种方式的区别。

1)利用顺序存储结构实现。

学生基本信息系统是一个小型的处理学生基本信息的程序,主要用于实现学生信息的录入、删除、查找等功能。在讲解顺序结构前,即以任务驱动的方式[3],将该题目下达于学生,让学生进行分组讨论,讨论如何建立合适的数据元素类型,如何在此基础上实现插入、删除、查找等操作。学生首先利用已经学过的C 语言相关知识进行讨论和实践,之后教师在了解学生讨论结果的基础上,提出数据结构中“结点”的概念作为数据元素类型的建立,并通过回顾复习学生学过的关于数组的相关知识,提出“结点”以顺序结构存储的知识点,进一步让学生讨论并动手编写对各“结点”进行插入、删除、查找的代码,并进行调试分析。

2)讨论顺序存储结构优缺点。

在实现上述系统的基础上,与学生通过分析讨论,对在原有数据集合中插入或删除学生数据所需的时间和空间复杂度进行分析,发现在插入或删除某条学生数据时,需要移动大量其他学生数据,以达到“线性表”结构的要求,这种方法耗费的时间多,操作也繁琐。

3)提出以链式存储结构实现。

基于顺序存储结构的缺点,提出链式存储结构的知识点,每个学生数据“结点”之间以指针相关联,特别针对“指针”进行着重强调,让学生了解对于新“结点”的插入或删除,仅需改变相关联“结点”的指针即可,从而引出基于链表的结构建立、查找、插入、删除等操作伪代码,并让学生通过上机实践的方式实现。

通过以上3 个步骤,学生首先通过回顾复习,利用原有的C 语言知识编写系统雏形,之后分别以“结点”+顺序结构、“结点”+链式结构两种方式加以完善,通过“案例驱动型”实践模式,即同一案例、同一系统利用不同存储结构的实现与实践过程,加深关于顺序存储和链式存储的了解,理解二者的优缺点与区别,从而达到教学目的。

对于其他章节的实践案例,实践内容安排见表1。

表1 各章节实践案例设计

经过以上实践环节,学生可以利用不同章节的知识,分步骤对所开发的系统进行逐步完善,既能掌握课程的相关知识,又能了解如何建立系统并逐步添加新功能,对于后期完成综合型案例具有较大的帮助。

2.2 综合型实践设计

这个环节的教学是在整个数据结构的课堂教学结束之后,即课程设计环节部分完成[4]。在该环节的实践中,学生可以自行组织4~5 人组成一个团队,在教师提供的几个实验项目中,自行挑选一个项目,对任务进行分解与分配,合作完成。

以图书管理系统为例,可将系统功能分解为初始数据的建立、图书的插入、图书的查找、图书的排序、图书的编辑与删除等多个模块,每个团队成员选择其中一个模块完成,同时进行小组讨论,设计统一的数据接口,以实现不同模块的相互调用和组合,最后,小组成员一起对模块组合后的系统进行调试分析,发现不足并改进。这不仅能进一步加强学生的分析问题与实践编程能力,还能锻炼学生的团队合作能力。实验项目选题汇总见表2。

表2 综合型实验选题汇总

3 算法实现步骤改革

学生在学习数据结构与算法这门课程时,往往只经过一个学期的C 语言学习,编程基础较薄弱,代码编写不规范,模块分析与逻辑设计还不严谨;而在该门课程的案例实现时,往往需要编写几个模块的函数代码,代码量较大,相比以往仅仅是一两个函数相互调用的C 语言学习,复杂度更高,整体与模块分析比例更大,同时,还要以新“结点”的方式实现,学生往往难以上手,并容易产生畏难情绪,学习积极性不高。

基于以上原因,以线性表为例,在学生上机实践“学生基本信息系统”环节,采用以下步骤与方法。

1)先以数组方式实现基本数据类型的数据操作。

先让学生以原有的C 语言知识编写一个小型的、仅有两三个函数的程序,实现基本数据类型数组的数据输入、查找、插入、删除等操作。这一代码既是“学生基本信息系统”的雏形,又可以让学生先以1~2 个课时的时间,复习回顾C程序的相关知识点和编写过程,对编程知识进行查漏补缺。

2)在提出“结点”概念与“顺序结构”数据操作伪代码后,让学生针对第一步骤实现的代码进行修改。

在提出“顺序结构”存储的相关知识点后,首先让学生以“结点”替代上一代码中的基本数据类型,并在此基础上修改上一步骤代码中有关数据操作的部分。采用这一方法的目的,即是让学生在此步骤中,重点关注数据结构的特点以及“结点”数据的访问方式,而将了解数据查找、插入、删除等算法设计的原理流程这一学习过程在上一步骤就完成,从而在这一步骤简化并突出知识点的学习,分步完成基于顺序表结构的“学生基本信息系统”。

3)在提出“链式结构”的概念与数据操作伪代码后,让学生针对第2 步骤实现的代码进行修改。

在提出“链式结构”存储的相关知识点后,让学生修改上一步骤的代码,将“结点”数据修改为以“链表”存储,并修改查找、插入、删除的相关代码。学生在修改的过程中,可以进一步比较两种不同存储结构在进行数据操作时的异同点,并通过比较前后两个版本代码的时间与空间复杂度,了解如何在不同需求的情况下,选用不同的数据存储结构。

4)在以上3 个步骤中,学生在编写完各自的代码后,采用相互之间分析、找错、纠错的方式,提高代码编写规范与程序调试能力。

写完的代码需要调试,学生在调试代码方面往往存在问题,较难发现自己代码的问题,可以通过同学间的相互改错纠错,发现问题所在,这样学生不仅学习兴趣高涨,还能进一步提高有关代码编写、调试的能力。

4 实践考评方式改革

(1)实践考评成绩=实验报告与代码(30%)+答辩(50%)+组内成员互评(20%)。

(2)在答辩环节,组内每个成员对自己所承担部分的系统任务进行演示与解说,包括汇报遇到的问题与解决方式等[5]。教师可以对学生进行提问,通过学生的回答了解学生的实际完成过程,并综合学生的完成与答辩情况进行评分。

(3)在组内成员互评部分,组内成员间通过匿名互评的方式,对其他成员的任务完成情况和团队合作情况进行评分。

通过以上考评方式的改进,学生就不能再仅仅依靠实验报告与代码的简单复制粘贴通过考评,而是通过真正的团队合作以及思考与动手实践,从而提高学习主动性,保障考评的实际意义。

5 结 语

数据结构与算法课程所采用的分步式任务驱动型教学改革和考评改革,改变了按教材内容教学、按教材中一个算法接一个算法讲解的传统教学过程,更强调章节之间的联结,从学生C 语言基础的实际掌握能力出发,从学生的学习效果出发,设计合适的案例,并采用循序渐进的步骤,从代码雏形出发,根据实际的数据结构知识点进行进一步修改完善,将传统教学过程中学生本应同时掌握的多个知识点拆解开来,分步教学,更适合学生的学习节奏;同时,通过新的实践考评办法,激发学生的学习主动性。在莆田学院近年的教学过程中,使用上述方法对数据结构与算法课程进行教学改革实践,结果表明,学生更容易理解教材中各类数据操作的伪代码,对于不同数据结构的特点与区别也理解得更为深刻,学生的学习与程序编写兴趣更高,编写的代码更加严谨、完整,取得了更好的学习效果。

猜你喜欢

结点数据结构代码
LEACH 算法应用于矿井无线通信的路由算法研究
基于八数码问题的搜索算法的研究
数据结构线上线下混合教学模式探讨
重典型应用,明结构关系
神秘的代码
一周机构净增(减)仓股前20名
一行代码玩完19亿元卫星
近期连续上涨7天以上的股
数据结构与算法课程设计教学模式的探讨
高效学习数据结构