数据结构课程教学方法的研究和实践

2015-12-04 07:56逯鹏张赞
教育教学论坛 2015年18期
关键词:数据结构教学方法

逯鹏 张赞

摘要:《数据结构》是集软件、硬件、数学等多个专业知识的交叉课程,对该课程的学习需要有较强的抽象思维以及较高水平的计算机编程能力,这使得大部分学生学习过程困难。因此一个行之有效的教学手段对该课程的学习是至关重要的。本文以提高学生学习的主观能动性为目的,探讨了分段式问题驱动等方法在数据结构教学中的应用。

关键词:数据结构;教学方法;问题驱动法

中图分类号:G642.0     文献标志码:A     文章编号:1674-9324(2015)18-0121-03

一、引言

《数据结构》对于理工科是一门重要的基础课程,尤其是计算机学科基础课程的核心,也是电气类等相关专业的主要课程之一。其内容主要包括:数据在计算机应用中的处理过程,主要是对于非数值(如工业检测、过程控制等)的加工处理;相应结构的抽象数学模型建立、算法设计并对算法性能技术进行分析;算法的编程实现等。

由于“数据结构”的研究涉及到软件、硬件、数学等多个专业知识,学生很难采用其以往的理论学习+课后作业的模式,达到掌握和灵活运用的目的。此外,由于数据结构的各个知识点牵涉到多个学科领域,教师采用传统的知识点讲解的模式和方法,常常顾此失彼,使得一些学生学习时会感到对数据结构的认知无法具化,进而感到乏味无趣,无法领会课程要领,最终导致学生理解困难,教学效果不理想。本文结合多年数据结构教学实践和教学方法改革,提出了针对上述问题的解决方法和思路。

二、目前数据结构教学缺点分析

(一)学生前导课程基础知识掌握不足

数据结构课程涉及算法实现的程序设计,故对高级语言基础知识要求较高。相关专业学生最先接触的高级语言一般都是C/C++,知识点多且杂。课堂大部分时间用于基本概念和语法的讲解,学生大多数从未进行过实际的编程训练,导致学生最终只对编程语言一些基本语法、数据类型等有所了解,对数组、结构体、指针等知识的应用能力不足。然而,这些知识及其灵活应用的方法正是数据结构学习的基础。特别是函数的遞归调用及递归过程,是理解并设计算法的基础,在高级语言学习中又是难点,学生不易理解掌握。高级语言先导课程的掌握程度不够直接妨碍数据结构课程的学习,加大教学难度,影响学生对数据结构知识的理解。

(二)有限的学时未能达到教学目标

数据结构教学主要目的是培养学生编程能力,为有效地设计、实现算法以解决工程技术问题提供理论技术基础。课程涉及四大逻辑结构(线性、树、图和集合)、两大存储结构(顺序存储和链式存储)、查找、排序等众多算法,这些知识点自成体系,教学内容较多,而且对学生都很重要。相关专业数据结构理论课学时一般都相对不足,教学过程中又要兼顾每个知识点,导致教学重点不突出,学生易混淆难点要点,更加大教学难度。有些经典算法较抽象,算法设计比较复杂,编程实现就无从下手,在理论教学时无法直观地表现出来,需要学生在实践中理解体会,而该课程实验内容众多,有限的学时使实践阻力较大,学生难以理解,降低学习兴趣。

(三)课后反馈不及时

课后及时反馈和强化是控制教学的有效手段。由于电气信息类《数据结构》这门课程的教学大多采用多媒体教学为主、上机实践为辅的方式,且大多媒体教学与上机实践不能同步进行,导致学生无法与其具体掌握的实现技术建立关联,只能用数学思考的模式强记数据之间的复杂关系。这样的结果是,即使课堂上理解了,但由于不能立即上机验证,待下次课时记忆部分消退,学生动手的热情就要小很多,长此以往对学生上课的积极性影响甚大。

(四)多媒体教学手段存在不足

目前多数的课堂都采用多媒体教学,多媒体教学集理论课、习题课、算法演示为一体,使课堂生动、形象、直观,有助于学生更有效地接受抽象的理论知识。但是,教师降低工作强度的同时也加快了教学过程,使得学生思考的时间变短。教师过分依赖课件直接展现,导致教师忽视教学的重点与难点,忽视学生的反应,不能理解学生感受,无法进行课内交流;荧屏成为学生课堂关注的中心,导致学生只关注屏幕展现的内容,忙于抄录笔记,落后于教师的讲解,也无暇思考问题。因此,在充分发挥多媒体教学信息量大、呈现快速、表现直观、操作简便的优势的同时,也应合理规避多媒体授课的缺陷,避免教学活动出现课件“喧宾夺主”的不良倾向。

三、教学方法的研究与实践

