杨 利, 闵 辉, 雷 虎,韦友春
(1.池州学院 数学与计算机科学系,安徽 池州 247000;2.江西蓝天学院京东校区 a.公教部;b.计算机系,江西 南昌 330029)
《数据结构》课程教学改革探析
杨 利1, 闵 辉2a, 雷 虎2b,韦友春2b
(1.池州学院 数学与计算机科学系,安徽 池州 247000;2.江西蓝天学院京东校区 a.公教部;b.计算机系,江西 南昌 330029)
数据结构是计算机专业一门重要的专业基础课。文章从提高教学效果入手,着重探讨了该课程教学中的一些改革措施,将有助于更好地以素质教育为导向,巩固学生的专业理论基础,提高学生的实践动手能力。
数据结构;教学效果;教学改革;教学改革措施
《数据结构》是计算机科学与技术、软件技术和网络工程等专业的专业基础必修课,是计算机学科的核心课程。通过这门课程的学习,可以为后续课程打下知识基础。因此,数据结构课程在计算机专业课程中具有举足轻重的作用。在实际的教学过程中发现:该门课程对于大多数学生来说是一门学习较为困难的课程。因此,为了提高该课程的教学效果,分析目前该课程教学中存在的问题并拿出一些实际有效的解决方法是十分必要的。
《数据结构》课程的教学活动一般包括理论和实践两个部分。理论教学内容主要系统地介绍了程序设计中常用的几种数据结构、存储结构和算法的设计与实现,另外还介绍了两种常用的运算:查找、排序,以及各种算法的性能比较。实践教学部分主要包括:使用基本的数据结构进行初步的算法设计和分析;软件工程文档基本写作能力的锻炼和IDE编程平台的使用等。
从课程教学目的来说,实践编程能力是主要的教学目标,而算法编程能力又取决于学生对先行课《C语言程序设计》的掌握程度。从教学中学生上机实践的效果来看,普遍都不是很理想。
一方面,由于学生入学的基本文化素质参差不齐,有些学生基础较弱,对于算法的理解和运用感觉很困难。学生的教学问卷调查普遍反映:上课的内容不易理解,容易忘记;上机实践却又无从下手,代码抄袭问题很严重。因此教学进度的统一展开难度很大。
另一方面,先行课的影响。比如,《C语言程序设计》课程。根据实际教学进度统计,大多数教学进度内容只讲到了数组,指针没有深入展开,C语言的语法学习未全面讲授。
最后,是由于数据结构教学内容面广,实践动手能力要求高的原因。该课程中包括了10个主要的实践内容,由于完成它们需要按照严格的软件工程文档进行书写,而且代码量也达到了上百行,再加上题目也一致,所以经常发生部分学生作业抄袭的现象。
因此,在课程教学过程中,发现有一部分同学已经感觉到课程学习“难入门”、“难深入”、“难实践”。
《数据结构》课程是一门十分强调实践能力培养的课程,要求学生将算法和现实问题应用结合起来,采用规范的软件工程思想来指导算法的理论和上机实践,并能够书写基本的软件工程文档。
引导学生自主学习、独立思考、提高动手实践的能力是十分重要的。在课堂教学上,不能完全像实验报告册一样进行“教条式”教学,课程理论讲授特别是算法的讲授应结合具体的实例来讲解,例如,给学生讲解“搜索引擎”中的数据结构技术(主要涉及到图搜索、排序和索引技术)的时候,可以讲解当前网络和数据库的研究热点—XML(扩展标记语言),不断引导学生增强自觉独立思考和动手的意识,提高他们的认识:课程学习最直接的目的是运用所学知识去解决问题,而不是概念的背诵。鼓励学生参加社会开放的软件设计大赛也是一种比较好的办法。另外在教学中要把握一定的原则,不断地总结教学经验和方法,激发学生的学习兴趣,同时注意教学进度前后衔接的问题。
综上,《数据结构》课程教学重心在于算法的教学上,根据学生的掌握程度和提高教学效果的基础上,在教学过程中特别强调要保持适度的张力:一是教师的教学进度,包括前后的进度和知识的连贯性;二是学生对算法的接受程度,时刻注意学生掌握的量和度,并不断调整教学手段和方式。
目前,数据结构中算法描述主要是类C语言,将C语言作为数据结构的先行课是非常必要的。长期教学实践发现,采用循序渐进和图示的方法,有助于加深内容理解和提高教学效果。比如在教学中强调指针的“演变历史。同时在指针语法讲解的时候,采用简单的图示教学,更形象且易于理解。例如:指针是一种数据类型,在讲解时,可以先引导学生将其同基本数据类型的认识统一起来,只是它所处理的数据不同,是地址相关的信息。在基本概念理清后,再确定几条基本的学习定式和采用图示辅助理解:
(1)指针包含了两层含义:存储地址和指向某个数据对象,指向的位置依赖于基类型和存储地址。例如整型指针变量p,存放了整型变量a的地址,p=&a;图示为:
图1 指针图示1
图2 指针图示2
(2)假设基类型相同的指针变量p和q,若有p=q;则从逻辑方面的角度来说,p和q具有相同的指向,有助于理解链式插入和删除操作中指针的运用,图示为:
(3)指针运算符、指针和数组的联系
指针相关的运算符有&(取地址)和(*间接指向)。指针和数组的联系中,要特别强调:数组名是一种特殊的指针,是指针常量,数组名里面存放的地址不能被改变,即不能作为左值。
(4)指针和字符串
在C语言中,字符串的处理是一个比较重要的内容,其处理手段的丰富性不如面向对象语言。在运用过程中,往往涉及到指针。
(5)指针和函数
由于目前数据结构教材中普遍采用类C语言描述数据结构,所以函数作为模块化设计的主体自然不可缺少,在最新的C语言语法标准中,修饰符const也被吸收进来,增加了指针的表现力。遵循由浅入深的讲解原则,有必要理清楚整个语法脉络,如图3所示:
需要注意的是,除了注重C语言语法学习外,在教学内容上普遍容易进入一个教学误区:即以语法教学为主,算法教学次之。这样一来,课程的教学方向和重点就发生了偏移,脱离了以实践能力为培养目标的教学要求。
因此,通过调整教学计划,将《数据结构》课程和先行课作为一个有机整体,使得相关课程教学计划和进度进行针对性的关联统一,突出语法为基础,算法为重心。具体的做法有:例如,由《数据结构》主讲教师承担先行课程《C语言程序设计》的教学,课程之间可以更好的衔接,课程教学效果也较好,学生对于后续课程也能有一个初步的了解和准备。在教学进度的调整中,需要把握教学进度和学生接受程度的关系,特别强调以学生为中心,对于教学过程中特别难学习、难理解的知识点,应增加相应的学时,及时修正相应的教学进度。根据需要可以在数据结构的绪论章节单独增设算法中数学基础知识的讲解,例如,有关图论、组合论等,特别是递归、递推、归纳等分析方法。
根据学习认知规律,借鉴计算机科学、心理学和认知学等学科成果,将本课程的内容分成概述、基本数据结构、复杂数据结构、两种常用运算四个模块,同时强调数据结构的学习不是知识的记忆,而是算法的设计和实践。其中尤其是基本数据结构的抽象数据类型概念的理解,在教学中可以和面向对象教学中类的概念进行对比教学。其中理论教学模块和实践教学内容描述如下表1、表2所示:
表1 知识模块顺序及对应的学时
表2 实践教学内容
在实践教学中,鼓励教师采用启发式教学模式,充分调动学生的积极性和主动性,严格要求学生,注重考勤和过程性考核,让每一个学生真正落实动手实践;同时注意教学重点和难点,采用算法演示辅助软件,增强教学过程的生动性,提高学生的自主自学能力和算法程序设计能力;利用课余时间进行教学答疑辅导,增强师生之间交流和理解,鼓励学生增强学习的信心。
另外在实践教学中可以对教学内容和方式进行改进。长时间实践教学发现,一开始让学生接触图文并茂的东西和感受程序设计和开发的乐趣对其学习积极性的调动是很有益处的。课程上机实践采用的IDE环境是Visual C++6.0,虽然与实际开发联系紧密,但运用到图形界面还是需要专门的MFC知识,由于学习曲线难度大,所以可以考虑将入门难度低的C++Builder6.0作为首选。图形化界面的开发对于学生来说封装性做得很好,一方面,学生确实能排除其他不必要的因素快速地学习语法,另一方面,程序的调试结果为图形化界面,更加激发了学习热情。
通过多个学期的课程教学效果来看,以上教学改革建议和措施在解决学生学习的 “三难”问题,巩固学生的专业理论基础,提高学生的实践动手能力和激发学生的学习兴趣等方面都起到了很好的作用,课程教学效果有了明显的提高。
[1]严蔚敏.数据结构:C语言版[M].北京:清华大学出版社,2004.
[2]徐孝凯.数据结构实用教程[M].2版.北京:清华大学出版社,2006.
[3]徐孝凯.数据结构辅导与提高实用教程[M].2版.北京:清华大学出版社,2003.
[4]谢楚屏.数据结构[M].北京:人民邮电出版社,2001.
[5]李春葆.数据结构(C语言篇)习题与题解[M].修订版.北京:清华大学出版社,2002.
G642
A
1674-1102(2011)03-0144-03
2011-03-31
杨利(1980-),男,湖北武汉人,池州学院数学与计算机科学系教师,实验师,在读硕士,研究方向为程序设计、网络编程等;闵辉(1983-),男,江西南昌人,江西蓝天学院京东校区公教部讲师,在读硕士,研究方向为程序设计。
[责任编辑:曹怀火]