应用型高校“数据结构”教学改革探索

时间:2022-08-29 03:19:47

应用型高校“数据结构”教学改革探索

摘要:“数据结构”是计算机专业的一门核心课程,但实际教学效果却往往难以令人满意。结合应用型高校学生的实际情况,在教学过程中进行了多方面探索和改革,对培养和保持学生的学习兴趣、提高学生的分析和解决问题的能力方面起到很好的效果。

关键词:数据结构;现场编程;联动教学改革;C语言

作者简介:蔡敏(1975-),男,安徽巢湖人,巢湖学院计算机与信息工程学院,讲师;汪世义(1974-),男,安徽桐城人,巢湖学院计算机与信息工程学院,副教授。(安徽 合肥 238000)

基金项目:本文系巢湖学院教研项目(项目编号:Jyxm201102)、安徽省省级质量工程项目(项目编号:20100970)的研究成果。

中图分类号:G642.0 文献标识码:A 文章编号:1007-0079(2013)07-0103-02

“数据结构”课程对于培养应用型计算机专业人才至关重要。但因其理论抽象、逻辑性强、对程序设计基础要求比较高,学生普遍感觉这门课程难以理解,上机实践也不知从何着手,对该课程缺乏应有的兴趣。王晓东教授指出:学生的学习兴趣受专业基础课程成绩和对课程学习重要性认识的影响,增加实践性教学和以案例为先导的理论课教学方式更有利于提高学生的学习兴趣。[1]本文以此为指导思想,开展了一系列教学改革探索。

一、与C编程语言联动改革

学习数据结构离不开编程。所学的理论只有落实到程序实现上,学生才会真正感到“数据结构”课程的用处。以前教师只试图通过一些有趣或实用的例子来激发学生学习兴趣,如猴子选大王、24点游戏等问题,但这种兴趣并不能成为学生尝试编程实现的动力,其根本原因不是学生偷懒,而是他们的编程基础比较差。在这种情形下,要求学生运用理论去解决实际问题是不切实际的。因此,如果只是单纯对“数据结构”教学进行改革,不解决学生编程基础差的问题,改革必定难以取得成功。我校开设的“数据结构”以C语言为描述工具的,因此对“数据结构”与“C语言”两门课程进行了联动教学改革。

有的教师课堂驾驭能力较好,教学也非常负责,但在C语言教学过程中,有意或无意把公共C语言等级考试的大纲当作计算机专业C语言教学大纲来开展教学。他们在教学中比较注重语法细节的教学,没有将教学重点放在算法上。这种教学对提高非计算机上专业学生等级考试通过率效果非常显著,但对于计算机专业学生却效果不好。

C语言本身概念复杂、规则繁多、灵活而易错,在教学过程中要“淡化语法规则,注重算法,以练代记”。提高编程能力的唯一途径就是不断编程,只有在反复实践中才能掌握并灵活使用诸多繁杂的规则。把语法知识分为三类,第一类是教师须重点讲解的语法,比如for语句,应重点讲解其结构以及嵌套方法,并辅以足够的练习;第二类是非重点语法,这类语法不应占用课堂时间,比如for语句的各种省略形式,如果实践中遇到需使用这类语法的情况,可引导学生自主学习;第三类是尽量不用的语法,主张在编程时使用简单明了的语句,比如在表达式里要求不用(i++)+(++i)+(i++)形式。

过度地强调语法一方面偏离了计算机专业教学目标,另一方面占据了过多课时,使得后面的指针、结构体等内容得不到充分学习,而这些内容恰恰是C语言的难点和精华,也是数据结构的重要基础。缺乏这些知识,将很难理解数据结构。

二、数据结构教学改革

1.一题多解、一题多变、一题多用

教师在讲解课本算法时要广开思路,不能就题论题,应适当加以扩展、发散,尽量做到一题多解、一题多变、一题多用。这既有利于学生更透彻地理解课本算法,又能开阔学生思维,激发学生积极思考。实践表明,这种方法课堂气氛热烈,学生参与度高。

例如课本例题:有两个顺序表LA和LB,其元素均为非递减有序排列,试编写一个算法,将它们合并成一个顺序表LC,要求LC也是非递减有序排列。[2]

课本算法思路是:首先根据LA和LB中数据元素个数之和,为LC分配空间;其次依次从表头到表尾扫描LA和LB中元素,比较它们当前元素的值,将值较小者插入LC中,直到其中一个顺序表扫描完毕;最后将另一顺序表中剩余元素逐个插入LC中。

