前言:中文期刊网精心挑选了数据结构范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。
数据结构范文1
关键词:MOOC;在线教育;DIY;实践教学;PAT
一、引言
随着人类社会进入网络时代,以大规模开放在线课程(MOOC)为代表的基于互联网的在线教育模式正迅速形成对传统教育的冲击。如李晓明在《慕课》一书中所定义:MOOC应该是“主讲教师负责的,通过互联网开放支持大规模人群参与的,以讲课短视频、作业练习、论坛活动、通告邮件、测试考试等要素交织的,有一定时长的教学过程”[1]。虽然其中提到的各个要素看似在传统教育特别是传统远程教育中都有包含,但由于“对参与者学习过程无监督”这一特性,使得MOOC的教学方式与传统方式相比,面临着更大的挑战。本文是两位笔者根据自己在爱课程网“中国大学MOOC”和网易云课堂这两个平台开设MOOC课程一年多时间的亲身实践,总结分析互联网环境下在线教育课程的实施经验,包括:教学内容设计、短视频制作、互动与实践指导等方面的内容。
“数据结构”是计算机科学与技术专业、软件工程专业甚至于其他电气信息类专业的重要专业基础课程。它所讨论的知识内容和提倡的技术方法,无论对进一步学习计算机领域的其他课程,还是对从事大型信息工程的开发,都是重要而必备的基础。“数据结构”课程所应该培养的高级程序设计与算法分析能力不仅是学生进一步深造的潜力体现,也是用人单位选拔优秀毕业生的重要指标。
课程要求学员在掌握数据结构基本概念和基本方法的基础上,能够针对具体求解问题设计合适的数据结构和算法,并具有采用程序设计语言实现的能力。其中,一个重要目的是,帮助学员明白一些经典的数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。针对课程教学目标和在线课程的对象特点和学习特点,我们在MOOC课程设计和实施时,重点考虑:(1)内容如何组织,以满足不同对象的学习需求和碎片化的学习特征;(2)视频制作如何更有吸引力,能突出问题求解思路以及不同方法的特点;(3)教学过程如何实施,特别是如何加强实践能力培养和协作式学习,不断激发学习者的热情和动力。
为了促进学员自己动手编程实践、解决问题,一个功能强大的实践教学平台就是必不可少的支撑。另一方面,由于MOOC的教学实施与考核都是在无监督的状态下进行,目前尚无有效技术手段保证考核结果和证书获得者与课程完成人具有可信的对应关系,所以MOOC的学习结果很难得到用人单位(包括高校与企业)的充分重视。美国的MOOC组织者(如Coursera、edX等)是通过线下有监督的考试来颁发更有参考价值的证书,但其规模受到人力资源(阅卷教师)的限制。一个有监督的、由自动判题系统支持的线上考试将可以部分解决上述问题。本文也将介绍笔者在平台建设方面所做的部分工作。
二、碎片化的教学设计
MOOC与传统教育的一个很大的不同在于,传统教育中学生是被组织在一起学习的,各种教学环节的“有组织性”非常强,形成了强大的外在驱动力。在这种前提下,即使教学方式枯燥呆板,即使学生的内在动力不被激发,也可以在一定程度上用外力“推”着学生们向前走。而且同一教学环境中学生的年龄和基础背景相似,也使得教学内容的组织较容易统一。
而MOOC的学员来自社会各界,具有跨度很大的年龄层、截然不同的基础背景、五花八门的学习目的,在各自内在动因的驱使下,聚集到同一门课程中学习。这种组织方式下形成的内聚力比学校中专业的内聚力弱很多,所以教师必须努力让自己的课程产生足够大的吸引力,“吸”着学员们向前走。而吸引力最主要的基础,就是课程内容的组织。
由于互联网让各种信息的获取变得越来越容易,各种针对人类注意力的心理学研究表明,过多信息消耗了接受者的注意力,导致信息碎片化成为不可避免的趋势。MOOC课程教学设计面临的首要问题就是,如何利用碎片化的信息为学员提供系统化的知识。传统课堂要求的按45~50分钟组织的教学内容,在MOOC中必须被更细致地梳理、切分,成为每个6~10分钟的短小视频――这使得学员可以随时随地充分利用自己业余时间的零星碎片,在注意力最能有效集中的时间区间里进行学习。同时,碎片化的教学内容组织也容易满足不同学习者的学习目标。
例如:在“数据结构”的第一次课上,我们需要讲清楚两个基本概念,即“什么是数据结构”以及“什么是算法”。在传统课堂上,我们大约分别需要花32分钟和23分钟完成讲授,并且最后花20分钟通过讲解一个具体的应用实例来帮助学生更感性地认识理解这两个抽象的概念。而在MOOC上,一段长达32分钟的理论讲授视频足以令绝大多数学员关闭视频窗口,因为他们比传统课堂里趴在教室后排呼呼大睡的学生多了随时拔电源的自由。为了适应学员碎片化的学习习惯,我们必须把这三大块内容进行更细致的切分,如表1所示。
这种碎片化设计的要点是围绕课程的教学目标进行“自顶向下”的内容设计:整个课程需要划分哪些专题(相当于“章”),每个专题下又需要划分哪些主题(相当于“节”),每个主题又是如何引入问题、如何展开、如何通过例子强化以及如何收敛等等。每个主题下具体的内容就可以由一系列相对独立的短视频来实现。
注意到我们强调应该设计6~10分钟的短视频,是因为有不少心理学研究表明,成年人的“倒U型注意力曲线”在峰值附近持续的时间长度大约为6~10分钟[2]。但这并不是说我们必须把一段复杂的、不可能在10分钟内讲清楚的内容硬性压缩成10分钟,或者不惜破坏内容的完整性也要切分。这个“6~10分钟”的规律只是提醒我们,应该知道学员在这样一个时间段附近会出现注意力不集中现象。教师可以通过产生额外的刺激――比如突然变换语调,或者在视频中插入一个提问(“中国大学MOOC”和网易云课堂都提供在视频中插入提问的功能,视频播放会在提问后暂停,学员必须回答了问题后才能继续播放),哪怕是开一句玩笑,达到将学员的注意力拉回到峰值水平的目的。例如表1中列出的10段短视频中就插入了6处提问。
碎片化内容设计的另一个关注点,是为基础不同、学习能力不同的学员提供不同层次的帮助。例如我们在课程中除了有常规的授课内容,还设计了“小白专场”,针对基础比较薄弱的学员,详细讲解部分练习题的C语言程序实现细节。而这一部分又细分为三个步骤,即:问题的理解和算法思路、程序框架的搭建、关键细节的实现。学员在这个逐步细节化的过程中,有可能根据自己的理解能力在任何一个环节恍然大悟,退出视频开始自己动手实践。而这种教学效果却是传统的课堂难以达到的。
三、重实效的朴素制作
MOOC的制作方法多种多样,有豪华的,也有朴素的。根据我们的理解,决定学员去留的关键因素,是课程内容的组织和教师讲授的技巧,至于视频制作的专业技巧、声音和画面的质量等等,则属于锦上添花。不过,从实践情况看,与画面相比,声音的作用更大,因此一个好的话筒是MOOC视频制作的要素。
在个人有限的精力和教学效果之间权衡之下,我们选择了注重实效的DIY朴素制作方案,即采用简单的“居家”制作设备,完全自己动手,甚至没有动用任何助教,就完成了全部138段视频的录制与后期制作。
我们制作视频的主要工具有:具有录制短视频功能的相机(配三脚架和遥控器)、麦克风(配三脚架、调音台)、补光灯、视频编辑软件。事实上,真正重要的工具就是相机、麦克风和视频编辑软件。当室内自然光线充足时,适当调大相机ISO可以基本达到专业补光灯的效果。
由于后期制作是自己动手,所以录制过程可以比较自然,不必强记台词。缺点是后期制作如果精益求精,则需要花费较多时间剪辑。剪辑的要点,并不在于制作出多么炫目的视觉效果,而在于牢牢把握住对学员视线以及思路的引导。
视线引导是刺激听众注意力的一种方法。在传统课堂上,教师可以通过在讲台上移动以及丰富的肢体语言引导学生的视线变化,用教鞭等工具指引学生跟随自己的思路。在MOOC视频中,可以通过人像的动作、课件放映中鼠标箭头的移动以及视频编辑软件提供的高亮、笔画等功能达到同样的效果。至于人像和课件出现的比例、频率到底应该多少为宜,其实并无一定之规,关键点是:尽可能在屏幕上保持变化。切忌让一个充满了文字的、完全静止的画面持续若干秒钟。
思路引导较视觉引导更为重要。我们的课件设计是极简风格的,对所有课件中动画的设计,原则上是对思考过程的展示;而所有无助于此的元素,都不必出现,以节省学员下载课件的时间。例如,在展示一个复杂算法的伪代码时,并不是一次性将全部伪代码放映出来,再逐行讲解其功能――这是计算机执行的过程,并不是人类思考的过程。我们会从整体思路入手,先根据算法流程展示出代码框架,再逐步演示框架内各个模块的细化过程,必要时辅以实例的动画演示。
四、教学过程中的互动与实践
对于习惯于在课堂上与学生频繁互动的教师而言,MOOC在师生互动方面具有明显的弱点。不过,各大平台都提供了多种弥补的方法,如:视频内插入提问、视频间插入测验、学员讨论区等。充分利用这些工具,也可以在一定程度上达到较好的互动效果。
视频内插入提问在第二节已经提到,等价于教师在传统课堂上抛出一个较为简单的问题,期待学生在短时间内给出反馈。这样做的目的并不是考查学生对知识的掌握,而主要是刺激学生的注意力,将可能开始懈怠的思维拉回到主题。MOOC在这方面甚至可能达到比传统课堂更好的效果,因为课堂上总有懈怠的学生根本不理会教师的问题,往往只有少数积极的学生回答;而MOOC中所有在看视频的学员都会被打断,必须进行一些思考才能继续。
视频间插入测验则是有传统课堂无法达到的良好效果。当一个知识点讲解完成,及时的小测验可以非常有效地帮助学生检验自己的听课效果。而在传统课堂中,频繁的测验不仅对教学进度造成负担,而且增加教师课后批改的工作量,结果反馈也不能做到十分及时。MOOC支持在任何一段视频结束后,插入一个小测验,由系统自动判题,即时给出结果。学员通过这样的测验,可以检查自己对前一段视频中关键内容的理解程度,及时发现问题,还可以反复观看学习。
讨论区是课堂的延伸。我们充分利用讨论区功能,在每次课后布置了一些讨论话题,这些话题多为视频讲解内容的深入延伸,供学生课后思考讨论。例如在介绍完平衡二叉树之后,提出“是否可以用左右子树结点数差来衡量二叉树是否平衡”;在介绍了图的两种遍历方法后,要求学生“试比较DFS和BFS的优点和缺点”等。论题一般在一个主题结束后,最好为生生互动留一段时间教师再介入,可以点评学生的回答,1~2周后参考答案。
对于“数据结构”这种实践性比较强的课程而言,还有一个非常重要的环节,就是动手实践。目前各个MOOC平台对于程序设计类课程的实践支持较弱,而遍布各大高校的在线裁判系统(Online Judge,简称“OJ”),其初衷是为参加ACM大学生程序设计竞赛的学生而建立,普遍存在几个问题:
(1)题目类型单一。一般OJ只支持竞赛类型的编程题。
(2)题目难度偏大。因为面向的用户是各校顶尖的参赛选手,所以题目多为竞赛型,即涉及知识点的综合性很强,但缺乏针对单一知识点的基础训练题目,也无显性的知识点关联。
(3)判题过程为黑盒测试,很难强制学生必须使用某种指定的数据结构解决问题。例如最常见的问题是,企图考察链表处理基本功的题目,基本上都可以用数组解决。
(4)判题方式严苛。一般为0/1式,即通过全部测试用例可得到满分,否则零分。这种方式对初学者打击较大,并且从教学的角度考虑,区分度也较差。
(5)教学管理功能欠缺。OJ的风格是直接面向自我训练的学生,并不考虑教师的参与,因此绝大多数OJ不具有教学组织功能。
针对上述问题,我们联合网易公司开发了“程序设计类实验辅助教学平台”(英文名“Programming Teaching Assistant”,简称“PTA”,网址:http:///),作为基础程序设计类课程、数据结构、算法分析等课程的实验平台,免费向全国高校教师开放。目前平台中有判断题、选择题、程序填空题、函数题、编程题共千余道,并具有以下特点:
(1)面向教师,提供出题、布置作业/考试、成绩一键导出等基本教学组织功能。
(2)题目具有灵活的课程知识点关联,方便教师根据教学进度布置针对单一知识点的强化训练,也可以关联多个知识点设计综合性题目。
(3)题目有难度标记,方便教师组织不同强度层次的训练。
(4)函数题、编程题按测试用例评分,具有良好的区分度。
(5)测试用例提供“要点提示”,当教师注意到大多数学生都不能正确通过某些测试用例时,可以开放针对该用例的提示,对保持初学者的信心会有帮助。
这里特别值得一提的是“函数题”的设计。函数题要求学生严格按照题目给定的接口描述,完成具有指定功能的函数代码。这类题目的优点是训练重点突出,可以让学生关注复杂算法的核心流程,而不必纠结于输入输出的格式处理或是以前已经训练过的简单函数的重复实现。例如要实现“最小生成树”的Kruskal算法,我们需要用到最小堆和并查集。这两个结构都已经在学习“树”的过程中训练过,且编程量较大,但只是Kruskal算法的辅助工具。如果不想让学生在辅助工具的实现上花费太多时间,教师就可以将这个训练出成函数题的形式,由教师准备好最小堆和并查集的功能函数,学生只要在建立最小生成树的过程中调用即可。另一方面,函数题由教师规定接口,就使得指定数据结构成为可能。例如要训练处理链表的能力,只要规定链表结点的结构,并规定函数传入的参数为链表头指针即可。
五、课程实施数据及思考
迄今我们已经先后在爱课程网“中国大学MOOC”和网易云课堂两个平台上分别开设了一个完整学期的课程,表2列出了部分统计数据。
总体上看,如大多数MOOC课程一样,对证书有兴趣的学生占比很低,这与我们在讨论区与学员互动得到的印象是基本一致的。部分学员表示,注册课程只为看其中某一章节,作为课堂学习的补充;另外也有学员表示自己的目的是应对IT业求职的笔试和面试等等。一个重要的原因,可能是MOOC的教学实施与考核都是在无监督的状态下进行的,所以证书尚未得到用人单位的充分重视,考取证书的必要性不大。
我们自2011年8月起创办了计算机程序设计能力考试(Programming Ability Test,简称PAT),采用分级式在线考试及自动评测方法,客观地考核考生的算法设计与程序设计实现能力。目前在全国18个省/直辖市设置了考点,有包括谷歌、微软等“世界500强”企业以及百度、网易、阿里、腾讯等96家知名企业签署合作联盟协议,接受将PAT测试成绩作为衡量应聘人员程序设计能力的标准(划定分数线、提供介绍信),受到考生和企业的欢迎。我们也将达到PAT甲级考试浙江大学计算机专业学生平均分的成绩作为MOOC课程优秀证书的标准,目前有2位学员确认得到了优秀证书。
另一方面,从开课阶段和结课阶段的参与人数比较来看,也体现了MOOC学员的特点:大多数人在没有足够外力驱使的情况下,非常容易放弃。在此我们不断检讨自己的教学方法,还有很大的提升空间。两次开课之间,我们所做的比较重要的调整主要是两方面:一是将课时从10周延长到12周;二是补充了部分程序实现的源代码。做这样的调整,主要是根据第一次开课得到的反馈,发现学员的学习能力差异巨大,我们需要补充更多细节帮助不同层次的人跟上进度。从数据比较来看,第二次开课虽然选课总人数下降,但坚持的人数百分比略有上升。这使得我们继续增加了“小白专场”系列以及讨论题参考答案系列,以加大对基础薄弱学员的帮助力度。笔者著此文时,本课程正在“中国大学MOOC”平台上再次开课,并且已经吸引了2.4万余名学员注册学习。后期努力的效果尚有待检验。
参考文献:
数据结构范文2
关键字数据结构高效学习知识框架
1 引言
数据结构课程主要讨论各种数据组织中的逻辑结构、存储结构以及有关算法,研究如何根据实际应用的要求,对数据进行有效的组织、存储和处理,进而编制出高效率的程序,是一门逻辑性和实践性很强的课程。不少同学刚开始学习时,觉得这门课程很难学,知识点很多而且灵活多变,有些同学花很长时间学习该课程,却收效甚微。因此,如何充分利用时间,高效地学习数据结构成为很多同学共同关注的话题。
2 关于高效学习的界定
不同时期和不同课程高效学习的内涵与特征会有所不同,目前关于高效学习的定义主要有以下几种。
第一种定义认为高效学习应强调有效学习,认为那种死记硬背、生搬硬套的学习是无效的学习,不能够真正理解、灵活运用所学知识。
第二种定义认为所谓“高效”是指能够掌握有效的学习策略和思维策略,提高学习效率,从而既减轻学习负担,又提高学习质量。
这些“高效学习”的界定或强调学习的结果,对学习质量的要求侧重于认知和能力;或重视学习效率,但对学习结果没有给出具体的评价标准。本文所讨论的高效学习是指高效率、高效益的学习。高效益学习是学习效率追求的目标,而高效率学习是提高学习效益的前提。高效地学习数据结构,一方面指学生能充分利用时间,积极、主动地参与学习;另一方面是指学生能够达到获取知识、形成技能、培养能力的目的。
3 数据结构的高效学习
本课程的学习过程中,同学们应根据数据结构课程的特点,注意改进学习方法,提高学习效率,以达到高效学习的目的。此外,还应注意如下几个问题。
3.1熟悉课程大纲,学习循序渐进
要学好数据结构,首先应该熟悉课程的教学大纲。整个大纲是本课程的主体知识框架,所涉及的范围不是一些“点”的东西,而是“面”的东西。掌握课程大纲,就能容易地理清知识框架,抓住课程重点,可以充分利用有限时间掌握课程主要的知识结构。了解课程的知识框架和各种结构的关系后,可以从简单到复杂、循序渐进、逐步深入地学习。
例如,对图1所示的数据结构内容体系,可以围绕线性结构、树型结构、图型结构和查找、排序这两种重要的算法,以顺序和链式两种存储结构为贯穿整个课程的主线进行理论学习和实践学习。
对于每个章节的内容,也应该按照一定的流程进行学习。例如,首先掌握每章节的基本概念,再熟悉该结构的抽象数据类型定义和主要操作的实现方法,然后要理清算法实现的思路,以及算法实现的框架,最后通过上机调试进一步掌握该算法。
3.2不要过分关注数据结构的语言实现
数据结构是存在一种或多种特定关系的数据元素的集合,并不是“某种语言的”数据结构,它和具体语言无关。一些同学在学习数据结构的时候,往往不自觉地把数据结构与某种具体的程序设计语言(如C语言)联系起来。
例如,讲到数组时,同学的第一反应很可能是“[ ]”符号;说到链表时,也许很多同学首先联想到的是“*”符号。虽然在实际应用中,数据结构总是要由某种高级语言来实现,但在学习数据结构的过程中,如果过分关注于数据结构的语言实现,思想就会被束缚在这些语言的语法规范中。
学习数据结构时,应该关注的是不同数据结构的特点是什么,为什么要用这种数据结构,在什么情况下用什么样的数据结构,几种数据结构的联系和区别是什么……计算机程序设计语言作为数据结构的实现方式,是多变的,但数据结构作为框架和思想,是相对稳定的。学习数据结构,重要的是学习数据结构中的框架、原理和思想,只有理解和掌握这些,才能够很好地运用数据结构来解决实际问题。
3.3加深理解,培养思维能力
学习数据结构,特别是学习算法时,应重视对知识的深刻理解,理解得越深,学习效果越好。首先应该从根本上认识数据结构的本质、数据结构和算法之间的密切关系,对知识应该“知其然,也知其所以然”,不然很容易陷入各种数据结构的复杂特性中。
有部分学生学习数据结构时会做大量的习题,但希望大家了解数据结构课程的逻辑性很强,同学在学习过程中应注意培养自己的逻辑思维能力,锻炼理解能力,使自己分析问题的综合能力得到提高。无论做的题多还是题少,都应将解题过程当作训练自己思维的过程。应该在每次做完练习之后及时地归纳、整理、总结,从中找出自己的缺点加以补救,要注意比较,善于总结和反思,这样就能够做到举一反三,提高效率。
3.4重视实践
我们不过分关注数据结构的语言实现,并非不重视动手实践,而是因为学习并掌握数据结构中的框架、原理和思想,目的是为应用打好扎实的理论基础。
例如,在设计一个新的数据结构时,我们脑中产生的数据结构设计思路并不一定是完美的,而是不完备的,甚至是错误的。“实践是检验真理的唯一标准”,通过上机编写程序,可以验证想法的正确性。在动手实践的过程中,会遇到很多细节问题,这些是在思考时无法考虑到的,但对解决问题又是十分必要的。因此,动手实践的过程,实际上是培养完整、彻底地解决问题能力的过程。只有将理论与实践紧密结合,才能学好数据结构。
4 结束语
本文对于什么是高效学习进行了初步探讨,并结合数据结构课程的特点,讨论了高效学习数据结构需要注意的事项。
参考文献
1 张庆林.高效率教学[M].北京:人民教育出版社,2002
数据结构范文3
关键词:数据结构;教学方法;教学手段;多媒体教学
中图分类号:G642 文献标识码:B
文章编号:1672-5913(2007)14-0024-03
“数据结构”是计算机及相关专业中一门重要的专业技术基础课,用计算机解决任何实际问题都离不开数据表示和数据处理,而数据表示和数据处理的核心问题之一是数据结构及其实现。数据结构课程要求达到知识学习和技能培养两个目标,是理论和实践要求都非常高的课程。其研究思想和研究方法在计算机科学中许多有深度的研究领域得到广泛的应用,为学生今后从事理论研究、应用开发、技术管理工作提供了坚实的理论基础。
“数据结构”课程的特点是逻辑性强、概念多且抽象、实践性强,学生不容易掌握。学生在刚开始学习这门课程时,不知道怎么学,课程学完后也不知道学了些什么,对学过的知识也不知道如何应用。针对这些现象,如何使学生更好地掌握最常用的数据结构,理解数据结构内在的逻辑关系,数据与关系在计算机中存储表示以及在这些数据结构上的运算和实际的执行算法,培养学生解决实际问题的程序设计能力以适应学科迅速发展和知识更新的需要,是本门课程的目的和宗旨。如何教好数据结构课程是一个值得探讨的问题。
笔者对近年来教学经验的总结,针对我校学生的状况,在教学资源条件满足的情况下,对教学方法和教学手段做了相应探索。
1教学方法改革
在“数据结构”课程的教学过程中,积极探索新的教学方法,以便能够调动和发挥学生的主观能动性。具体有形式有:
1.1以学生为主体,改变教师在教学环节中的作用
树立以学生为中心的新的教育观,从“以传授知识为主”转变为以培养学生具有独立获取知识、发现创新知识的能力为主,把学生创新能力的培养放在重要的地位。利用指导法教学、启发式教学来体现 “以教为主导,以学为主体”的教学原则。
1.2有针对性地选择学习内容,不再满堂灌,整本讲
在理论部分,根据“数据结构”教学大纲的要求,对教学内容去粗取精,提炼出该课程每章、每节的框架体系,从数据结构的逻辑结构存储结构和数据的运算三个方面去组织教学内容,重点突出、简洁明了,而不求面面俱到。在了解学生实际情况的基础上进行分析研究,预见学生会对那些内容感到困难,要求学生提前预习,并把需要的知识提前做交待,使学生有充分的准备。在实践部分,考虑到学生编程能力上的薄弱,选择实验题目不太难,但知识点明确,同理论部分很好的结合的内容。注重提高实验课的质量,通过预先讲解程序流程,要求学生编写程序草稿,讲解程序实例的方式,让学生准备充分。对基础较好,学习能力较强的学生,布置一些技巧性较强的题目,锻炼学生的逻辑推理能力。同时对本门课程的前序课程―计算机程序设计语言(目前是C语言)的教学安排也做了改进,为本门课程的实践环节做好铺垫。
1.3共性化与个性化相结合教学
从教学形式上有以教师为主体的课堂教学、习题课等共性化教学环节,也设置了答疑p质疑等教学环节,还通过网络将课程电子讲义、电子教案、上机实验、课程设计、算法的动画演示,以及相关中、英文参考资料等资源上网,为学生提供了自主学习的条件或自主实验时间,引导和鼓励学生通过实践和自学获取知识。共性化与个性化相结合,既可以起到教师主导作用,也可以满足学生个性学习的需求。
1.4注重范例教学
课堂讲授应符合学生的认知规律,从感性到理性,从理性到实践,从直观到抽象,再从抽象到具体实践,范例教学在数据结构的算法思想讲解中能发挥其无法比拟的优势。对数据结构中的主要算法和一些抽象的概念,可以尽量先从直观意义或具体实例解释着手,让学生更容易理解。因此在教学过程中宜多画图,多举例,多解释。这种从特殊到一般,从具体到抽象的方法在数据结构中的很多内容都可以这样处理。例如:讲解队列的概念时,可通过日常生活中的购物排队的过程来反映队列中插入、删除的原则,再结合计算机中的操作队列、打印队列的应用来说明。对二叉树的遍历的算法过程可通过一个特定的二叉树的例子说明其遍历思想,再推广到一般的二叉树的情况等等。
1.5理论与实验相结合
数据结构课程主要介绍数据的逻辑结构、物理结构以及算法。算法的思想需要通过一种程序设计语言加以描述并在计算机上实现。我们在重视理论教学的同时,也很注重实验课,注重学生灵活应用知识能力的培养。理论与实验相结合,可以使学生更好地理解“数据结构”的思想与概念。
2科学授课,充分调动学生的积极性和创造性
课堂教学是整个教学活动的一个重要环节,课堂组织是否科学合理会直接影响学生学习的质量和效果。任课老师非常注重课堂教学方法,总结出了一些有效的措施。
2.1明确学习目的,激发学习兴趣,采用启发式教学
兴趣是促进学习的巨大动力,教师有义务激发学生的学习兴趣,尤其是理论性较强的课程。所以,在课程之初就必须清楚地告诉学生学习该课程的目的,讲清不同学习对象的学习目的(这个目的因人而异)。传统的教师讲、学生听的填鸭式的教学已经不能适应现代教学。为了在课堂上激发学生的学习热情,发挥学生的学习积极性,同时更好地把理论知识与实际应用结合起来,在讲每一种基本的数据结构之前,准备一些实际应用的例子,让学生一边逐步学习理论知识,一边思考如何应用。比如在学习线性表之前,举几个常用的线性表的应用实例,让学生在学习的过程中考虑一个简单的集合运算的实现。让学生带着问题去学习,使学生的学习热情提高了。
2.2根据教学内容,合理安排教学进度,注重节奏教学
数据结构课程内容的概念多而抽象,而从抽象到设计又是理论到工程的转换,本科学生缺乏系统和工程的概念,因此是一个难点。我们在课程进度方面采用“先慢后快”的节奏。“先慢”是为了让学生有充足的时间消化新概念,也让学生适应教师的授课风格。“后快”是当学生基本掌握了该课程的主要概念以后,可以适当加快教学进度,以便按时完成教学计划。
2.3精心准备,激情授课,强调交互式教学
教学方法需要强调讲课的高度激情,以教师高昂的情绪感染学生。为避免满堂灌,我们要求教师课前根据内容需要设计准备几个适当的问题,在课堂教学适当的时候提出,留给学生适当的思考时间。同时鼓励学生提问,根据学生反馈信息和问题,与学生探讨问题的解决,而非给出答案。这种交互式方式,学生非常乐于接受。
2.4深入浅出,理论联系实际,突出原理的应用
如何将高深的理论用浅显的语言表述是教学方法的技巧。数据结构中的“图的存储结构”、“求最短距离”等内容是理解的难点,我们教师以五栋大楼之间网线的布局为例进行讲解,从应用角度和生活常识形象生动地解释了理论,开拓了学生的思维。
2.5以人为本,诚心与学生交朋友,推崇亲情教学
数据结构课程的讲授大多面向大学二年级学生,此时,很多学生正处于人生规划决策的关键时期,作为老师与长者,帮助他们健康成长是义不容辞的职责。以讲授课程知识为基础,辅以讲授人生发展与规划,帮助他们解除成长过程中的烦恼,把他们当作朋友,对于推动教学工作是非常有益的,这种“亲情式”教学手段往往能收到良好的教学效果。
3教学手段改革
在教学过程,本课程采用多媒体手段并结合网上教学资源辅助课堂教学,有力地促进了教学手段的改进、教学质量的提高和教学方法的变革。
3.1采用多媒体教学
多媒体教学有很多优点:它集讲课、习题课、演示算法为一体,具有生动、形象、直观的特点,所显示的版面规范、文字精练、形式多样,多重感官刺激,极大地调动学生听课的积极性,有助于学生很好地理解和掌握所学内容。
“数据结构”课程的内容抽象难懂,教学时辅以多媒体教案和算法演示系统,可以提高教学效果。多媒体教学在讲具体的算法实现方面显得特别优越,可以先给学生讲解算法,然后给出数据来执行算法,学生一边对照着语句一边执行观察数据的变化,或用动画演示执行过程。尤其对于递归算法,传统的黑板讲解递归算法很不方便,而且算法的执行过程不易理解。采用动画演示递归算法,生动、形象,学生很容易看出何时发生递归调用,何时返回到上一层调用处。
3.2建设“数据结构”网络课程,实现网络教学
在建设“数据结构”网络课程的过程中,教学网站是一项充分发挥现代信息技术,拓宽教学资源使用和学生受益范围的举措。也是让学生能更大程度地获得需要的信息和知识,了解整个课程教学过程,并参与到我们的教学中来,形成师生共建、共促质量的模式。
我们建立了“数据结构”网络课程,内容包括:课程教学大纲、电子教案、算法演示、电子教材、案例分析、实验指导、参考文献目录、教学论坛等。既对上课专业的学生提供了共享与交流环境,也为其他专业和远程教学提供了网络教学资源。网络教学是当今计算机教育的发展潮流,它可以和传统教学方式相配合,增加学生的学习渠道,充分利用学生的课余时间。网络教学可以通过网络课程、在线视频、论坛、留言板和电子邮件等形式实现教学互动,作为课堂教学的补充。对于提高教学质量和教学水平、推动教育改革都具有非常重要的意义。
4结束语
教学实践表明,数据结构课程只有在理论教学上不断创新,在教学方法和手段上不断更新,教学内容与时俱进,才能使教学效果明显,使学生成才,满足社会发展对科技人才高素质的需求。这就要求在教学过程中不仅仅要有先进的教学内容,更要有先进的教学方法、先进的教学理念与先进的教学手段。当然“没有一种教和学的方法是唯一正确的”,如何教好学生,永远都是教师们永恒的话题。
参考文献:
[1] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,1997.
[2] 徐孝凯. 数据结构实用教程[M]. 北京:清华大学出版社,1999.
[3] 潘道才,陈一华. 数据结构[M]. 成都:电子科技大学出版社,1994.
[4] 爱德才,刘山. 数据结构[M]. 北京:中国水利水电出版社,2002.
作者简介
杨先凤(1974- )女,四川人,西南石油大学计算机科学学院,副教授。
数据结构范文4
关键词 数据结构;算法;实践教学
1 引言
“数据结构”是计算机程序设计的的重要理论技术基础,它不仅是计算机学科的核心课程,而且已成为其它理工专业的热门选修课。“数据结构”并非一门纯数学课程。它要求学生能根据所学的“数据结构”理论完成较复杂的程序设计。而程序设计能力的提高有个学习、观摩、借鉴和实践的过程。
学生在学习“数据结构”课程时,虽然已学过程序设计语言,但仅是初学,并不精通。对于抽象的数据类型、动态分配存储空间等概念,在理解上还是有一点困难的。如何理解数据存储结构,消化算法,将算法转化成程序设计语言的函数并能编写出运行该函数的主程序,往往是摆在他们面前的一道难关。
2 实践教学新思路
笔者多次讲授“数据结构”课程,所用教材为清华大学出版社的严蔚敏、吴伟民编著的《数据结构》(C语言版)(以下简称为教科书)。该教科书内容全面,有较高的深度,但在叙述一些基本概念和算法时过于精练,使学生在理解上有一定的困难。另外,本课程的教学不仅注重学生对理论的理解,锻炼学生的抽象思维和创造能力,更注重培养学生的实践能力。笔者在多年的教学实践中发现,学生认为这门课程理论性太强,太枯燥,不好学,学了不知有什么用,怎么用,当面对具体问题时,不知该如何应用学过的知识来给出切实可行的解决方案以及编制程序,得出正确的结果。
针对以上问题,可以看出教师除了加强理论知识的讲授外,更应注重实践环节的教学,提高上机实验课的教学效果。以下是笔者在“数据结构”课程实践环节教学中的几点想法,希望与广大读者探讨之。
2.1 思想上重视实践教学
有些教师在教学的过程中,重点给学生讲授数据对象的特性,数据的组织方法,数据的逻辑结构和存储结构以及相应的运算(操作),对实验不够重视,认为可有可无。在实际教学中,教师只介绍各种操作的算法,而忽视将算法转换为具体程序设计语言中的函数以及编写出运行该函数的主程序。这种教学方式,势必导致多数学生对算法和程序概念的混淆,再加上教科书中也仅仅是将算法转换成程序设计语言中的函数,学生在两课时的上机实验中往往编制不出完整的程序,得出正确的结果。
上机实验是对学生全面综合素质进行训练的一种基本方法,是课堂教学的一种延伸,是必不可少的一个教学环节。实验中的问题往往比平时的习题要复杂的多,也更接近实际。实验能使学生所学到的书本知识“活”起来,起到深化理解和灵活掌握教学内容的目的,同时,上机实验也是对学生软件设计综合能力的训练。
在“数据结构”课程堆栈的教学中,针对教科书中进制转换的问题,笔者除了详细讲授教科书中堆栈的顺序存储结构及其基本运算的实现算法与函数外,还在课堂上编制出运行该函数的主程序,包括数据的输入与输出,具体如下:
#define Maxsize 100 //顺序栈初始分配空间
Typedef int Elemtype
Typedef struct{
Elemtype data[Maxsize];
int top;
}STACK;
char B[]=”0123456789ABCDEF”;
void conversion(int n , int b) //将非负的十进制整数n,输出等值的b进制数
{
int x;
STACK st;
initstack(&st);
while(n)
{
push(&st , n%b);
n=n/b;
}
while(!Empty(&st))
{
pop(&st , &x);
printf(“%c”, B[x]);
}
void main()
{
int n , b;
printf(“将十进制整数n转换为b进制数,请输入n与b:”);
scanf(“%d , %d”, &n , &b);
conversion(n , b);
}
程序运行如下:
将十进制整数n转换为b进制数,请输入n与b:13,2
1101
通过这种方式,学生清楚地认识到程序不仅仅是算法,在学习算法的同时,更应注重程序总体结构设计、用户界面设计、软件开发规范等方面的学习和锻炼,这为“数据结构”实践教学取得较好的效果奠定了基础。
当然,这种尝试也遇到了一些问题,主要在课程总学时方面。笔者所在学校“数据结构”课程作为一门专业基础课,课时为64学时,其中包含上机16学时。部分教师也认识到了数据结构实践教学的现状,但迫于课时的限制,也打消了尝试新的教学方法的念头。因此,还得要让学校、教师转变观念,认识到教育应着眼于未来,应以学生为中心,而不是急于求成,追求功利。
2.2 编制好的实验指导书
一本好的实验指导书能给学生的上机实验带来事半功倍的效果。现在有关“数据结构”课程的实验指导书较少,而且其中大部分都没有提供完整的上机实验操作过程。笔者认为一本好的实验指导书应该能和课本独立开来,学生在理论课学习的基础上,通过阅读该书,应该能够解决实际问题。
笔者在“数据结构”课程的教学中,编制了一本实验指导书。书中做到了以下三个方面:
(1)明确实验步骤
为了培养学生良好的工作作风和方法,并且为后续课程做准备,书中按软件工程方法要求学生遵循相应的实验步骤,先需求分析,抽象出数据结构,再明确数据类型,详细设计,最后进行编码及调试。
(2)明确每个实验的具体要求
有了具体要求,学生实验时才有章可循。书中对每个实验都提出了具体要求。开始部分的实验除给出要求外,还给出问题的需求分析、设计以及完整的程序,学生上机主要是验证程序,后期的实验则要求学生独立设计算法,编制并调试程序。整个实验指导书在难度上有一定的梯度,便于学生循序渐进的学习。
笔者在介绍完线性表的链式存储结构后,要求学生完成的第一个上机任务为实现以单链表作存储结构的线性链表的就地逆置。关于这一问题,实验指导书中给出了两种实现方法,具体如下:
第一种,将原链表中的头结点和第一个元素结点断开(令其指针域为空),先构成一个新的空表,然后将原链表中各结点,从第一个结点起,依次插入到这个新表的头部(即令每个插入的结点成为新的第一个元素结点)。这种方法较易,学生容易想到,由于是单链表部分的第一个实验,书中除给出思想外,还给出了详细的算法,只要求学生编写出实现该算法的函数和主函数,上机验证该算法。
第二种,修改原链表中每一个结点的后继指针,使其指向其前驱。考虑到锻炼学生的算法设计能力,书中只给该出了该方法的思想,要求学生独立设计算法,并编制出完整的程序。
(3)要求学生在上机之前,预习实验指导书中的内容
实验指导书独立于教材,上机实验学时又有限,这就要求学生在上机实验之前预习实验指导书中的内容。在实验内容之前给出了一些与本实验有关的思考题,让学生在阅读中思考,同时列出相应的参考资料或参考书,让学生在上机之前通过查阅参考资料或参考书,加深对实验内容的理解。这种方式还可以锻炼学生独立解决问题的能力。
2.3 加强一线教师队伍的建设
课程的教学最终是由一线教师来完成的,一线教师队伍的素质决定了教学的质量。“数据结构”课程的一线教师应具备实验教学的素质。
实验教学能力的培养有一个过程。作为一名教师,应具备钻研和创新精神,提升自己的知识水平和实验教学能力。同时,在教学过程中,也应该吸收其他优秀教师的教育思想,学习其他教师的教学方法。在实验教学方面,一线教师更应注重相互之间的沟通,取长补短,共同提高。学校、院系在条件允许下,还应定期组织教师进行培训或进修。
3 结束语
由于“数据结构”课程在计算机专业课程中的重要性,必须加强实践环节的教学,提高学生分析问题、解决问题的能力。可以相信,只要我们思想上重视实践环节的教学,提高自身实践教学的能力,采用合理的教学方法,“数据结构”课程的实践教学必将取得良好的效果。
参考文献
[1]严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,1997
数据结构范文5
关键词: 链式存储结 指针变量 赋值运算
Teaching Methods of Linked Structure in "Date structure"
Kan Nan
(Department of Information Engineering, WuHan Vocational College of Information Transmission Technology, Nan Kan, 430074 , China)
Abstract:Pointer is a difficulty for students to grasp in linked structure; there is one question about it. For example assignmentoperation about pointer variable,,Based on this, author discusses new teaching methods.
Keyword: linked structure; pointer variable; assignment operation
《数据结构》主要研究信息的逻辑结构及其基本操作在计算机中的表现和现实,是计算机专业的核心课程。链式存储作为该课程讨论的重要的储结结构之一,是学生应掌握程序设计技巧的基础。
从进几年《数据结构》课程的教学过程反映出,当讨论链式存储结构时学生出现理解上的“瓶颈”现象。问题集中体现在:指针变量与指针赋值运算。下面就这一问题谈谈教法与感受,希望与同仁共勉。
首先我们引入两个概念 “菜篮子”和“菜”而且要分清它们。 说到赋值语句,我们先来回顾一下赋值运算的实质。尽管不同语句的赋值语句有不同的语法结构,但大都数语句所定义的语意大体相同。下面以C语言为例说明:
某程序段中语句x=y;x和y是变量名,无论他们是数据类型,每一名字有两个“身份”:一方面该变量名代表一定的存储单元,另一方面代表该存储单元里的内容,以该单元的内容为值。赋值语句x=y的意义是:“把y的值送入x所代表的存储单元”,也就是说,赋值语句中赋值号“=”左右两边的变量名扮演着两种不同的角色。为了区别一个变量名的两种“身份”我们把一个名字所代表的那个存储单元称为该名的左值,通俗地说是“菜篮子”用来装菜的;把一个名字所代表的的单元内容(值)称为该名的右值,对应的就是“菜”。当变量名出现在等号左边就是“菜篮子”出现在等号右边就是“菜”,赋值运算就是把“菜”往“菜篮子”里放(注意这儿的“菜篮子”的特殊性:最后一次方的“菜”就覆盖“菜篮子”里以前放的“菜”,且“菜篮子”里只能放一个“菜”)。
对变量名的双重性有了以上的深刻认识在来讨论指针变量的赋值运算学生就恍然大悟了。
例1: 有定义如下的双向链接表
struct dnode {elemtp data;
struct dnode *prior, *next;}*p,*r;如图1所示,在双向链接表中的结点之前插入一个结点r使线性表(a1…ai,ai+1…an)变成(a1…ai,b,ai+1…an)。操作语句如下;
{1}r->prior=p->prior;
{2}r->next=p;
{3}p->prior->next=r
{4}p->prior=r;
以上4条语句的语义分别是:
{1}把数据元素ai所在的结点地址(在p的prior域中放着的地址值,此时表现为变量p->prior所代表的内容,以后简称右值,也就是我们所说的“菜”)放到结点r 的prior域中(此时r->prior应以其所代表的存储单元的身份出现,即左值,也就是“菜篮子”)这就是把变量p->prior所代表的存储单元的地址值赋值给变量r->prior所代表的存储单元,即把“菜”放进“菜篮子”,线1所代表的链建成了。注意千万不能把该语句中理解为其左值,我们是不可能把“菜篮子”放进“菜篮子”的
{2}把数据元素ai+1所在结点的地址(是变量p代表的内容,即p的右值)放到结点r 的next域(是变量r->next代表的存储单元,即左值)。变量p的值作为“菜”放进了变量r->next这个“菜篮子”,线2所代表的链建成了。
{3}把入数据元素b所在的结点的地址(该地址作为值在r所代表的存储单元中放着,即r右值)放到数据元素ai所在的结点next域中,而数据元素ai所在的结点就是p->prior(因为数据元素ai所在的结点地址在p->prior中放着,此时取其右值),那么数据元素ai所在的结点next域中就是p->prior->next这个“菜篮子”,此时语句实现使b变成ai的后续,经赋值后原链5自然断掉。
{4}把入数据元素b所在的结点的中的地址,放到数据元素ai+1的地址,放到数据元素ai+1所在结点prior域中,变量r的值再次为“菜”放入了变量p->prior“菜篮子”,就使b称为ai+1的前驱,经赋值后原链自然断掉。
以上4条语句{1},{2}的次序可以调换,{3},{4}的次序不可以调换,而且{1},{3}语句必须在{4}之前,只要学生对赋值语句能有以上的深刻理解,其原因就不言而喻了。再复杂的链式存储结构及其操作一般都涉及改变链的状态,其无非就是通过赋值语句来改变链,在操作中分清变量“菜篮子”和“菜”的双重角色,对学生掌握链式存储结构起着重要的作用。
参考文献:
数据结构范文6
关键词:数据结构;方法;实践;教学评价
中图分类号:G642 文献标识码:B
“数据结构”是计算机科学与技术专业重要的专业基础课,在整个专业课程体系中处于承上启下的核心地位。它一方面扩展和深化了“离散数学”、“程序设计语言”等课程学到的基本技术和方法,另一方面为进一步学习“操作系统”、“编译原理”等专业课奠定坚实的理论与实践基础,更是今后进行高级程序设计、算法设计、软件工程的基础。因此,各高校都非常重视“数据结构”课程的教学工作,这也是计算机教育改革的重点和热点。
笔者一直从事“数据结构”课程的教学实践,从青年教师的角度出发对该课程教学中出现的问题进行了反思,并提出自己的看法和解决思路,希望与同行共同交流。
1教学中遇到的问题
计算机专业的学生今后大多将从事与计算机应用与软件开发相关工作,因此迫切希望能学好此课程。但是在实际教与学的过程中,有时教学效果并不理想,教师感觉讲授比较吃力,许多学生感觉课程抽象、枯燥,入门困难。在几年的“数据结构”课程教学和实践过程中,我们发现主要存在以下一些问题。
(1) 课程的性质决定学习难度大
“数据结构”课程强调问题的分析和抽象表达,把现实中遇到的问题抽象出其逻辑模型(包括数据及它们之间的关系、实施的操作等,即ADT),再选择适当存储结构(存储数据及关系),设计出各个操作的算法从而在计算机上解决问题。它是一门理论与实践相结合的课程。由于缺乏实际应用经验,学生很难将树、图等抽象概念和具体问题相结合起来。
(2) 程序设计基础不扎实
C/C++语言程序设计语言是学习“数据结构”的重要基础。在C/C++语言课程的教学中,由于学生的接受能力和学时的限制,致使C/C++语言中的函数、指针和结构体等重要知识点难以完全理解和融会贯通。另外,大多教师在教学过程中重点强调程序设计语言的掌握,忽视了程序调试技能培养。然而,这些难点和程序调试技术在数据结构课程实践环节中恰好是使用频率最高的内容,结果导致学生在将抽象的理论转化为具体实践的过程中遇到重重障碍。
(3) 学生学习兴趣较高,主动性不够
前期课程介绍强调充分,学生大多明白本课程的重要性,因此学生的学习兴趣较高,但长期以来的学习方式和教学模式让学生在学习过程中缺乏独立思考的主动性,随着课程的深入,学生容易对课程学习的意义产生怀疑,失去学习的兴趣和主动性。如何在整个教学过程中保持学生的学习兴趣也是一个决定教学效果的关键因素。
2教学中采取的措施
针对“数据结构”教学过程中存在的问题,我们一方面查阅前人文献和教改成果,一方面在教学中实践摸索,从教学方法、调整学时分配、完善教学评价制度、加强实践教学环节等几个方面入手提出了改革措施,并在课程教学实践中取得了很好的教学效果。
2.1突出课程主线、强调基础知识
“数据结构”课程整体内容连贯,脉络清晰,系统性、层次性强。在每个章节都有明确的主题和线索,就是每种数据结构的抽象数据类型(ADT),分为定义(抽象)和实现(具体),即“数据结构”的数学模型和定义在该模型上的一组操作及其实现。这也是贯穿整个教学环节的一条主线。
在具体教学过程中,我们当重视概念的建立和基础知识的掌握。例如,第二章线性表是学习的第一种数据结构,按照线性表ADT定义(包括数据结构定义和实施的操作)、ADT的虚拟实现(数据结构的虚拟实现即存储结构、操作的虚拟实现即设计算法)的层次学习。这是第一次把前面学习的抽象概念进行应用,如何定义ADT,如何去实现ADT等都由抽象到了具体,后面其他数据结构都会反复用到,因此第二章线性表是整个课程学习的基础和关键。讲授过程中,我们应当适当放慢速度,并在此过程适当回顾C/C++中的基本知识,必要时写出程序设计的详细过程和代码,以此来使抽象的概念转化为具体的程序实现。再如,第三章栈的应用递归程序设计就是树和图部分算法设计的基础,对用递归方法解决问题的方法、递归的执行过程应该深入地学习和理解。
2.2综合运用实例化和启发式教学
“数据结构”课程中难点较多,许多算法设计巧妙,逻辑性强。针对这一特点,我们在不同的教学阶段采取了不同的教学模式和手段。实践证明,通过精心设计的实例可以加深学生对算法的认识和理解,就是对课程中的重点、难点内容选配简单有效的例题、运用恰当的比喻,把抽象的内容具体化、形象化,帮助学生理解掌握这些内容,并适当加以引伸,引导并激发学生作进一步的思考和探索。例如在讲解树数据结构时把树和生活中的家族谱联系起来进行比喻说明,学生不仅听起来较有兴趣,而且更容易理解。
“启发式教学法”是指教师在教学中把所讲解的内容与学生的思考有机地结合起来,激发调动学生的积极性和主动性,让学生更好地掌握基本知识和基本技能,从而达到融会贯通地掌握知识和技能,培养学生独立思考能力和创新意识。“数据结构”课程有许多和现实生活规律相通的地方,例如:栈、队列就和生活中停车、排队买饭具有很多相似的规律。教学过程中我们以学生为中心,精心设计问题情境,引起学生的好奇,通过引导、启发、训练学生的思维,取得了较好的教学效果。
2.3重视实践在教学中的作用
学习“数据结构”的最终目的是为了提高应用计算机解决问题的能力,培养并提高学生的实践能力是其教学重点之一。在教学实践中,学生普遍反映课堂上能够理解讲授的知识点,但只要一动手实践就糊涂。学生在实践环节上的失败,反过来又会影响其对理论知识的掌握,打击学习的兴趣和主动性。因此,我们在学生掌握基本理论的基础上,要求和鼓励学生进行一些实践工作,重视实践在教学中的作用。
“数据结构”课程的实践方式主要有三种:一是做习题,二是上机实践,三是课程设计。在课程开始初期,应当适当布置一些习题,主要是帮助学生掌握基本概念和数据结构方法;在进入基本数据结构学习后,让学生通过上机实验来验证数据结构各种存储结构与算法的具体实现;基本数据结构学习结束后为了进一步提高学生对课程内容的理解和动手实践能力,针对性地进行课程设计,选题灵活多样、趣味性强(在课后或者暑期完成)。对学生的上机实践应当严格要求,尤其是要加强上机指导和监督。上机前要求学生做好充分的准备,上机结束后要求学生写出问题分析,算法的时间复杂度分析,以及经验体会。
2.4课程考核的改革
课程考核是教学过程中的重要环节,是督促学生加强学习和了解教学效果的重要手段。作为核心基础课,“数据结构”强调数据关系的抽象,课程本身实践性很强。通过“数据结构”课程的实践,不仅可以提升学生程序设计的能力,更重要的是提高他们对问题分析和数据抽象的能力。因此,考核方案分四个部分:
(1) 平时作业,占10%,主要督促学生注意平时学习和及时复习巩固;
(2) 实验和报告,占20%,目的是加强学生实践动手能力;
(3) 期中考试,占 20%,巩固学生的阶段学习成果;
(4) 期末考试,占50%,主要对课程内容的总结和评测。
可以看出,方案制定的主导思想突出了阶段考核和实践环节考核的重要性。考核方案在一定程度上制约了部分学习意愿较差的学生,使他们在教学过程中始终保持较高的积极性。
“数据结构”学习中上机是非常重要的一个环节,是将抽象的算法转化具体问题,是理解课程内容的关键,但程序设计不是该课程的重点。传统上我们通常要求学生完成规定的实验项目然后才能申请验收和评分,但是在实践中发现,有些实验项目对部分学生而言比较难,只能完成部分内容。为了保护和鼓励学生学习的积极性,突出课程内容,可以对较好完成部分实验任务的学生的成果也进行验收,给予适当的肯定,并分析指出其设计中存在的问题,最后统一给出标准程序。
2.5充分利用计算机辅助教学
教学手段的多样化已成为教学改革的一个大趋势,但不是一味的否定“黑板加粉笔”的传统教学模式。“数据结构”课程教学过程中辅以多媒体教学,不仅可以使一些原来板书不能完成或很难完成的教学问题得到解决,而且还提高了教学效率。我们把清华大学出版社的《数据结构算法演示系统》用于课堂教学,对较难理解的知识点,如递归程序调用过程、排序的数据交换过程、最小生成树等,可以化抽象为直观、形象,取得良好教学效果。
计算机辅助教学绝不是一般的PPT讲课,应该把板书和计算机辅助教学很好地结合起来才能真正达到好的教学目的和效果。
3总结
在教学活动中,教师是教学过程的主导者,教师的教
学经验和方法非常重要,如果能够具有丰富的实践经验,对教学工作就会如虎添翼,讲授也会更有说服力。学生是学习的主体,他们对知识掌握的情况就是对教师工作的最好检验。但教学效果的好坏更主要取决于学生对课程的兴趣和主动性,在教学和实践过程充分发挥教师的引导作用保持学生的信心和积极性是一个重要因素。作为青年教师,应多向老教师学习,使教学过程更加通俗易懂,贴近生活。
“数据结构”是计算机专业的骨干、核心课程,是计算机程序设计和算法的重要理论基础课,学好这门课程对学生来说是至关重要的。因此,对于该课程的教学不仅要从理论上进行探讨,还要从内容结构、教学方法等方面进行研究。本文就实际教学中遇到的几个问题从教学方法、内容组织以及考试考核等方面提出了建议和对策,希望同行共同讨论。
参考文献:
[1] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,1997.
[2] 殷人昆. 数据结构(用面向对象方法与C++语言描述)[M]. 北京:清华大学出版社,2007.