数据结构课程教学改革探讨

时间:2022-10-22 07:15:09

数据结构课程教学改革探讨

摘要:数据结构是计算机专业的基础课,同时也是考研的专业课,占据着非常重要的地位。本文针对笔者在数据结构教学过程中所发现的师生精力投入与学习效果不成比例,学生不能用所学知识很好地解决现实问题的现象,在分析原因的基础上,提出一些教学改革措施。

关键词:数据结构;教学问题;改革

数据结构是计算机科学与技术专业重要的专业基础课,不仅在计算机专业有着重要的地位,在整个电子与信息领域都是重要的基础课。学生通过数据结构课程的学习可以掌握客观事物在计算机内部的表示方法,也能具备设计算法、分析算法好坏的能力,从而不仅能够具有动手能力,也掌握科学研究的基本功。因此,各高校都非常重视数据结构课程的教学工作,这也是目前计算机教育改革的重点和热点。

1 教学中遇到的问题及其原因

数据结构课程的基础性及其在考研科目中占据的比例,使得学生都能够充分对待本课程,也愿意花费精力与时间来学好本课程,但由于该课程的抽象性等原因,学习效果并不理想,学生学习的效果与投入并不成正比。学生普遍反映的问题是:课堂上听老师讲解觉得很好理解,但是让他们自己动手设计数据结构及其算法来解决实际问题时就感觉力不从心了。也有些同学觉得数据结构理论性太强,过于抽象,在实际的应用中很难抽象出各种抽象数据类型。当老师重新讲解后又发出题目并不难的感慨,即常说的眼高手低。另外一个常见的现象就是只知道本课程很重要,不知道重要在什么地方,与实际生活相脱节,不能用之来指导解决实际问题。针对这些现象,笔者归纳了一些原因如下。

1)课程本身难度较大。

数据结构课程本身是一门抽象程度较高的课程,对于缺乏实际应用经验的学生来说,理解起来具有一定的难度。不少同学反映学完该课程之后不知道能用在什么地方、能够解决什么问题,即使教材上所讲内容都完全掌握,仍然无法应用到实际问题当中,除了课堂上讲的例子外,找不出该知识点的其他应用,同时遇到实际问题时,也想不出该问题的抽象数据类型。

2)编程能力较差。

C/C++程序设计语言是学习数据结构课程的重要基础,无论对于学习该课程还是应用该课程的知识解决实际问题都是非常重要的前提条件,但不少学生对于程序设计语言的掌握不能满足数据结构课程的需要,无法理解课堂上讲的例题和思路,更无法进行算法分析、比较算法性能,成为影响学生学习数据结构课程的一个因素。

3)学生缺乏主动思考。

由于老师的强调和考验课程的性质,学生大多明白本课程的重要性,因此学生的学习兴趣较高,但长期以来的学习方式和教学模式让学生在学习过程中缺乏独立思考的主动性,随着课程的深入,学生容易对课程学习的意义产生怀疑,失去学习的兴趣和主动性。如何在整个教学过程中保持学生的学习兴趣也是一个决定教学效果的关键因素。

2 教学中采取的措施

明白了产生问题的原因之后,通过与其他老师的交流和讨论,笔者在教学中采取了一系列的改革措施,并在课程教学实践中取得了很好的教学效果,主要在如下5个方面进行了改革。

2.1 逐步引导

针对数据结构课程较为抽象和学生理解起来比较吃力的特点,笔者在讲解每个知识点的时候先从直观的例子引入,然后与学生讨论解决方法。通常情况下,学生提出的解决方法多数都存在问题,或者是解决方法上存在缺陷,或者是算法的执行效率上不够完善。针对学生的方案分析不足之处,教师逐步引导其正确的解决方法,从而引入相关知识点。

例如在讲授“栈”这一知识点的时候,结合笔者的研究方向,先给学生介绍移动机器人未知环境下路径规划的方法,机器人在向着目标位置运动过程中,发现障碍物之后,会采取避障行为,向着绕开障碍物的局部目标位置运动,避开障碍物之后再向下一目标运动。由开始的一个全局目标到避障时逐步增加的局部目标,再到避开障碍物之后的一个全局目标,如何保存运动过程中的目标和相应的顺序?笔者让学生展开讨论。不少学生提出采用数组加一个表示数组长度的变量来解决该问题,自然而然的引入“栈”的概念。这种方法能够积极调动学生的积极性和参与欲望,同时也给他们指出思维方式的不足,并且很自然地将相关知识点的适用范围、解决问题的方式和优点在讨论中与学生一起归纳出来,这样学生自然就能牢牢掌握。逐步引导的方法虽然在每个知识点引入的时候花费的课时比较多,但后面的讲解将会很流畅,节省不少课时,因此课程进度仍然能够与进度计划保持一致。