对此例题准备了两个发散点。发散点一:如果希望LC合并后的结果是非递增有序排列,经讨论得到可得到两种办法,一种是扫描方向不变,而把插入方向反过来,即从表尾往表头方向插入;另一种是插入方向不变,把扫描方向反过来,但每次将值较大者插入到LC。如果把扫描和插入方向都反过来,每次比较时将值较大者插入LC,就可以得到原题另一解法。发散点二:课本算法使用了3个循环,其中后两个循环只会执行其中一个,那么可不可以只要一个循环就能达到目的呢?[3]首先带学生分析为什么课本算法要三个循环。这是因为第一个循环后必有一个顺序表中会有剩余元素。要想在一个循环就能实现,必须在这个循环内让所有元素都能插入到LC中。方法是在两个顺序表尾各加一个无穷大。注意控制循环条件,不要把无穷大也插入到LC中了。

可以发散的例子很多,比如再讲二分查找时,可以发散到三分查找,也会引发有趣的讨论。再比如折半查找还可以用来迅速找到第k小的元素,等等。

2. 适当采用现场编程示范

很多学生反映上课算法思路能听懂,许多问题他们心里知道如何去解决问题,但就是不知道如何用编程语言或算法表达出来。教师可利用多媒体教室,在课堂上可适当采用现场编程方式。[4]这种方法可以让学生见习教师把自己的思路转变成代码的全过程。程序从无到有,到最终运行通过,对学生编写和调试程序起到很好的示范作用。C语言教学中涉及的程序通常较短,最好能让学生主写,而数据结构程序通常比较长,也更复杂一些,可由教师来主写,边写边讲解。教师也可故意制造一些问题,由学生积极献计献策加以解决。现场编序虽然比较耗费课时,但适当示范还是必要的。

例如猴子选大王问题,教师先带着学生先把算法总体思想写出来,这个算法不依赖于具体的存储结构。接下来分别用顺序结构和链式结构加以实现。这对学生深刻理解绪论中“算法的设计只取决于逻辑结构,而算法的实现则依赖于具体的存储结构”这句话很有帮助。也能让学生体会到用类C语言表示的算法与用C语言实现的程序的区别。同时,学生也能认识到,算法并非只是抽象的理论,而是可以运用到实践中的。

经过这次课的讲解,直接把课本算法照抄到电脑上运行的学生大大减少,不少学生课后按自己的思路,写出了程序,极大地增强了学生编程的自信心。

3.培养学生编程意志和自信心

意志与兴趣并不矛盾,有兴趣固然是好,但没有产生兴趣之前,意志就显得特别重要了。当学生能解决很多问题时,往往就有兴趣了,至少不觉得痛苦。学习编程也一样不可能一帆风顺,虽然教师布置任务时总希望由易到难,循序渐进,但实践中总会遇到一些相对复杂的问题,需要花费较多时间和精力。如果学生没有坚强的编程意志,知难而退,最终也难以成为高质量的应用型人才。比如24点游戏,因为担心学生意志力不够会中途放弃,所以采用逐次增加任务的方法。首先让学生实现课本表达式求值算法,然后要求他们修改程序和结构,随机产生1至13的整数,当输入一个表达式后,能判断是否正确,最后再要求如果用户输入“?”应能给出一种解,或提示无解。等全部实现完之后,学生发现已经写了几百行程序,特别有成就感。学生在完成该课程设计题的过程中,经历了反复认真的思考,耐心的调试,对培养学生编程意志和编程自信心起到很好的效果。

三、其他辅助措施

1.及时给学生提供帮助

由于每次上机实验的学生数较多,有些学生的问题不能得到及时解决,如果学生问题积压多了,也会逐渐失去兴趣。教师可通过电子邮件、QQ等方式给他们提供及时帮助,还可以开展编程兴趣小组,让编程能力强的同学帮助编程基础差的同学,也为他们相互交流编程心得提供了方便。

2.严格考核方式

在教学过程中发现,一些学生不愿独立思考,把同学做好的作业直接拷贝过来。因为学生数较多,难以逐个甄别,为此教师采取了随机抽查答辩的方式。每次抽取一半学生当面给教师解释所提交的程序的部分代码,如果不能正确解答,则本次作业被视为不合格。这种方式至少能鞭策学生设法弄懂拷贝来的程序,这也是一种收获,而大部分学生都能独立地或经过与同学讨论完成作业。

四、结束语

兴趣是学习的内在动力。只有让学生对编程产生兴趣,学生才有可能主动把理论应用于实践,主动去提高自己解决问题的能力,以后的教学才能事半功倍,应用型计算机专业人才培养目标才能最终得以实现。好的编程基础是学习兴趣的前提条件,如何使学生产生和保持编程兴趣,值得进一步深入研究。

参考文献:

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

[2]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,2007,

4:26.

[3]T.Cormen,C.Leiserson,R.Rivest,等.算法导论[M].潘金贵,等,译.

北京:机械工业出版社,2006.

[4] 董洪伟.数据结构课程的教学改革初探[J].无锡教育学院学报,

2005,(1):56.

上一篇:中学就应该多一些研究探究性思维 下一篇:广梧高速K119+160~K119+300路基失稳分析及处...