数据结构教学中的案例巧用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构教学中的案例巧用
摘要:数据结构是计算机专业的重要课程之一,但由于其理论性过强,缺乏趣味性,学生理解困难,教学效果不好。针对这些现象,文章提出在数据结构课程的教学方式、教学手段、考试方式上引入利用案例驱动的方法,以培养具备扎实的理论基础、较强的实践操作能力和综合表达能力的高素质学生。
关键词:数据结构;案例教学;教学改革
1数据结构课程教学现状及问题
数据结构作为计算机和信息等专业的核心课程,在教学体系中起着举足轻重的作用[1-4]。现阶段国内数据结构课程受主流数据结构教材影响,多以传授知识、利用伪代码描述数据结构及其算法为主,辅以一定的编程实践作为主要的教学模式。在这样的教学模式下,对于当前大众化教育背景下应用型高等工科院校的学生来说,学习掌握数据结构课程,根据实际问题动手设计数据结构算法并能付诸实践成为一个难题,造成这种现象的主要原因有以下几点:
1) 在国内主流的数据结构教材普遍采用伪代码的形式来描述算法,没有源程序,学生在学习过程中,不能“亲眼看见”算法执行流程,从而造成对算法理解的困难。
2) 算法描述过于抽象,不够直观,教师在教学过程中利用“黑板+粉笔”或者PPT都很难形象直观地演示算法,不利于学生理解算法。
3) 传统的教学模式强调理论教学,实践环节不够,造成学生动手能力差,有的学生会考试能做题,却看不懂实现算法的程序,更别说自己动手编程实现算法。“数据结构”在计算机软件开发领域的真正价值无法得到体现。
就以上问题笔者对在数据结构课程教学过程中引入案例驱动的立体化教学改革研究作了初步研究。
2选择设计适当的案例以驱动数据结构课程教学改革
2.1案例的设计与选择
案例选编是数据结构教学改革中的重要环节,选择或设计适合学生、难易得当、繁简相宜的案例,应包含学生已经学过的和即将学到的知识,并以此案例作为驱动进行课程的教学和学习,可以提高学生的学习兴趣和学习效率,达到教学
目的。
笔者经过多年教学实践,在教学过程中摸索了一系列案例作为各数据结构教学模块的驱动,主要包括:以“一元多项式的四则运算”作为线性表结构特别是链表结构教学的驱动案例、以“迷宫路径搜索”作为栈结构教学模块的驱动案例、以“井字棋游戏”和“霍夫曼树及霍夫曼编码”作为树结构教学模块的驱动案例、以“校园导游咨询”作为图结构模块的驱动案例,等等,如图1~图3所示。下面以较为简单的链表结构为例阐述“一元多项式四则运算”案例如何驱动教学。
2.2一元多项式四则案例驱动链表结构的教学
一元多项式四则运算是清华大学严蔚敏教授编写的经典教材中有关链表的应用的一个章节,但是在该章节中数据结构及算法由伪代码构成,学生很难真正理解如何利用链表来实现一元多项式的四则运算。
笔者在教学过程中已经积累了可视化的多项式四则运算程序[5],可以利用该应用程序进行课堂、课后的教学与学习。
2.2.1案例驱动链表中结点的教学
“结点”作为链表乃至树和图等各类数据结构来说是一个非常重要的概念,而对于初学数据结构的学生来说,大多数学生只掌握了基本数据类型的运算,“结点”概念过于抽象,往往使学生摸不着头脑,从而影响整个数据结构课程的教学。
通过教师讲解一元多项式中的单项式如何在计算机中表示,即由系数(浮点型)、指数(整型)两种基本数据类型构成一个复杂数据类型;一个单项式就是一个多项式的一个结点,利用这种方式使“链表中结点”这个比较抽象的概念具体化、形象化,进一步引导学生——要描述和实现这样一个非简单类型的“结点”,需要用C++中的类或者结构体来实现。
2.2.2案例驱动链表基本操作的教学
多个单项式“串成一串”便成为多项式,可以用“数组”来串联这些单项式,也可以用“链条”来串联这些单项式,教师可以一起与学生讨论顺序表和链表的各自的特点。这个案例主要体现链表的应用,教师引导学生分组讨论如何实现串联,即链表的初始化操作、结点插入链表以及从链表中删除某个结点等一系列链表操作。
多项式的四则运算特别是加、减法本质上是链表的合并过程,而链表的合并过程也就是结点的插入操作。因此学生们在理解链表基本操作的基础上可以进一步学习其具体的应用。
2.2.3案例驱动下链表实践教学的改革
只有理论学习而没有实践,这样的学习成效是不完整的,不同层次的学生可以利用案例进行不同程度的学习。对于理论理解有困难的学生,他们可以通过上述图形化界面的应用程序“亲眼看到”结点在链表中的变化,该程序是可操作的、互动式的,通过输入数据,可以帮助学生理解一个升序的一元多项式中插入一个任意单项式仍然要保持其升序状态,需要在在链表适当的位置插入结点或者修改结点或者删除结点,等等;对于算法可以理解但是无法读懂源程序的学生,可以通过学习、调试源代码,达到从理论理解到实践应用的过渡;对于可以理解源代码的学生,可以让其尝试编写、添加一些具体的函数,增强学生的动手能力。上述一元多项式四则运算应用程序即为笔者的学生开发完成。
对于这样一个案例驱动的教学方式的改革实践,仅仅有案例是不够的,需要对传统的教学模式和考试模式、课程组织方式等全方位立体化的改革。
3教学模式与考试模式的改革
3.1在教学方式上的改革
传统的教学方式是以教师在课堂上讲解知识点,学生上机实践以及课后做习题作为主要的教学模式,
这样就容易造成前文中提到的学生动手实践能力低,会考试却看不懂程序,不会动手编程这样的局面,达不到应用型高等工科院校对学生的培养目标。只有将教师讲解、课堂讨论、汇报或答辩、教师或学生总结等多种教学方式相结合,才可以发挥案例驱动教学以达到教学目的要求。
3.2在教学手段上要充分利用演示系统、精品课程网站等资源
一些演示系统和国家级精品课程网站的资源可以帮助教学进行课堂教学以及学生课后学习,例如,上海交通大学数据结构为国家级精品课程,在该课程网站(/CourseShare/DataStructure/ Index.aspx )包含了相当丰富的教学资源,如约瑟夫环问题、汉诺塔问题、迷宫问题、火车车厢重排、四皇后问题等算法的动态演示过程、解决思路、算法描述、参考代码等;另外,该网站还提供了一些数据结构中常用算法的动态交互操作实验,如链表的插入和删除、二叉树遍历、霍夫曼树和霍夫曼编码、联通网的最小生成树等。教师和学生可以充分利用这些非传统的、动态交互式的应用程序实现使数据结构的学习不再单一化、抽象化。
3.3在考试模式上改变“一考定输赢”的方式
我们借鉴国外Assignment形式,采用以小组为单位完成期末大作业、撰写