针对上述教学实践过程中发现的具体问题,研究了采用不同的教学方法应用于数据结构的教学实践。主要包括以下方面:

(一)理论课教学设计

1.循序渐进式学习。循序渐进式学习着力于解决“愿意学”的问题,增加学生学习的积极性。由于学生对先导课程的掌握程度参差不齐,而且在数据结构中会涉及到综合程序设计问题,增加学生编程实现的困难,若调试不通,会影响学习积极性。因此,对先导课程的复习是必要的。教师应对函数、结构、指针、类等主要编程元素进行针对性回顾,先提供程序锻炼学生的阅读、分析能力,然后提出具体问题锻炼学生简单的编程设计能力,当学生具有一定的数据结构知识以及编程设计能力时,再进行算法和结构的学习。

2.分段式问题驱动法学习。问题驱动其目的是提高学生自主学习的能力,是指在老师创设的情境下学生应用已具有的编程相关知识提出新问题、解决新问题的过程。教师在讲课时,应用启发式教学,发现新型学习模式,体现教学思想。笔者根据多年教学经验,提出分段式问题驱动法教学概念,在学生“愿意学”的基础上,解决“如何学”的步骤和方法问题。(1)抽象模型的建立。在教学中发现,学生普遍反映《数据结构》中线性表、栈和队列、串的内容很容易理解,在教学中教师可以从直观意义或具体实例解释着手,采用画图举例相结合的形式,形象地解释编程实现问题。例如:在讲解队列时,可以通过生活中买票排队的过程来反映队列中插入、删除的原则,再结合数据结构中的操作队列、打印队列的应用来说明。(2)运用技巧,强化理解。对于一些需要记忆、容易混淆的概念,需要运用一定的技巧,强化学生的理解。比如对于第六章中树和二叉树的概念,学生一般不易理解树的结构,可以编口诀加强学生记忆,降低学习难度。例如:双亲表示法特点:找双亲容易找孩子难。孩子链表特点:找孩子容易找双亲难。树变二叉树:兄弟相连留长子。森林变二叉树:树变二叉根相连。二叉树变森林:去掉全部右孩线,孤立二叉再还原。哈夫曼算法口诀:①构造森林全是根;②选用两小造新树;③删除两小添新人;④重复2、3剩单根。(3)采用模块技术教学。根据教学经验发现,学生普遍在理解结构和算法的关系,如何将算法变成具体程序方面存在问题。解决此问题的有效途径是采用模块技术,即让学生把具有特定价值的函数理解记忆下来,运用时直接调用即可。一般采用算法介绍-算法分析-算法比较-算法评价-问题驱动学习几个步骤。以顺序查找为例,第一步:介绍顺序查找概念;第二步:查找过程;第三步:算法描述;第四步:比较优缺点;第五步:查找评价;第六步:问题驱动学习;学生可以记住此种步骤和算法,当作模块调用。(4)用自然语言的方式写程序。将算法变成具体的程序,是每个学生都存在的难题,即使理解了算法,写程序也无从下手。笔者总结出用说话的方式写程序更容易令学生接受。首先用自然语言理清思路,然后翻译成对应的C语言就容易了。以数字冒泡排序过程为例:

①比较第一个和第二个数,若逆序则交换;然后比较第二个和第三个数;依次类推,第一趟冒泡排序结束是对第n-1个和第n个数进行比较,结果第n位上安置的是最大数。