2.2 加强实践教学环节

学习数据结构的最终目的是为了提高应用计算机解决问题的能力,培养并提高学生的实践能力是其教学重点之一。在教学实践中,学生普遍反映课堂上能够理解讲授的知识点,但只要一动手实践就糊涂。学生在实践环节上的失败,反过来又会影响其对理论知识的掌握,打击学习的兴趣和主动性。因此,我们在学生掌握基本理论的基础上,要求和鼓励学生进行一些实践工作,重视实践在教学中的作用。

现在多数课堂或课后的习题都是抽象之后的练习,即规定了学生采用什么样的数据存储结构和解决问题的方法,只是锻炼学生的算法实现的能力,在考试当中也是如此,无论是期末考试还是考研入学考试,都明确规定了题目要采用的方法,这样虽然对于批改卷子和对知识点细节的评判较为有利,但忽略了对学生解决实际问题能力的培养和考评。在该模式下培养的学生遇到实际问题不知道该采用哪些知识点解决问题,这样培养出来的学生“只见树木,不见森林”,无法独立解决实际问题。

因此,在考评机制上我们逐步加大对分析问题和抽象能力的考核。考题不再规定使用什么样的存储结构,解决问题也不再指定采用什么算法,只要能够解决问题即可。通过这种方式,学生不仅能够充分发挥主观能动性,抽象问题的能力得到充分展现,而且有可能给出的解决方式比标准答案更加优化,使学生的能力得到充分锻炼。

2.3 扩展问题,增加学生主动性

针对学生主动性不够的问题,我们对课堂上讲述的知识点提出新的要求和限制条件,要求学生课下扩展新的功能。如在“栈的应用”章节讲到迷宫求解问题,利用教材上所述算法可以解决迷宫问题。我们可以提出新的要求让学生解决,如教材给出的算法只能保证求出可行解,不能保证最短路径,可以要求学生求解最优路径;或者对迷宫设置多个出口,要求求出最近出口或到达所有出口的路径等,这样就可以与“树”的章节结合起来,极大提高学生的主动性。

2.4 扩展最新应用

在讲课过程中,学生对学科的最近进展和最新应用都非常感兴趣,或者对身边经常接触的案例兴趣很高。比如在讲迪杰斯特拉算法时,可以进一步扩展到A*算法,并讲到在经典游戏“红色警戒”中的应用。从游戏中士兵或战车的自动路径规划引入,指明目标位置之后,游戏中的战车都能够按照最优路径前进, 从而引入迪杰斯特拉算法和A*算法,学生对游戏中采用的技术和算法非常感兴趣,从而达到很好的教学效果。甚至能够主动提出问题,结合游戏扩展到动态环境的路径规划,超出了预计的教学效果。

2.5 改进教学方法

虽然现在讲课都已经采用了多媒体教学,但是并没有很好的发挥多媒体的作用,很多情况下只是把原来板书的内容照抄到PPT上,没有起到交互式和动画教学的目的。因此学生对于一些细节的理解会受到一定的影响。针对该问题,我们重新设计了授课PPT,将细节的变化过程一一展示,如讲授递归调用时,随着每行代码的执行和栈的每一次入栈、出栈等操作,栈内数据的变化逐步展现在学生面前,对于学生理解具有很好的帮助作用。

3 进一步改革的设想

教学改革的目的是使得学生更好的掌握本门课程,数据结构是一门实践性非常强的课程,仅仅依靠课堂上的时间是远远不够的。因此除了课内安排的实验和课外实验,可以结合本课程给学生安排或选做一些综合性的实验,能够用到跨章节的知识点,甚至是跨课程的实验。

从下学期开始,我们也将尝试给学生安排针对性和综合性较强的课程设计,只给学生提课程设计的问题和要求,采取什么样的数据结构和算法完全由学生自行设计、自主实现,完全发挥学生的主动性,相信学生经过大量解决实际问题的锻炼,必定能够更好的掌握数据结构的内容。

4 结语

本文针对在数据结构教学过程中所发现的问题进行讨论和改革,提出了5个方面的改革措施并将之在教学中应用,实践证明该措施取得了良好的教学效果,笔者对进一步的改革提出了一些建议,希望能够更好地提高教学效果。

参考文献:

[1]叶双,吴清江,缑锦,等.提高“数据结构”课程教学效果的方法初探[J].计算机教育,2009(11):90-92.

[2]王晓东,吴英杰,余春燕,等.算法与数据结构学习兴趣影响因素分析[J].计算机教育,2010(6):73-76.

[3]孙岐峰.“数据结构”课程教学反思与改革[J].计算机教育,2009(11):66-68.

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

上一篇:应用型本科计算机专业实践教学体系的构建与实... 下一篇:计算机组成原理精品课程建设的探索与实践