基于C语言的数据结构教学技巧
2011-12-31范莉丽彭涛
计算机教育 2011年18期
摘要:阐述学好数据结构的必要性和重要性;指出在数据结构教学过程普遍存在的问题;探索基于C语言的数据结构教学模式,提出一些实用的教学技巧,旨在提高学生主观能动性,提高教学效果。
关键词:数据结构 教学模式 主观能动性 教学效果
文章编号:1672-5913(2011)18-0061-04 中图分类号:G642 文献标识码:A
数据结构在计算机学科中有着重要的地位,起着承上启下的作用。通过对数据结构的学习可以锻炼学生的逻辑思维能力,提出问题、分析问题和解决问题的能力,为学好后继课程打下坚实的基础[1]。因为数据结构知识点繁多,理论抽象难以理解,使得数据结构在一开始就被披上了冷冰冰的晦涩难懂,拒学生以千里之外的面纱,神秘却使人失去一探究竟的兴趣和勇气。如果教师这时仍“照本宣科”地进行讲解式教学,采取经验式的灌输方式教学,即使面面俱到,教学效果也会苍白无力。教与学始终应该是一个互动的过程,如果只有教师作为,而学生无作为,那么教学效果无从谈起。笔者针对数据结构教学存在的困难,对学生在数据结构学习中常出现的几种心理障碍进行了分析与研究,对如何提高学生学习兴趣做出尝试性探索,目的在于使学生产生消除厌学心理,激发学生内在学习潜能,调动学生学习的主观能动性,达到理想的教学效果。
1 树立“数据结构与C语言结合有助培养核心竞争力”思想
数据结构教学包含课堂理论教学环节和上机实践环节。C语言是数据结构上机实践环节经常采用的程序设计语言。在计算机行业迅速发展、各种可视化编程工具层出不穷、软件架构理念日新月异的今天,学生对数据结构和C语言普遍存在偏见。数据结构和C语言就像一对难兄难弟,被同时打上了“与时代脱节,复杂、过时、学了也没用”的烙印。这使得相当部分学生觉得难上加难,没有学习积极积极性,兴趣更是无从谈起,有的干脆知难而退,自我放弃。
教师应该帮助学生树立起正确的学习态度,意识到数据结构的重要性。数据结构将反映客观世界中事物多方面属性的数据以一定的结构组织起来 ,有效地存储在计算机中,科学地进行数据处理,从而通过计算机系统解决大量的现实问题。数据结构体现思想和本质,具有相对稳定性,学好数据结构有助于以不变应万变,提高核心竞争力。同时,在数据结构教学的开始阶段,教师可让学生围绕数据结构的重要性这个观点,借助网络资源和书籍展开相关调查和研究,写出心得体会,以论文方式提交。道理不辩不明,在调查研究基础之上,组织学生开展有关“数据结构与C语言结合是否有助提高学生核心竞争力”的辩论会有利于让学生主动参与到为数据结构“拨乱反正”当中来,使学生对数据结构经历一个从排斥到逐渐认同,发自内心地希望学好数据结构。
2 理论课教学环节
2.1 理脉络、抓主线、高概括,树宏观映象
理论课在数据结构教学环节具有先导作用,对帮助学生树立学好数据结构的信心至关重要。但因为数据结构理论抽象,一方面学生意识到数据结构的重要性而想学,另一方面却出现因为数据结构知识点繁多,理论抽象,而使学生普遍陷入一个“认为数据结构难学,觉得学不好,所以不想学,因为不想学,导致学不好”的恶性循环。逃避只能使学生沉浸在想象的困难中不能自拔,这时教师应该通过建立一个相对完善的知识脉络图,抓住主线,高度概括,帮助学生树立起一个对数据结构的宏观映象。数据结构课程内容主要包括线性表、树、图三种逻辑结构,顺序存储和链式存储两种存储结构,以及运用在逻辑和存储结构之上的相关查找和排序算法[2]。主线在教学过程中应该贯穿始终,体现各知识点的之间的区别和联系,揭示规律性,使学生产生数据结构的概貌,不至“只见树木,不见森林”。数据结构以非数值型数据为研究对象,数据之间彼此独立又相互联系,这跟人类社会很相似。让学生意识到,数据结构并不是冷冰冰的,而是存在于形象的大千世界当中。彻底消除学生学习数据结构的恐惧感,培养兴趣,使学生有信心在知识脉络图中一探究竟,提高学习主观能动性。
2.2 造情境、融情感、产共鸣,倡体验教学
数据结构知识点繁多,理论抽象,在理论教学环节如果教师一味照本宣科,很容易使学生出现疲惫和厌倦感。有相当部分学生出现听不懂就不听,觉得考前只要把书本内容记下来就可以的错误学习态度。没有被感受,被理解的知识很难被记忆,即使强迫记住,也很难在需要时从知识脉络图中被准确地提取出来并加以应用,是缺乏应用性的沉睡的死知识。使人印象深刻的往往不是刻意记忆而是被融入了情感因素的个人体验,“兴趣是最好的老师”,正印证了情感因素在学习中的重要性[3]。化抽象理论于形象描述,将抽象理论形象化为相关生活情境,让学生置身其中,对何时何地何人何事,发生了什么触发情感,引起高度关注和个人充分体验,就能更好激发学生学习兴趣,使学生更善于理解生疏的概念和晦涩的理论。这些知识点更容易被记忆并且内化,随着情境的再现和情感自由释放,知识点可以被随时唤醒、提取和加以应用,成为真正的活知识。
兴趣可以培养,正如情境可以创造。形象的情境有时并不能从严格意义上与抽象的理论达到完全一致,找到恰当的情境需要教学经验的不断积累。情境一方面要能满足学生的情感需求,激发学生的学习兴趣,另一方面又要能映射出抽象理论与生活现象存在的千丝万缕,不可割裂的联系,促进学生积极主动地进行理性思考。笔者对如何将形象情境引入理论教学做出尝试性探索,设置了一些理论的相关情境,示例如下。
1) 哈夫曼树构造过程情境设置。
构造哈夫曼树的过程可设置如下情境:第一步中各结点比作孤儿,各结点值5、6、15、18、34比作孤儿的生命值,刻画被领养的急迫程度,构造哈夫曼树的过程也就是孤儿双双被领养的过程。生命值最低为5和6的两个孤儿将最先被领养,一旦被领养,在下一轮领养过程中急迫程度降低,体现为新生成结点(领养人)生命值比两结点值都大(取两孩子值之和)为11。此后将由值为11的领养人(做为孤儿代言人,两孩子将不再参与)参与到下一轮领养,生命值最低为11和15的结点将被领养,产生第三步结果,新生成值为26的结点,继续参与下一轮领养,产生第四步结果,以此类推,直到所有孤儿被同一个领养人统领,实现第五步,至此完成哈夫曼树的构造过程。
2) 快速排序过程情境设置
快速排序的过程可形象概括为“勇战高峰,虚位以待,针锋相对,发扬挑战精神”。假设要将各无序数自左向右的从小到大排序,可设置如下情境:把最左端看成最弱势的位置,最右端看成最强势的位置,势力自左向右逐渐增强。处于最弱势的45进取心超强,一开始就勇于挑战处于最右端最强势位置的大王45(体现“勇战高峰”),如果值大不过大王,败下则继续挑战次强势者小王26(次右端位置者),一旦45值大过被挑战者,胜出则45就暂时占据对方26的强势位置(体现“虚位以待”),而26到45的弱势位置,完成第一次交换。但45的这个胜利只是暂时的,处于相继弱势位置的 34和67看到原处最弱势位置45的胜利果实,又将依次挑战暂时胜利的45,直到67值比45大,67胜出。胜出者67又将占据45刚占据的强势位置,45又回到胜出者67的原弱势位置,完成第二次交换。但45的这个失败也是暂时的,45仍然意志顽强,斗志昂扬,又开始依次挑战后继未曾挑战过的强势位置者12,直到胜出。又紧接被未与自己较量过的弱势位置者95挑战,较量如此反复进行。(体现“针锋相对”),直到45最终尘埃落定,呆在一个真正属于自己的位置,i和j共同指向的位置,处于这个位置左边的26,34和12都是在与45较量过程中失败的,而处于这个位置右边的78,95,67,45都是在与45较量中胜出的。情境到此体现了快速排序以最低端元素为标准将待排序序列划分为左右两部分实现第一次划分的思想。但是以45为分界的左右两部分的内部较量又相继产生,很快出现第二个挑战者,第三个挑战者,挑战精神被逐渐壮大(体现发扬挑战精神,根据第一次划分思想继续对左右两部分进行划分的递归思想)。直到每个数都找到了真正属于自己的位置,最终完成快速排序。
这些情境可能并不完善但却充满善意,旨在使学生产生学习兴趣,对所学知识印象深刻,对抽象理论产生共鸣,经历由感性到理性,促进思考,激发学习潜能,进而乐于调动理性思维加入到解决问题当中来。让学生在课堂之外也能在脑海中不自觉地温故课堂所学,有所领悟,这种领悟弥足珍贵。如果学生能够达到读无字书境界,产生融会贯通的体验,那他就会乐意为获得这种学习快乐而主动参与学习,甚至他已不能将学习和娱乐从严格意义上完全分开,真正“学而时习之,不亦乐乎”。
3 上机实践教学环节
3.1 鼓励学生摸石过河
数据结构是理论与实践紧密结合的课程。领悟算法可以借助形象的描述,但算法思想最终要通过某种语言加以实现验证,C语言是数据结构教学中普遍采用的程序语言。让学生认识到不管多复杂的C程序都是由顺序结构、选择结构、循环结构三种组成,涉及到数据输入和输出,定义好数据类型,通过数据间彼此的联系访问到相应数据,完成相应的操作至关重要。
在上机实践环节,教师可以给出相关参照程序,里面涉及相关C语言语法规则和细节,目的旨在鼓励学生通过摸石过河方式上机实践。借助参照程序,可以帮助学生的在一定程度上消除对C语言的恐惧感,不至于出现学生对着C语言程序设计相关书籍一脸茫然,无从下手,有思想却无法表达的情况。通过参照程序,学生能针对性地进行相关C知识点资料查找,迅速定位到相应章节,查漏补缺,集中注意力表达算法思想并勇于开始上机实施。
除了要学生学会借鉴和模仿,教师还要督促学生消化吸收,让学生不断回答质疑。揣摩别人意图和表达自身意愿,后者更让人心情舒畅。如果学生意识到抄袭,全盘“拿来主义”无法投机取巧,而要剖析“拿来”的思想深度,就会更愿意真实地暴露自身想法,不怕犯错。
同时要告诉学生,在调试程序过程中,错误不可避免,学生尽可能减少错误发生频度,提高错误质量以及纠正错误的能力。在学生有可能偏离问题方向时,教师应该进行及时纠正和引导。
3.2 鼓励学生多方式过河
在不偏离问题的基础使问题富于变化可以不断激发学生的好奇心,引发更深层次的思考,提高学习主观能动性[4]。鼓励学生由简单到复杂,尝试用C语言通过多种方式解决问题。对问题的变换可以是多方位的,比如:
1) 相关变量用字符类型和字符串类型如何做?
2) 用结构体类型和不用结构体类型如何做?
3) 相关变量用结构体类型和用指向结构体类型的指针类型如何做?
4) 函数用参数和不用参数如何做?
5) 用引用型参数和不用引用型参数如何做?
6) 相关变量在函数中申明和不在函数中申明如何做?
解决一个问题的成就感会使学生勇于接受更困难问题的挑战,随着问题的不断升级和解决,战胜困难的愉悦也将逐渐弥漫学生的整个身心。如果学生为了获得解决问题的快乐,开始尝试自己提出问题,并乐于解决,那么学生的主观学习能动性便获得了进一步的提升。
4 结语
“数据结构”课程教学效果的提高关键在于消除学生畏难、厌学心理,加强教学互动,提高学生学习的主观能动性。笔者针对基于C语言的数据结构教学模式做出尝试性研究和探索。提出通过改革理论课和实践课教学环节,激发学生学习潜能,调动学生学习的主观能动性,提高数据结构教学效果。
参考文献:
[1] 穆翠霞. 女院数据结构课程的教学探索与体会[J]. 计算