对应的C语言程序:for(j=1;j

if(r[j+1]

r[j] ←→ r[j+1];

②对前n-1个数进行第二趟冒泡排序,结果第n-1位上安置的是次大数。

对应的C语言程序:for(j=1;j

if(r[j+1]

r[j] ←→ r[j+1];

③重复直到“在一趟排序过程中没有进行交换的操作”或“仅第一、二个交换过”为止。

一般情况下每经过一趟“起泡”,i减1:for(i=n;i>1;i--);

但并不是每趟都会如此,可实现为:k=j;i=k;

综合以上,可很清晰写出冒泡排序算法的C语言程序:

Void BubbleSort(SqList &L){

i=n;

While(i>1){

k=1;

for(j=1;j

if(r[j+1]

r[j] ←→ r[j+1];

k=j;

}

i=k;

}

}

这样的方式让学生感觉到实际上程序是另一种“语言”,也从思维上改变了对待程序的态度。这一方法取得了比较好的效果。

(二)实验课教学设计

实践教学是数据结构课程的重要组成部分,主要解决关键的“如何用”的问题。实践教学内容的合理设置有利于学生建立起编程信心,使他们在牢固掌握书中所提供的各种算法的基础上,加深对数据结构算法的理解,同时也有利于逐步培养学生实际动手和设计能力。对于电气类等非计算机专业的学生而言,大规模系统性实验课时很少,如何能高、精、简地安排实验课时是要慎重思考的问题。根据笔者多年教学经验,将实验内容划分为基础型实验、验证型实验和设计型实验,按照课程进度穿插在各个章节需掌握的内容中挑选进行,且其实验难度循序渐进。

1.基础型实验。基础型实验主要包含复习巩固C语言知识、加深C语言理解和查漏补缺,对学生掌握较薄弱但数据结构学习过程中常用知识点,如:函数、指针、结构体等加以巩固和强化,避免学生出现看不懂教材算法、写不出程序代码的现象。其次,对新学习的内容,如:线性表、单链表、栈等进行练习。基础型实验是学习数据结构的基石,是数据结构理论和实践教学能否顺利进行的关键,能减少学生后期实验中的障碍,便于学生了解数据结构的实用性。

2.验证型实验。验证型实验目的是加强学生对算法实现方法的理解,学生参考教材提供的算法设计的例题,以避免以教师为主体的满堂灌,学生课下不动手验证,学完就忘这一普遍现象。验证型实验在教学中常被忽视,教师认为课堂讲授后,学生能够理解数据结构基本操作实现算法,而学生认为验证型实验失去实用价值,照本宣科过于枯燥。这不仅阻碍学生深化理解数据结构知识,而且教师也不能及时地得到教学反馈,造成教师和学生沟通出现障碍。验证型实验能使学生在实验过程中发现自己知识上的短缺和技术上的漏洞,且程序对于算法的成功实现能使学生得到极大的满足,树立学生完成更复杂实验的信心。其中教师可以主要在二叉树、树的部分设置验证性实验。

3.设计型实验。设计型实验具体到针对问题、解决问题,训练学生综合知识应用的能力。设计型实验的内容设置要与实际应用相关联,才能提高学生兴趣,同时难度应控制在学生能接受的范围内。因此在设计型实验的选题方面有以下建议:首先选题可以是热点研究问题,但要注意介绍背景知识,合理设置实验广度和难度;其次最好能与学生实际专业相对应,设计一些专业领域内应用数据结构可以解决的问题,拓展学生視野和思路,此外,也可以借鉴一些经典问题。

(三)考核体系设计

考核体系是学生在学习过程中关注的问题。好的考核方式能够有效检测学生的学习效果,解决“验证学习效果”的问题。随着教学环境和社会环境的改变,考核体系也由传统的卷面模式转变为理论和实践相结合的模式,这样才能全面、客观、公平地考核学生学习该课程的水平。教学中可以从两方面进行考核:一是对理论知识点的考核。该考核主要检测学生理论知识的学习的情况,采用卷面的方式。二是对实践能力的考查。可以设计驱动式教学方式,使学生分成几个小组,各自选择有兴趣的课题,教师稍作指导,让学生沿着设计思路、代码的编写、实验时遇到的问题以及如何解决等线路进行。该考核不仅是对教学成果的考查,也是对学生学习态度和学习能力的考查。通过这种形式的锻炼有很多好处:一是激发学生的学习兴趣,培养学生独立解决问题的能力,同时可以在实现实践模块的过程中,培养学生的软件设计能力和团队协作的能力,为学生以后的就业打下坚实的基础。

四、总结

将分段式问题驱动教学法应用到电气类的《数据结构》教学中,充分调动学生的积极性。通过与算法适度分离和与程序设计的更加靠近,使学生更加深刻理解分析数据结构的功能、程序设计实现和具体应用,以便能够利用各种数据结构模型实现程序编写与软件的开发,提高学生分析问题和解决问题的实战能力。近期教学效果跟踪表明,文中提出的在数据结构课程教学方式、考核方式上引入的分段式问题驱动法,能够培养理论基础较扎实、实践操作能力较强和综合表达能力较好的高素质学生。

参考文献:

[1]殷艳菊.《数据结构》教学方法创新探讨[J].河南科技:上半月,2014,(5):271-272.

[2]曹春萍,陈平.问题驱动法在“数据结构”教学中的应用探讨[J].中国电力教育,2014,(18).

[3]游琪.项目驱动在数据结构实践教学中的应用研究[J].软件导刊,2010,(9).

[4]吴聪聪,赵建立.案例驱动法在《数据结构》教学中的应用[J].电脑知识与技术,2010,(6):7322-7323.

猜你喜欢
数据结构教学方法
数据结构线上线下混合教学模式探讨
初中英语写作教学方法初探
教学方法与知识类型的适宜
数据结构课程教学网站的设计与实现
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
高职高专数据结构教学改革探讨
实用型中医人才培养中慕课教学方法的探讨
文言文教学方法实践初探
初中数学教师不可忽视的几种教学方法
TRIZ理论在“数据结构”多媒体教学中的应用