时间:2022-08-01 09:10:04
序论:在您撰写数据结构与算法时,参考他人的优秀作品可以开阔视野,小编为您整理的7篇范文,希望这些建议能够激发您的创作热情,引导您走向新的创作高度。
关键词:算法与数据结构;教学质量;教学探索;教学方法
作者简介:李永(1978-),男,安徽宿州人,盐城师范学院信息科学与技术学院,讲师。(江苏 盐城 224002)
中图分类号:G642.0?????文献标识码:A?????文章编号:1007-0079(2012)31-0057-02
“算法与数据结构”主要研究数据在计算机中的表示方法、存储方法以及其上的操作。[1]在美国IEEE/ACM课程体系和我国教育部学科规范中,[2,3]“算法与数据结构”被列为核心课程之一。它是操作系统、数据库、软件工程和人工智能等课程的基础。算法与数据结构蕴含的思想对学生在软件设计方面有很强的导向性,它的教学效果直接影响学生的数据抽象和程序设计能力的培养。学习该课程,一方面,使学生学会分析数据对象的特征,掌握数据组织的方法和在计算机中的表示方法,为数据选择合适的逻辑结构、存储结构和算法;另一方面,培养学生良好的程序设计风格,进行复杂程序设计的训练。[1]
为了在课时约束、学生基础、课程难度、教学目标等约束下最大化教学质量,使学生最大限度地得到提升和发展,本文从分析“算法与数据结构”课程存在的问题出发,在教学内容、教学方法、实验教学等方面进行了一些探索和实践。
一、“算法与数据结构”教学中存在的问题
1.课程本身难度大
“算法与数据结构”是抽象与具体的统一,理解与掌握它需要跨越横亘在抽象与具体之间的鸿沟。学习该课程有两个难点:一是从算法与数据结构到程序实现的跨越;二是从实际应用到数据结构抽象的跨越,即如何利用算法与数据结构解决实际问题。[4]“算法与数据结构”的内容抽象、繁多、逻辑性强,难于理解掌握。学生学完后不知道学了什么,当需要解决实际问题时感到无从下手。“算法与数据结构”综合性、技巧性强,各种算法中凝结了大量杰出计算机科学家的智慧,在有限的教学时间内部分学生因无法领悟其中的思想与精髓而产生厌学情绪。
2.前导课程基础不扎实
“C语言程序设计”、“高等数学”、“离散数学”等是数据结构的前导课程,其中“C语言”与“数据结构”课程的联系最为密切。“C语言”一般开设在大一第一学期,是学生最先接触的程序设计语言。由于内容多、难度较大、大班教学、课时有限等原因,教学时间大部分花在基本概念及简单程序的编写上,对结构体、指针、参数传递等难度较大的知识点讲解不深入,为“算法与数据结构”的学习埋下了隐患。
3.教学方法有待改进
“算法与数据结构”的教学方法主要为板书结合PPT课件,教学方式采用“教师讲—学生听”的灌输式授课模式,与学生互动少,课堂气氛沉闷。教学方法中以教师为中心按照教学大纲教学,存在照本宣科、就事论事、内容堆砌、缺乏新意等缺点。由于没有考虑学生的接受能力、思维能力以及编写代码的能力,学生只是不加思考地被动的接受知识,限制了学生的积极性与主动性的发挥。
4.实验教学中存在的问题
目前课程实验中存在的问题主要有下面三个方面。首先,大多高校“算法与数据结构”实验的教学方式仍是以教师为中心,以灌输、模拟、验证为主;教师按教材单元布置实验任务并做适当的引导和提示,然后学生动手实践。没有考虑实验的实用性以及是否适合学生,不能调动学生的学习热情。其次,学生的程序设计能力普遍较弱,面对问题时难以有清晰的算法思想,无法将算法思想转变为正确的程序代码,上机调试和运行程序时面对众多的错误提示无法正确解决,实验课教学效果大打折扣。再次,由于实验课时有限,且实验内容具有相互依赖和递进的特点,部分学生又不能充分利用课余时间,造成问题堆积。
二、“算法与数据结构”的教学探索
1.合理组织教学内容
贯穿“算法与数据结构”课程的主线是逻辑结构、存储结构及操作,即线性表、树、图三种逻辑结构;顺序和链式两种存储结构;插入、删除、查找、遍历等操作。这些内容不是孤立的,在教学过程中将它们联系起来形成一条主线,由线性到非线性,由简单到复杂,方便学生理解和掌握。在教授课本内容时,根据教学大纲的要求梳理并提炼出各章节的知识框架,根据学生情况和教学目的合理划分课时,控制课程节奏。课堂上主要针对程度一般的多数学生从数据结构的逻辑结构、存储结构和数据的运算三个方面去组织教学内容,做到重点突出、内容简洁。对于程度差的学生进行个别辅导,通过补习和细化教学内容帮助其跟上教学进度。对于程度较好的学生,通过指定课外读物、布置思考题等,让其能力得到充分发挥。
2.上好第一节课,激发学习热情
在第一节课不要急于给学生灌输基础的理论知识,而要引导学生明白为何学,讲解数据结构的研究对象是什么,学习数据结构有什么用,采用什么样的方法来学习该课程。这些问题的引入不能从抽象的概念入手,而要从贴近生活的一些例子从案例入手,让学生在深入课程学习前体会到课程的重要性。例如,学生成绩管理系统中如何组织学号、姓名、成绩等,才能快速实现查找、插入、删除等操作;计算机与人对弈时如何应对变化的情况以及给出周全的对策,实现灵活对弈等。也可给学生展示一些上届学生的优秀作品,让学生先认识到数据结构在实际编程中的应用,并指出在学期结束时学生也能设计出类似这样的系统。使学生认识到该课程实际应用的价值,对课程充满探索的欲望,积极性得到调动,从而有一个良好的开端。
1 理论教学
1.1 明确教学目标
《数据结构与算法》这门课程的所有算法思想最后都会落脚到程序上,都需要用高级语言表现出来,老师把握不好目标,很容易把数据结构当成C语言的“延伸”和“升华”,课堂上带领学生一个一个读算法程序,而没有做到让学生去领会算法的思想。所以老师一定要明确这门课的教学目标是编程思想而不是程序本身,先有好的构思和想法,辅助语言加以实现,每节课都要以“思想第一,实现第二” 为教学纲领,教学生怎么从实际问题中抽象出模型,提炼出思路,然后用程序来实现这个思路,最后真正的解决问题,就像古人讲的“胸有成竹”,在画竹之前,对于竹子的高度,树干、树枝和叶子的结构,心里要有个规划,做到心中有数,这样画出来的竹子才能形象。编程也一样,先从实际问题重剥离出系统架构,构造出合适的模型,选择高效率的算法,再使用高级语言把它实现,最后再进一步处理趋向完善,使之具备客户所需要的功能。学生要从《数据结构与算法》这门课程中掌握的就是如何从实际问题中抽象出模型、建造起架构的过程,老师只有时刻带领学生从这个角度来着手解决问题,才能真正为该课程的教学把握好方向。
1.2 合理运用教学方法
随着现代教学水平的提高,越来越多的多媒体课件和网络资源被运用于教学当中,人们也对启发式、问题探究式、课堂讨论式等这些新型的教学方法趋之若鹜,或多或少的把传统的教学方法冠以“落伍”和“填鸭式”等贬义色彩。但我个人认为,传统的黑板加粉笔的教学方法,在《数据结构与算法》这门课程当中仍然有着举足轻重的作用,因为PPT课件和动画都是老师预先按照自己的思路经过思考和摸索,多次尝试和修改而整理出来的,对于经验不丰富,未曾接触过相关知识的学生来说,直接跳出来的课件和动画没有给够他们思考和整理思路的时间,冰冷的课件和学生没有眼神、肢体语言等情感交流,无法从算法思想的角度去引领学生一步一步的剥离表象,抽离出问题的本质。所以,片面的强调新型的教学方法是不科学的,传统的黑板教学也不可忽视,在传统的基础之上,一些粉笔和语言都不太容易展示的算法执行过程,可以结合现代化多媒体教学手段来表现,形象的动画能让抽象的内容变得更加直观更易理解,学生也更容易被带入其中,从而使教学过程变得更加生动形象。
所以,合理的教学方法应该是以板书为主,课件为辅,配合老师与学生的情感交流,这样才能取得好的教学效果。
1.3 实例化教学设计
大学的学习和高中不一样,不再简单的以分数定乾坤,学生没有了压力也就没了动力,而且大学生都各有锋芒,有自己独立的思想,如何调动学生对该课程的兴趣,使被动学习变为主动求知就显得尤为重要,那如何激发学生的学习兴趣呢?答案是要让学生感觉到数据结构解决的问题其实都来源于我们的实际生活,是切切实实存在于我们周围的,比如讲到顺序表和链表,可以举例我们早期去银行办事需要排队,中间插队一个人后面的人都要后移(顺序表插入),中间有一个人离开后面的人都要前移(顺序表删除),这就是顺序表,而现在我们在银行取个号就可以找个舒服的位置坐下,或者离开去办其它的事情,等叫到号再到窗口,这就是链表,存储的位置不连续,但是大家的逻辑关系仍然存在;比如讲到图的最短路径问题时可以设计一个旅游场景,需要去多个城市旅游,但又希望旅途最短花费最少,让学生去设计路线;比如讲到约瑟夫环的时候可以结合犹太历史故事让学生身临其境;再比如讲到汉诺塔的时候可以让学生先试着玩一玩汉诺塔游戏,然后再考虑怎么用算法来实现。
“兴趣是最好的老师”,真正把学生的兴趣调动起来,使学生进入到一个积极思考和探索的活跃状态,教学就能起到事半功倍的效果。
2 实验教学
鉴于该课程的课时压缩,实验课的课时也随之减少了,学生能动手实践的时间减少使教学效果大打折扣。而该课程的学了老师在理论课上的引导以外,学生自己动手去“练”才是真正去领悟和内化算法思想的法宝,“练”必不可少,所以在这有限的实验课时间里,如何让学生的“练”落到实处也需要老师投入很大的精力来设计和管控。
2.1 合理安排实验项目
根据教学大纲,结合学生的实际掌握程度来设计实验项目,主要分为验证性、可选性和综合设计性三大类,验证性实验的目的是重温基础知识,强调编程规范性和完整的算法思想, 主要针对一些常用的算法实现, 如顺序表、链表的创建、要求学生在上机实验课堂内完成。可选性实验稍有难度,需要融会贯通和创新能力,针对基础较好的学生,如果验证性实验很快完成,就可以进行可选性实验项目的操作。综合设计类实验一般涉及多个知识点, 要求学生自己抽象出模型进行设计, 主要训练学生综合运用所学知识的能力、团队协作能力和自主创新能力。题目一般是要求解决实际生活中遇到的问题,可以对学生按照基础的强弱搭配成3-4人一个小组,完成后通过现场演示和答辩来评价效果,这类实验完成后学生在体会到成功喜悦的同时,也能领悟到数据结构及算法的价值,激发他们的求知欲望和探索精神,使其更加积极主动的学习,而这一部分人的主动也能带动其他的同学跟进步伐,形成一个好的学习氛围。
2.2 正确管理实验过程
实验课堂上,针对不同类型的实验项目,采用相应的教学方式。对于验证性实验,老师可以在实验开始前对实验的流程、操作要点及最终的运行效果进行讲解,不至于让学生盲目摸索,浪费时间。选择性实验需要针对部分基础较好的学生进行适当的启发式引导,对关键算法和思路予以提点。对综合设计性实验,教师可以采用项目式的教学方法,带领学生理清需求、提取模型、设计步骤、确定计划,并对小组成员予以分工,使得实验能够顺利的进行下去。
实验过程中也要设定一定的奖励机制,不能只看最后结果,对于积极主动,喜欢钻研的学生要及时奖励,给予一定的加分,在综合设计类实验中担任重要角色的学生也要识别出来,适当提高实验过程分数。
基础较差的学生光靠课堂上的练习远远不够,需要整合机房资源,给学生提供课外实践的机会,鼓励他们利用业余时间补齐差距。
关键词:算法;数据结构;相关性
中图分类号:TP311 文献标识码:A
算法与数据结构包含了选取的算法、存储必备的方法、拟定的操作规程。解析数据结构,这类思路有着凸显的导向,它关系到培育的抽象认知。构建精准的某一程序不可缺失算法、搭配的数据结构。辨识了二者的多重关联,设定最适宜的逻辑框架以此来便于拟定程序。把控各类的算法,侧重去养成合适的设计风格,适应日渐复杂的新算法。
一、选取线性链表的实例
计算机科目包含了选取的算法、相关数据结构。从实质上看,算法及特有的数据结构并非没有关联,它们是联系的。变更了分开的思路,侧重了相关性。依循了算法的主线,多样的数据结构都被融汇于设定的这一算法。解析了相关性,借助于预设的程序语言来区分二者。经过探究可得:数据结构及算法拥有内在的深层关联,二者不可割裂。把控根本的某一数据结构、辨析存储结构,还要关联着可控的算法。这样做揭示了深层的二者关联,符合了变化的科目需要。
二、算法编程的语言
设计算法含有:初期拟定的模式、面向对象状态下的编程、泛型的编程。融汇这样的要素,构建可得适宜的算法。设定某个二元组,用它来代表数据结构。在二元组内整合了多重的数据元素,这样的基础上又创设了集合关系。经由抽象可得细化的数据类别。这类算法添加了灵活优势,且很易被调用。
相关性涵盖着泛型编程特有的途径,它被设定成典型。泛型编程抽象可得更完备的、精细的新集合,借助于它来代表算法。整合了多态模板,可被重复去调用,获取了更高水准的算法组件。经由自主的定义,明晰了数组内的一切元素,集合可得新类别。数据类型含有:堆栈及常见的表、二叉树、队列及图形等。表述这样的抽象数据,依循了面向对象的表述途径,支持表述语言。提炼获取了算法模式,遇有近似的数据结构都可依照凝练的这一算法予以运算。先要预设模块,拟定细化的类别及关联的行为。
三、算法的演示流程
线性链表的算法依循了面向对象路径下的解析,选取单链表整合了细化的较多数据项。归结了线性表、树形图及队列等。依循继承的演算即可获取双向架构的这类链表,演算的流程为:
四、探析实现的路径
构建神经网络依照的根本思路为:最小二乘算法。要调整拟定的权值,借助于梯度搜索来平衡输入及输出的误差。从现状看,BP网络是最为常见的一类神经网络,它整合了输入及输出,构建了双重的映射。数据结构及算法凸显了实践的特性,侧重培育本源的抽象思路,增添了实践类的新技能。创设新颖的算法,要考量真实的关联。实现的路径为:解析某一疑难、设计可用的算法、设定编程。
算法及创设的数据结构可延展至自动检索馆内的书目、调配交通灯、求解某一迷宫。这类算法都不可脱离生活,增添了真实性。针对于线性表,要验证它关联的链式流程。模拟退耕还林,解析最适宜的需求。这样的基础上,创设了彼此关联的精准数据结构。经由后续的细化设计,编码而后再次去调试。例如:在选修课程时,要拟定明晰的科目名称、依循的次序等。设定拓扑次序来指引后续的选修流程,可创设AOV特有的算法网络,布设顶点次序用作表述可筛选的课程。
探析相关性还可选取压力传感器,它含有噪声的干扰、振动这类的干扰信号。可构建采样电路,压力传感器增设了输出信号。BP网络可采纳任一精度来逼近连续函数,只要选取了适宜的神经元数即可。它包含着隐层,神经网络在任一精度层级内都能表现出非线性的映射。可以先去生成初始的加权系数,采纳梯度搜索以便修正原有的系数。不断予以修正,直至误差的均方符合了拟定要求,才可终结这一流程。为滤除干扰,经由EMD这样的滤波以此来获取信号。经过后续的分解,可得测重必备的稳态单值信号。
结语
算法关系着数据结构,解析现有的课节内涵,增添探究中的浓厚兴趣。演示某一算法要侧重相应的数据结构。经由慎重的演算才能缩减后续编程的偏差,培育审慎严谨的风格。授课中要增设必备的指引,提出某一疑难而后摸索并化解。归结零散的现有知识点,做好举一反三。
参考文献
[1]李晓鸿,骆嘉伟,季洁.“数据结构与算法分析”研究型实践教学的探索[J].实验室研究与探索,2012(01):121-125.
[2]刘晓静,黄维通,王晓英.西部地区CDIO理念下的数据结构与算法课程建设[J].计算机教育,2013(17):107-111.
关键词: 数据结构与算法;课程;质量标准;人才培养;综合性地方本科院校;SMART原则
中图分类号: G42 文献标识码:A 文章编号:1009-3044(2015)13-0160-03
Abstract: In this paper, course quality standard of data structure and algorithm is researched under the guidance of talent training objectives of comprehensive local undergraduate college. The SMART principle and guiding ideology are put forward by combining with the characteristics of this course. The overall goals of this course quality standard are made clear. The teaching requirements of this course are given. The implementation of this course quality standard is normalized. Thus, the course quality can be improved and the talent training objectives can be achieved.
Key words: data structure and algorithm; course; quality standard; talent training; comprehensive local undergraduate college; SMART principle
1 引言
《数据结构与算法》是计算机专业的核心基础课程,其任务是培养学生问题求解技术与抽象方法的能力,同时也是促进学生掌握程序设计语言和程序设计方法的重要课程。该课程教学内容和方法,重点难点等方面已形成了较为成熟的体系[1-2],但是与综合性地方本科院校的定位相结合时,就突显出以下问题:
1)教学内容的实用性、系统性不突出,理论内容和实际应用结合不紧密,导致该课程质量标准和培养目标之间存在一定差距。
2)课堂教学措施和效果难以准确评价,培养的人才是否符合市场需求也未可知。
针对上述问题,本文将根据《数据结构与算法》课程的地位,结合综合性地方本科院校人才培养目标,采用SMART原则[3-4]作为指导思想,建立一套完善的课程质量标准,并将其贯穿于该课程的整个实施过程,以达到预期的效果。
2 SMART原则
SMART原则是目标管理的经典理论,本文将其与综合性地方本科院校[5, 6]《数据结构与算法》课程质量标准问题的内涵相结合,提出如下原则:
S=Specific(明确性):即要用具体的语言清楚地说明要达成的综合性地方本科院校《数据结构与算法》课程质量标准。
M=Measurable(可衡量性):即所设计的课程质量标准应该是明确的,而不是模糊的。应该有一组明确的量度标准,作为衡量是否达成目标的依据。
A=Attainable(可达成性):即所设计的课程质量标准能够被执行人接受,如果仅仅靠一些行政手段,利用权利的影响力一厢情愿地把所制定的课程质量标准强行实施,结果总是适得其反的。
R=Relevant(相关性):即所设计的课程质量标准与综合性地方本科院校其他目标应该是高度相关的。如果实现了某个单一目标,但与其他的目标完全不相关,或者相关度很低,那这个课程质量标准即使被达到了,意义也不是很大。
T=Time-bound(时限性):即所设计的课程质量标准必须在时限范围内达成和实施,否则失去了应有的现实意义。
3 课程质量标准
3.1 指导思想
本文为综合性地方本科院校设计的《数据结构与算法》课程质量标准依照以下指导思想进行:
①方向性:该课程质量标准的建立要坚持正确的导向,要与教育教学的总目标相一致,评价标准要与国家或上级部门公布的标准相一致。指标的设计应努力反映现代教学理论和评价思想,要超越但又不脱离实际现有的教学水平、教师水平和技术水平。
②科学性:课程质量标准的各个环节都必须能反映综合性地方本科院校的发展目标和教学规律;构建一个科学合理的课程质量标准系统,同时要保证各个课程质量标准之间的独立性,尽量减少冗余,坚持科学性,遵循科学的教育理论和统计学方法。
③客观性原则:课程质量标准的建立要以真实的资料为基础,对课程质量做出客观的价值判断,必须以客观事实为基础,克服课程质量标准选取过程中的主观随意性和情感因素。各项指标应采用量化的形式,所设计的标准应符合一定的数学模型,同时为避免机械化,应在全面的资料收集的基础上,进行标准的建立。
④可行性原则:该课程质量标准要符合上述的SMART原则,在实施时要综合考虑到人力、物力、财力、时间等各种制约因素。
3.2 目标与标准
3.2.1 质量总目标
根据教育部教指委提出的计算机专业《数据结构与算法》课程教学基本要求,依据综合性地方本科院校人才培养应具备的知识、能力、素质要求[7, 8],提出《数据结构与算法》课程质量目标,如表1所示。
3.2.2 确定课程教学要求
根据上述质量总目标,将《数据结构与算法》课程的教学内容划分为3个模块,并将每个模块分解成若干教学单元,明确各教学单元的主要教学内容和目标,如表2所示。
3.2.3 课程质量标准的实施
要确保课程质量标准得以实现,关键在于有切合实际的教学措施及实施规范。课程质量标准作为课程教学的指导性文件,应针对课程的教学文档、教学实施、教学反馈三个方面进行全程规范,本文给出《数据结构与算法》课程质量标准的实施规范,如表3所示。
在反馈环节中的评课,包含了学生评课、专家评课和企业评课。学生评课是学习完本课程的学生在学习了本课程的后续课程后再对本课程的有效性做出评价。专家评课则是由本领域内的专家对本课程的全部实施环节的规范性和有效性进行评价。企业评课是只由相关的企业专家,或者是录用了本专业毕业生的企业的负责人,对学生学习了本课程是否能学以致用做出评价。
4 结论
《数据结构与算法》是一门逻辑性强、理论与实践紧密结合的课程,对提高学生程序开发能力和培养算法设计与分析能力都具有重要意义的课程。综合性地方本科院校以培养应用型人才、服务地方建设为目标,这就要求课程质量标准的设置应更关注学生的整体素质培养,以及社会对学生能力和素质的需求。本文通过对《数据结构与算法》课程质量标准进行研究,制定了该课程的质量标准和实施规范,明确了综合性地方本科院校《数据结构与算法》课程的定位,促进课程的教学的有效实施。
参考文献:
[1] 吕亚荣, 缪相林. 数据结构与算法实验教学的改革与探索[J]. 教育教学论坛,2014,3(18):23-29.
[2] 刘馨月, 张宪超, 于红. 数据结构与算法核心课程建设[J]. 计算机教育,2011,6(4):65-68.
[3] 周彦斐. 运用SMART原则优化项目教学过程探究[J]. 闽西职业技术学院学报,2013,15(4):94-96.
[4] 陆如萍. SMART原则在教学目标设定中的应用探究[J]. 现代基础教育研究,2013,1(2):196-199.
[5] 王志英. 地方本科院校转型应用技术类型高等学校途径探讨[J]. 现代企业教育,2014,16(3): 430-432.
[6] 廖诗艳. 质性评价:地方本科院校教学质量监控的路径[J]. 教育探索,2014,7(5):66-68.
关键词:数据结构与算法;教学改革;应用型人才培养
中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2017)23-0128-02
一、引言
1.地方高等院校应用型人才培养改革。地方高等院校的教学目标正逐步转型为以培养应用型人才为目标,课程教学方法及设置要求学生在学习过程中能学到与社会接轨的知识,从而能提高学生的学习兴趣,且在系统学习后,即毕业后进入社会能较快上手,从而培养出适应社会需求的应用型人才。
2.《数据结构与算法》课程地位。《数据结构与算法》是信息与计算科学专业的核心基础课程。数据结构的研究范围主要涉及数据的逻辑结构、存储结构和操作的实现,内容是程序设计(特别是非数值计算的程序设计)的基础,也是设计和实现编译程序、操作系统、数据系统及其他系统程序和大型应用程序的重要基础,是一门理论性强且实践性强的课程。通过这门课程的学习,学生在程序编写的过程中能够正确、合理地选择数据的存储结构,有效地设计算法,从而提高软件整体质量和效率。
3.本文研究方向。本文着重研究如何针对信息与计算科学专业的特点,地方院校培养应用型人才的教育模式,学生基础相对薄弱的情况,设计合理的教学方法,达到应用型人才培养的目的。
二、传统教学中存在的问题
笔者多年从事数据结构与算法课程的教学,经与学生进行沟通后,总结出传统教学中存在的问题有如下几点:
1.理论性强,知识点多。数据结构与算法课程的知识点多,理论性和实践性均较强,且有高度抽象的特点。故要求学生对程序设计语言和相应的数学知识掌握要足够深入,才能较好地学习。信息计算科学专业的学生数学基础较薄弱,学生反映,理论过于抽象且内容较多,越学后面越不懂,内容枯燥不易理解。
2.上机动手能力差。数据结构与算法课程中一个重要部分是上机编写程序实现算法,学生由于上一门程序设计课程还未理解,难将算法实现,体会不到编程的乐趣、算法的优美,在学习中易失去信心。
在上机实践观察中学生常出现两种情形:一种是理论尚未理解透彻,后续上机实践根本毫无头绪,不能灵活应用推广;一种是理论可以明白,但程序设计的能力跟不上,无法独立完现算法编写实现和调试,甚至无从入手去完成伪代码的书写。这两类学生占绝大多数,只有少部分学生可以较顺利地掌握教学内容并实现完整算法。
3.学生对数据结构的认识不够。外面有些培训机构的速成模式对学生的影响大,它们往往针对某一具体工具软件的使用,工具软件已经将许多知识进行了集成封装,使用者只需调用即可,不用关心具体实现步骤、方法和效率。而这些步骤、方法、算法效率的讨论都是数据结构中要学习的内容。学生认识不到数据结构的重要性,于是觉得这门课程没有应用的前途和学习的动力,不肯多花时间在上面去练习和实践,从而限制了自己后续能力的提高,比如改进算法的效率,优化程序等。
三、改革方法探讨
1.以理论教学为主,案例式教学为辅。针对应用型人才培养的目的和学生普遍反映的课本内容过于抽象的问题,可以选择一本以案例式教学为主的教材作为教学辅助教材。在讲授某个知识点前,布置学生在辅助教材中阅读,了解相关的应用背景。在预习过程中学生往往能发现一些问题,于是在课堂学习中将更有目的性和积极性去学习理论知识,有能力者甚至可以在课外尝试实现案例、发现问题。通过案例学习可以提高学生的学习兴趣,符合应用型人才改革的目标。学生也通过案例学习了解现实中出现的问题有哪些解决方法。当理论具体化后,在工作或后续学习中遇上实际问题将更有解决的方法和思路,而且再进行类比推广应用就比较容易。
但教学中又不能简单的以案例式教学为主。因为案例式教学的一个缺点是案例中涉及到的应用理论未必完全,而是某种模型结构的某些方面的具体应用。如树的教学,一般的课本对树的应用讲了六七方面,采用案例教学法,可能只面对几种应用。故教师在课堂上要将案例抽象出对应的结构,与理论结合在一起,详细讲解理论,即课堂上仍是以理论教学为主。
2.理论教学中知识点的筛选和难易处理。考虑到学院的学生基础问题,学生相应的数学知识掌握不够深入,若面面俱到地将所有理论全部讲完,将知其然而不知其所以然,也不符合应用型人才培养的目标,故课程内容要进行一定的筛选,后续课程中将出现的问题,不妨留到后续课程后再详细讨论。
比如,图的关键路径问题,对于基础掌握好的学生经过课堂学习确实可以掌握,但大部分学生或是不理解,或是理解后不能上机实现,而这一问题在离散数学课程中图论一章后有详细论述,那在数据结构中有限的课时中就不妨先简讲,多花时间在图的存储、遍历算法、最小生成树等算法上,效果会更好。
另外,教师在理论讲解中注意难易的处理。学生要是产生了畏难情绪,就容易造成前面的知识未消化,后面的知识更无从理解的学习障碍。据过往经验,数据结构线性表一章是比较简单的,其难点在于链表,接着的队和栈一章与线性表是一致的,仅操作方法不同。若学生在线性表上卡住了,再学栈和队列会觉得更难。于是教师授课时对一些基础又简单的问题,讲深入、讲透彻,配合传统的黑板结合粉笔效果更好,学生能有效跟着教师进行思考,注意归纳总结,虽然花时间多,但再学习后续知识时会触类旁通,学习自信心能提高,有利于形成良性的促进作用。
3.上机实践的难易处理和互动改革。上机实践主要是将伪代码的算法用具体程序语言实现、运行。应用型人才培养的目的就是要培养学生将理论知识用于实践,即能实现运行具体算法。故培养学生的动手能力是学好这门课程的关键。
在整个学期的实践处理上,实践难度安排由易至难。在前面的章实践作业中,给出的可运行代码应该较完整,留下关键部分让学生去编写,尤其是学会调试。随着章节的推进,给出的可运行代码逐步减少至不给。这样处理是可以让学生在初学时不至于无从入手,而且可以让程序设计基础不牢的学生有时间通过实践强化巩固,让学生获得编程乐趣。
另外,上机实践时可将学生分成若干小组,每个小组选出一个学习较好的学生为组长,上机中组长可以帮助组员进行程序的调试和讲解,使学生能够阅读程序理解程序所表达的意义。学生对知识点理解的角度和教师的角度可能不同,有时候同学请教比教师更能让他们接受,从现实课堂中反映,学生确实更愿意向同学请教。
组员们在讨论中产生解决不了的问题,再与教师讨论得到解答,这样的互动改革既可以有效解决教师逐一回答时间有限的问题,又可以提高学生的学习热情,学生之间不断相互学习共同提高,真正让大家都能动起手来,锻炼编程能力和举一反三的自学能力,为将来到社会工作打下扎实的基础。
教师在指导中要引导学生学会读懂程序错误提示,自己调试修改程序,提高学生实践水平。加强对学生举一反三能力的培训,让实践教学反哺理论教学,使学生对理论有更深层次的理解。培养学生良好的程序编写习惯和风格,注重程序注解。
4.开展课外讲座。在课外,邀请已学过这门课程的学生和正在学习的学生进行经验交流。尤其是一些已经参加工作的学生,他们可以带来更多的实际案例,这些案例比教材中提供的更新颖、更具体,涉及到更全面知识的融会贯通,而且他们可以提供工作中有关《数据结构与算法》这门课程的经验,可以让学生们了解与社会接轨的知识,提高学生的学习兴趣。
四、总结
近年毕业生就业问题日趋严重,通过上述讨论发现,传统数据结构与算法课程的教学形式已不能满足现阶段实际要求,地方高等院校如何进行应用型人才培养改革,培养出适应社会需求的应用型人才成为研究重点。本文以地方院校信息与计算科学专业的《数据结构与算法》课程为例,探讨一系列的教学改革措施,以达到应用型人才培养的目标。
参考文献:
[1]余腊生.石献.基于创新理念的数据结构教学方法探讨[J].计算机与信息技术,2006,(11):110-114.
[2]李克清.《数据结构》课程中的案例教学初探[J].长江大学学报(自科版),2004,12(1)4:135-136.
[3]严蔚敏.吴敏民.数据结构(C语言版)[M].北京:清华大学出版社,1997.
A Study on "Data Structure and Algorithm" Curriculum Reformation
LI Ting,XU Hong-ru
(School of Mathematics,Jiaying University,Meizhou,Guangdong 514015,China)
关键词:数据结构;课程体系;实践教学;课程群
1背景
数据结构与算法是计算机类专业的一门核心基础课程,是计算机、软件工程等电子信息类专业的必修课。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法;介绍了常用的多种查找和排序技术,并对其进行性能分析和比较,内容非常丰富[1-2]。本课程的教学目标是加强学生对数据逻辑关系的分析与认识,培养学生数据抽象的能力,通过理论分析与编程实践相结合,增强学生求解复杂问题的能力以及控制算法复杂性的能力。
在计算机科学中,数据结构不仅是程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统等系统程序和各种大型应用程序的重要基础[3]。数据结构与算法是计算机类专业部分专业课的先导课,如操作系统、编译原理和数据库原理等,因此它为后续的专业课程学习提供必要的知识和技能储备[4]。数据结构与算法课程一直以来都是本学科的核心专业基础课程,而且正逐渐发展成为众多理工科专业的热门选修课。只有学好了这门课,才能在今后的计算机专业课程的学习中游刃有余。因此,本课程在国内同类课程中有较明显的先进性和示范性。
根据新世纪对人才培养的要求,教学应重在学生能力、素质的培养,尤其是思维能力、实践能力、创新能力的培养。多年来我们致力于数据结构核心课程的建设,从完善课程体系、加强团队建设、深入教学改革和丰富教学资源等各个环节不断探索和实践。从提高学生的学习兴趣和加强实践环节教学方面入手,在教育教学方面持续、深入地改进教学方法,开展教学研究,提高教学质量。
2完善课程体系
首先,完善以“扎实基础,强化实践,引导创新”为培养目标的课程体系。计算机类专业核心基础课程体系主要由离散数学、面向对象的程序设计、数据结构与算法、操作系统、编译原理、计算机组成与结构、数据库原理7门课程组成,用于支撑计算机科学与技术、软件工程、网络工程、信息安全、数字媒体技术5个计算机科学相关专业的教学。
我们将课程群的理念引入计算机专业基础类课程教学,建立了以数据结构为核心的计算机类基础课程群,如图1所示。课程群以培养综合运用计算机基础知识能力为目标,打破课程间的壁垒,强化课程联系。本课程群以数据结构为核心,将数据结构的一些基本内容如链表、排序等渗透到“C/C++程序设计”课程中;将编译原理、数据库原理等需要使用数据结构内容的部分在数据结构课程中以应用的实例进行讲解,从而将相关课程的授课内容形成统一的整体。
在实践环节我们强化数据结构对程序设计语言的训练及解决相关课程问题的训练。除各门课程有单独的实践课程外,独立设置贯彻整个教学环节的实践课程,将数据结构课程群中各门课程较为关联的综合大作业进行归并整合。自身实验课程注重双基训练,但大实践课程要求对整个数据结构课程群教学经验丰富、能够精确把握该课程体系要点的教师进行授课,在教学中能够结合本学期相关课程设置大作业,在讲授中能够根据学生的具体情况进行诱导性教学,使学生通过完成大作业来更深刻地认识学科体系的全貌,强化学科综合素质的培养。
以数据结构课程为中心构建计算机类专业的核心基础课程体系,将与计算机科学相关专业的专业基础课程教学打通,在课程、课件、教材、师资队伍等多方面进行统一的规划和建设,以不同的着重点组织课程教学内容、进行大学生计算机实践能力和创新能力的培养。该体系打破了原有实验教学附属于理论课程的模式,理论教学与实验教学既相对独立、又相互联系,改变了单一的知识验证的实验模式,增强综合应用设计和创新实践内容,全面提高学生的实验实践技能。“扎实基础,强化实践,引导创新”培养目标体现了当前计算机类专业教育的发展趋势,走在国内高校的前面,在全国各类会议作专题报告近30次。
3加强团队建设
目前我院数据结构与算法教学团队共有5位主讲教师,其中教授2人,每50名学生配一名助教(博士或工学硕士)。该教学团队主要由30~40岁的年轻教师组成,尽管精力充沛,工作热情很高,但教学经验尚有欠缺。团队建设是本课程建设的重中之重,要把提高教师的综合素质和教学科研水平,强化教师的责任心放在首位。坚持教学与科研相结合,以国家自然科学基金项目为依托,为提高教学质量,不断提高科研水平和能力;以国家特色专业建设项目为依托,加强教学研究,以理论指导教学实践,吸取好的教学方法和经验,不断改进教学方法和手段,迅速促进教学团队成长。
在青年教师培养方面注重教学和科研能力的同步培养。要求青年教师在首次上课之前听课助课,培养基本教学能力;实行集中备课,统一课件,互相监督,保持教学一致性和教学内容一致性;定期召开教学研讨,及时总结教学经验方法,教授言传身教;以特色专业建设项目为依托,鼓励青年教师开展教学研究,以国家级项目为依托开展科研课题研究。青年教师成长迅速,已具备一定的科研能力,教学效果良好,学生满意超过90%;获得校教学质量优良奖,青年教师讲课竞赛二等奖,多媒体课件二等奖等多项奖励,已经成为学院的业务骨干。
4深化教学改革
4.1不断探索新的教学模式
1) 实践性教学。
实践是获得真知的根本源泉,主动探索真知是研究型人才的基本素质,我们在基础课中的创新能力培养主要体现在,让学生在自由的实验环境中积极实践、主动探索,自己发现新的知识和理论。如图2所示,在实践环节建设方面,建立书面作业,上机作业和课程设计3个层次的实践教学环节,以通过书面作业形式消化理解教学内容;通过上机作业培养动手能力,将课程单元知识转化为实际技能;通过课程设计培养解决实际问题的能力,融会贯通本课程的知识。
为了满足强化实践的教学要求,本课程团队经过多年实践,精选、整理了包括卡内基梅隆大学、斯坦福大学、麻省理工学院等国内外著名大学教授布置的实践作业,结合我们的教学要求,每学期给学生布置18道有一定创新性的上机题目。这些题目既反应了数据结构教学的基本知识,又来源于实际应用。达到了理论和实践的完美结合。本课程实践教学和理论教学环节的学时比例为1.5∶1。经我们多年实践,这个比例符合我国高等教育实际,达到了良好的能力锻炼目的,值得推广和借鉴。
2) 研究型教学。
在研究性理论教学方面,以教学大纲为主线,整理数据结构领域的经典论文,以提出问题为课堂教学的第一步骤,引导学生思考,将科学家的研究方法和研究思路融入课堂教学中。依托科学研究项目,提出本学科领域的最前沿课题,鼓励学生思考并解决。对有明显创造性的成果可以在教师指导下撰写学术论文。
将研究型教学融入数据结构实践教学课堂,鼓励学生从解决问题的角度研究如何设计数据结构与算法,在传授基础知识的同时注重创新性思维方式的培养,发现问题和解决问题能力的培养。
4.2全方位的课程改革
课程建设的核心是提高教学质量。为提高教学质量,我们从教学内容、教材、教学方法和手段、考试方法、实践教学等方向进行了全方位的改革。
1) 教学内容改革。
课程组参考国内外其他院校本课程的教学大纲和优秀教材,对数据结构课程的教学大纲进行了多次修订,逐步稳定了理论教学的教学内容、教学要求,细化了教学目标,明确了教学任务、教学内容、教学重点和难点、不同知识点的掌握程度。理论教学采用以共性化课堂教学为主,并利用辅导答疑和实践教学组织以学生为主的个性化教学,培养学生创新能力,辅助课堂教学。在教学过程中采用启发式教学方式,即注重学生基础理论知识的掌握,也注重学生分析问题、解决问题等基本能力的培养。
为了配合理论教学,我们也多次修订了实验大纲,使实践内容更加符合专业的发展和其他各方面的要求,并且与前序课程和后继课程很好地衔接。在实践环节中注重学生能力的培养和科学的开发方法的培养。实践教学内容采用梯度组织,具有不同的难易程度,方便学生巩固学习和拓展知识。
2) 教材选取。
目前本课程使用教材为高等教育出版社出版的《数据结构与算法》,许卓群、杨冬青等编著。该教材除了讲授基本数据结构外,突出作为面向对象程序设计的基础概念――抽象数据类型,强调算法与数据结构的密不可分性、封装性等;在处理知识面的宽度和知识点的深度上,既满足作为基础课的要求又达到一定的水平,完全适合本专业对人才培养的要求,是普通高等教育“十五”国家级规划教材。目前课程组已经开始着手准备根据我们自己的教学特点、专业要求等实际情况自主编制一套教材。
3) 教学方法改革。
(1) 启发式教学:学生的主动性是学习,我们在教学过程中注重启发学生的思维,采用循循善诱的方式引导学生自己发现问题,并逐步解决问题,培养学生思考问题、分析问题和解决问题的能力。这极大调动了学生的主观能动性,培养了学生分析和解决问题的能力。
(2) 共性化与个性化相结合教学:从教学形式上,我们积极探索新的教学方法,以便能够调动和发挥学生的主观能动性。具体有以教师为主体的课堂教学、习题课等共性化教学环节,也设置了答疑p质疑等教学环节,引导鼓励学生通过实践和自学获取知识。共性化与个性化相结合,既可以起到教师主导作用,也可以满足学生个性学习的需求。
(3) 理论与实验相结合:数据结构课程主要介绍数据的逻辑结构、物理结构以及算法。算法的思想需要通过一种程序设计语言加以描述并在计算机上实现。我们在重视理论教学的同时,也很注重实验课,注重学生灵活应用知识能力的培养。理论与实验相结合,可以使学生更好地理解“数据结构”的思想与概念。
5丰富教学资源
建立本课程网上课堂及在线智能教学系统。网上课堂设计的目的是能够给不同层次、不同需要的学生提供帮助,提高教学质量。根据网络教学环境的要求,
系统主要包括课程概况、师资队伍、教学资源、实验指导、教学录像、课程扩展、课程论坛等多个模块。系统主要具有以下特点:
1) 在线学习。
知识内容结构化,主体结构采用网页形式组织教学内容,以单元、章、节等知识点为中心组织教学,以关键词或标题为线索进行任意的查找。各知识点在整体上搭建框架式结构,思路明晰;在细节上环环相扣,前后关联紧密,便于学生更好地理解和掌握知识要点。
2) 动画演示。
以数据结构部分的讲授为例,这部分内容包含许多的算法,其描述大多数采用类高级语言的形式进行,有些算法无论是时间复杂性或是空间复杂性都比较高,采用动画的形式将算法的执行过程和思想呈现给学生,使学生很容易理解这一过程,再配上教师的解释做旁白,可产生与上机亲身实践和跟踪执行相似的效果。
3) 在线测试。
用数据库对练习题和模拟题进行有效的管理,在学生进入到考核子系统后,能交互式进行试题的选题与答题。当学生提交答卷后,系统又能对答分进行自动评判,并给出相应正确的答案和综合得分。
4) 课程扩展。
为更好地促进教学,本课程在巩固基础知识,提高实践能力的基础上,对学有余力的同学扩展了本课程的内容。引入了卡内基梅隆数据结构教学网站,这是一套全英文系统,上面提供了丰富的工程性题目训练,更加注重数据结构算法在实际中的应用,让学生开阔了思维和眼界;还为学生提供了ACM竞赛以及大连理工大学程序设计竞赛的模拟题库,通过这些略有难度又很新颖的题目进一步提高学生的学习兴趣,培养其解决实际问题的能力。
6结论
在近几年的课程建设实践中,我们的任课教师认真组织教学内容,与实际相结合,积极探索有效的教学方法,利用多媒体技术动态演示复杂数据结构的变化,并补充学生比较感兴趣的知识,拓宽学生的知识面。逐步完善和充实现有课件,做到内容充实,画面生动,具备声像效果,收到了很好的教学效果。作为计算机科学的核心内容,数据结构与算法的理论研究及应用研究一直在不断发展,在以后的工作中要注重研究型教学,鼓励学生从解决问题的角度研究如何设计数据结构与算法,并将学科领域经典研究成果和最新研究成果及时地反应在课程教学中,相信数据结构与算法这门课的教学效果和教学质量在我们持续深入的教学改革中会越来越好。
注:本文受教育部第二类特色专业建设项目――软件工程特色专业建设项目资助。
参考文献:
[1] 严蔚敏,吴伟民. 数据结构[M]. 北京:清华大学出版社,2002.
[2] 殷人昆. 数据结构(用面向对象和C++描述)[M]. 北京:清华大学出版社,2007.
[3] 殷人昆,邓俊辉. 清华大学“数据结构”精品课程建设[J]. 计算机教育,2006(5):20-22.
[4] 钱红兵,唐发根. “算法与数据结构”课程教学体系的建设[J]. 计算机教育,2009(17):65-66.
Development of the Data Structure and Algorithm Core Course
LIU Xinyue, ZHANG Xianchao, YU Hong
(School of Software, Dalian University ofTechnology, Dalian 116620, China)
关键词 算法与数据结构 理论教学 教学技巧
中图分类号:G424 文献标识码:A
Discussion on Algorithms and Data Structures Theory Teaching Skills
ZHOU Zhanglan
(College of Computer Science, Yangtze University, Jingzhou, Hubei 434023)
Abstract In the "Algorithms and Data Structures" course, theoretical teaching is very important. In order to obtain a limited teaching good teaching effect is not easy. This understanding of knowledge points respectively, classroom inspiration, knowledge and consolidation of four aspects of the introduction of certain teaching techniques introduced in order to achieve the full content of classroom teaching, active classroom atmosphere, enhance students' interest in learning.
Key words Algorithms and Data Structures; theory teaching; teaching skills
算法与数据结构是计算机专业重要的核心课程之一。该门课程中涉及众多复杂而抽象的概念、算法,多数学生表示学习起来感觉较为枯燥。对主讲教师来说,如何让学生在有限的理论课堂教学中掌握所有知识并灵活应用是不容易的。当然,现在有很多教学手段可以达到增强教学效果、吸引学生注意力的目的。比如,在教学过程中引入精美的PPT课件、动态教学演示系统等。但是,这些手段都只能起到辅助教学的作用。教师在充分利用这些教学工具时,更应该发挥操控者灵活处理问题并解决问题的能力,以达到更加完美的教学效果。本文就课堂教学中的几点经验进行总结,以供探讨。
1 生动的语言,形象的比喻——知识点的理解
算法与数据结构课程中的知识点,尤其是每章涉及的重要概念和算法对于初学的学生而言不太容易接受。为了使学生能在课堂教学中尽快地理解和掌握这些知识,教师在教学中运用生动的语言和形象的比喻往往能够起到较好的作用。首先,关于上课的语言问题。作为一门专业课程,特别是计算机专业的核心课程,教师的授课过程总体来说应该是严谨的。专业课教师是不可能把授课对象当成小学生,然后用活泼的语气配合可爱的动作来讲解的。因此,这里提到的“生动的语言”包含两方面的内容。一方面指教师授课的语气,不要让整堂课总是一板一眼像作报告一样,在重点需要强调的地方适当加重语气,或者停顿后再次强调,抑扬顿挫的语气更能使学生提高注意力和关注度。另一方面是教师的肢体语言,在加强语气的同时配合相应的手势等肢体动作。当然,这方面与教师的个人授课风格有很大关系。
其次,形象的比喻。本课程在学习中涉及的知识点较多,学生首先要在对概念的充分理解的基础上,才能进一步学会灵活应用。为帮助学生更好地理解有关概念,可以引入生活中常见的问题做比喻。下面以在课堂上讲解链式存储结构与顺序存储结构的区别为例,说明引入适当的比喻有助于学生对两者的理解。由于链式结构不需要预先指定存储空间的大小。因此,插入和删除等操作都较为容易,特别是插入操作不存在扩容问题。而顺序结构则需在初始化阶段申请指定大小的存储空间,只有在申请成功之后才能进行其它操作。在进行插入或删除操作时都可能要移动其它元素的位置,而且当进行插入操作时,若初始空间不足还会出现需要扩容的问题。为了帮助学生理解这两种存储结构的特点,可以引入这样的比喻:顺序存储就像上课之前需要申请教室,有多少个学生就需要有一个能容下所有学生的教室。当然,在进行具体配置时要求教室的空间只能大而不能小。比如,上课的实际学生人数为60人,分配的教室为100座,而且一个学生对应一个固定的座位。当加入的听课人数超过100人时教室里的座位显然就不够用了,为了满足需求需要更换一个更大的教室。函数realloc能将已分配内存区的大小改为指定大小,①可以用来实现这一扩容操作。链式结构则不然,在进行具体配置时其空间就像是一个露天会场。进入会场的每一个人都自带一个小板凳,当人走时小板凳也被同时带走。只要不存在会场空间不够(相当于内存分配单个结点空间失败)的情况,容纳的人数是没有固定限制的。现在再来分析一下两种存储结构在操作上的不同。顺序存储的空间分配是固定的,就像教室里的固定座位。当有一个同学需要插到某一个位置坐下时,若此位置已坐人,其他同学则需要通过陆续移动为他腾空一个座位;而链式结构则不同,由于每个人都自带小板凳,只要会场有空间就能容纳新来的人。新来的人只需要把要插入的位置告诉排在其前面的人就可以了。当然,不是所有的重要知识点都能找到合适的比喻,这需要教师在备课时多思考,并在教学中灵活运用。
2 恰当的提问——课堂启发
在授课过程中,活跃的课堂气氛需要教师和学生之间的良性互动,而提问是一个很好的实现互动的方法。但是以什么方式提问、怎样提问还是有一定讲究的。首先,关于提问的方式。对于大学课堂来说,点名回答或自愿回答都可能会出现学生不配合的情况,毕竟大学生和中、小学生是不同的。因此,教师需要预先做好自问自答的准备。提出问题后,要留给学生一定的思考时间。若在这之后有学生能主动给出较好的解决方案,则应给予及时的鼓励和赞扬;反之,教师需要自己给出一个粗略的解决思路,将疑问留给学生并促使学生继续思考。其次,关于提问的内容。提问需要占用课堂教学时间,因此提出的问题应当是最重要、最具有启发性的。比如,以单链表基本操作插入算法②为例:
Status ListInsert_L(LinkList &L,int i, ElemType e){
p=L; j=0;
while(p&&jnext;++j;}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e; s->next=p->next;
p->next=s;
return OK;
}
对于算法中“if(!p||j>i-1) return ERROR;”这条语句的作用很多同学在初学时并没有真正了解,只是在具体实现时生搬硬套。为了引起学生的注意,教师可以在上课时现场运行此算法,并在去掉此语句后输入数据进行验证。例如,给i赋一个不超出线性表长度的合法的值,这样不影响输出结果,提出这句是不是可有可无的问题,然后留下疑问让学生去思考。当然,在下次解答时要对这类问题进行总结,强调错误处理在编程中的重要性。
3 有趣的例子——知识点的引入
在专业课程的教学中就其知识点来说是较为枯燥的,为了让学生在刚开始学习新内容时就能激发出学习的兴趣,可以通过引入具体实例来达到目的。例如,以循环链表的使用为例。在讲授什么是循环链表之前,先给出一个“约瑟夫问题”游戏的例子,通过这个游戏提出问题:若使用已经学过的单链表是否合适。如果不合适,具体在什么地方不合适。然后引入循环链表的概念,并以此例子来说明循环链表的意义和具体的操作方法。另外一个比较典型的例子是用铁路调度站表示“栈”问题,这也是一个很好的利用生活中的实例来引入知识点从而引起学生兴趣的例子。尤其是在对“栈”的先进后出特性讲解时具有很好的效果。当然,例子的引入要恰如其分才能起到正面作用,过于简单或不合适的引用反倒会引起学生的反感,甚至成为笑话。
4 编程演示——知识点的巩固
在算法与数据结构课程中涉及到了大量的经典算法,比如最短路径、关键路径等。对于学生来说掌握其原理就可以知其应用。但是,对有些需要灵活使用的知识点仅讲解原理是不够的。为了能让学生深刻理解并熟练掌握,可以在课堂上编程逐步演示其实现过程。比如,“树”这一章的内容涉及的概念较多,它又是学生学到的第一种非线性结构,相比之前的线性表实现起来更复杂。因此,教师在初次讲解时很有必要在课堂上将二叉树的创建过程动态地演示给学生,这其中包括顺序存储和链式存储。当然,演示过程最好不是已经写好的完整的程序或演示系统成品,而是采用边讲解边书写的方式,使学生更容易了解编程的过程。为了节省课堂时间,可以先写好程序框架,比如程序包含的头文件、所需结构体类型、主函数、输出函数等在讲解过程中简单带过,而重要函数的核心代码则边讲边写。这样不仅可以增强学生的学习兴趣,促使学生自己去编程实践,更重要的是可以让学生非常清楚地了解实现的过程。当然,这很考验教师的编程能力,因为在课堂上临时写很有可能因为一时大意使得程序运行出错而陷入尴尬的境地,从而影响课堂教学的完整性和完美性。但教学的目的不是让教师去展示个人风采,而是讲授知识。从另一方面来讲,学生也是宽容的。教师偶尔的一次失误不仅不会影响其权威性,反而更能让学生感受到亲切而真实。
算法与数据结构作为一门重要的专业课程,要想取得良好的教学效果还需要多方面的配合。当然,作为主讲人的任课教师对课程的教学起到了决定性的作用。除了依据授课对象的特点合理安排教学计划、教学内容外,把握好有限的理论课堂教学,利用各种方法和手段将理论知识讲解清楚,使得教学内容生动、课堂气氛活跃、学生学习兴趣浓厚是很重要的。这不仅能帮助学生更好地掌握本门课程的理论知识,更能为学生在后续学习中进行具体实践打下良好的基础。
注释