绪论:写作既是个人情感的抒发,也是对学术真理的探索,欢迎阅读由发表云整理的11篇数据结构课程设计总结范文,希望它们能为您的写作提供参考和启发。
数据结构是计算机专业的核心课程之一,是计算机软件技术的基础,以数据为中心讲述问题如何在计算机程序中得以实现。该课程的教学不仅要注重学生对理论知识的理解,更要培养学生能针对具体问题,设计合理的数据结构,对数据进行有效的存储、操作,并能完成相应的高效算法。课程设计的教学是整个教学环节中非常重要的一环,它弥补了课堂教学中实践少的缺陷,其教学目标不仅要培养学生缜密的逻辑思维和数据抽象能力,更要培养学生在软件设计领域科学的思维方式,将算法理论和编程实践完美结合,能够在工程实际中灵活应用。因此不断改进课程设计的教学方法,提高教学质量是培养高素质软件人才的迫切要求。
1存在的普遍问题
1.1编程语言基础差
数据结构课程设计通常是在大二进行,算法是基于C/C++语言。虽然学生之前已先修过这些课程,但C++本身规则复杂,面向对象的思想不容易掌握,而学生又没有经过系统训练,普遍存在编程语言基础薄弱、对调试程序的方法不够熟练、程序结构设置不合理、代码编写可读性差等问题。不少同学反映算法能听懂,看教师演示一些实例也觉得简单,但轮到自己编程就无从下手。这种状况直接制约了学生完成课程设计的质量[1]。
1.2缺乏系统的软件开发思想
计算机专业的课程体系中,软件工程通常安排在数据结构课程设计之后,这样学生在进行课程设计时,尚不具备软件开发的思想。遇到问题时,只考虑怎么实现,没有进行整体软件开发的过程规划,忽视了软件的性能、质量、甚至于需求都不甚明确就急于动手编写程序。这样的做法使得课程设计的完成效率很低,经常需要返工。
1.3教师的指导“过多”或“过少”
课程设计中,教师的指导相当重要,但是目前存在两个极端,有的教师对每个课程设计都讲解得面面俱到,如何实现,用什么样的存储结构,所得结果等都作了交代,学生只是被动的接收者,这种“填鸭式”的教学方式制约了学生的创新能力。而另一个极端,有的教师认为课程设计是由学生上机完成的,教师督促学生,最后给出考评,对学生完成课程设计的过程关注太少,很多学生因此敷衍了事。教师如何把握指导的度,如何指导是学生能力能否得到提高的一个重要因素[2]。
1.4考评制度不合理
长期以来,课程设计报告被看成是评定学生成绩的一个重要依据,而对学生软件开发的过程关注不多,学生只要上交了报告就能获得成绩[3]。这样的做法导致学生过度追求报告的整洁度、实验结果的正确性等。甚至部分同学抄袭、直接从互联网上下载报告交差。一个学期下来,除了交了几份报告,学生的收获甚少,课程设计教学效果甚微。因此,必须改革考评制度,才能真正培养学生的动手能力、创新能力。
2提高课程设计教学效果的措施
2.1规范软件开发的过程,培养良好的编程习惯
在学生开始课程设计前,教师首先通过一个具体的实例,从需求分析、概要设计、详细设计、编程测试等各个方面出发,让学生了解完整的开发软件过程。在数据结构课程教学中,所有算法均用可运行程序讲解,避免出现懂算法不懂编程的现象。有意识地让学生强化编程的技巧、调试方法、面向对象思想等内容。
我院数据结构课程组教师采用面向对象的思想,将数据结构中基本算法全部用C++模板类实现,学生通过多看、多读这些规范的程序,取得了不小进步。
2.2梯度命题,循序渐进开展课程设计
课程设计以往是教师根据实验指导书布置课题后由学生完成,部分学生感到难度很大,无从下手。现阶段我们将课程设计改为验证型、验证设计型、设计应用型多种层次,针对各种基本数据结构,教师首先用模板类实现,学生在课程设计时先用实例验证程序,在此基础上,设计出预留的一些函数接口,实现该类的部分功能。最后再针对某一具体问题,由学生开发出完整的程序。这是一个由易入难的循序渐进的过程,学生通过验证型实验更加牢固掌握基本数据结构,再由验证设计型和设计应用型实验学会如何应用数据结构,如何在计算机中实现存储,实现各种需求的功能。
下面以二叉树部分内容为例,首先实现二叉树的模板类如下:
/*二叉树类*/
template
class BinaryTree
{
public:
BinaryTree():m_root(NULL){} /*构造函数*/
~BinaryTree()//析构函数
/*按以先序次序输入结点值的方式建立二叉树的接口函数*/
void Create1(ElemType ch[],const ElemType &endChar);
/*以二叉树的先序和中序次序建立二叉树的接口函数*/
void Create2(ElemType ch1[],ElemType ch2[],int );
/*先序递归遍历二叉树的接口函数*/
void PreorderTraverse (void (*visit)(const ElemType &));
/*中序递归遍历二叉树的接口函数*/
void InorderTraverse (void (*visit)(const ElemType &));
/*后序递归遍历二叉树的接口函数*/
void PostorderTraverse (void (*visit)(const ElemType &));
……
private:
BTNode *m_root;
/*按先序次序输入结点值的方式建立二叉树*/
void _Create1(BTNode* &,ElemType ch[],const ElemType &,int &);
/*已知二叉树的先序遍历次序及中序遍历次序,建立二叉树*/
void _Create2(BTNode * &,ElemType ch1[], ElemType ch2[],int ,int ,int &);
/*先序递归遍历二叉树*/
void _PreorderTraverse(BTNode* ,void (*visit) (const ElemType &e));
……
};
对于这样的模板类,设定的验证型实验为:给定一棵二叉树,验证其先序中序和后序遍历结果。在掌握了二叉树遍历的基础上,设计出模板类中预留的两个接口函数create1和create2。最后,安排设计型实验为创建表达式树;分别用三种遍历方式遍历该树,比较它与实际的波兰式、中缀式和逆波兰式之间的区别;完成给定表达式树的表达式求值运算。这样有梯度地安排课程设计,一方面强化了基本概念,另一方面引导学生完成更复杂的设计。对基础薄弱的同学来说,验证型实验难度不大,基本都能完成,大大增强了自信;对优秀学生来说,挑战设计型实验更能提高自身的能力。
2.3抽丝剥茧,层层深入启发
学生遇到复杂问题时,往往一筹莫展,不知如何下手。教师应教会学生如何从问题本身出发,层层分析,应采用哪种数据结构,用到什么样的操作,在这样的操作需求下应用何种存储方法比较合适,最后细化到具体的函数实现。
如教学计划编制问题[4],要求根据课程和课程之间的先修关系,得到合适的教学计划安排。首先分析这个问题是对有向图进行拓扑排序,课程和课程之间的先修关系可用有向图描述出来。数据结构为有向图,存储方式为邻接表,应用的操作是拓扑排序。拓扑排序的基本思想是先输出有向图中入度为零的顶点,再从图中删除该顶点和所有以它为尾的弧,重复执行,直至图中所有顶点均输出为止。要完成拓扑排序,首先要求出图中所有顶点的入度。拓扑排序算法中还用到了一个辅助的数据结构栈,因此还需要初始化栈、出栈,入栈,判定栈空等操作实现。这样层层分析下来,程序中需要的函数一一明了:创建有向图、邻接表的建立、求顶点入度、初始化栈、出栈、入栈、判定栈空、拓扑排序等。函数层次关系图示如图1所示。
图1函数层次关系图
通过这样的教学方式,学生学会了带着问题去思考,逐步学会将大的程序化解成若干小函数,最终经过整合完成整个设计开发。
2.4加强团队合作,调动每位同学积极性
在课程设计中,针对每一种数据结构安排了一个工程性综合实验,这个综合实验由几名同学组成小组合作完成。团队成员分工明确,一名同学担任组长,负责组织和控制组内的工作进程,强调任务落实到组内每一个同学。
教师布置任务后,每个团队将软件开发流程应用到课程设计中,实质性进行问题规划、模块划分、项目整合等工作。只有团队中每个成员都积极面对,整个团队才能获得优秀成绩,无形之中鞭笞每位同学认真对待。在一个团队中,大家集思广益,可以跟伙伴一起交流,互相学习,形成共同进步的良好局面。
最后在验收答辩时,团队中每个成员都应汇报自己所做工作,教师和其他团队可以提问,交流开发过程中的心得。
2.5改革考评制度,从多角度综合考虑成绩
合理的考评制度可以对课程设计过程进行有效的监控,通过考评体系可以反馈各阶段的进展情况,便于总结经验,找出不足,保证课程设计的质量和效果。课程设计考评有别于普通的课程评分,我分院数据结构课程设计的成绩由几个方面综合决定:课程设计的内容、课程设计的实现以及实验报告。各项考评指标均有一定的权重,能够比较客观公正地确定学生成绩。其中课程设计的内容主要考虑学生所选课题的难易度、工作量多少。实现过程主要考虑完成情况、软件代码规范化、文档规范化、答辩质量等,最后由学生提交设计报告进行总结和讨论。设计报告除了包括常规的系统需求分析,概要设计,详细设计,调试分析和实验结果外,还鼓励他们提出优化方案,对于每个课程设计再“多想一点”,即其他可能存在的求解方法,如已经使用了链式存储结构实现,那使用顺序存储结构如何实现?各种设计的优缺点是什么?如何提高时间空间性能?通过总结,学生对问题有了更加深入全面的理解,锻炼了扩散思维方式,培养了创新能力。同时教师对评价优秀的学生或团队给与奖励,促使学生之间形成你追我赶的良好学习氛围,整体提高教学质量。
3结语
数据结构作为计算机专业的重要基础课程之一,对学生软件开发习惯的培养至关重要。提高课程设计教学质量不仅可以巩固基本知识,还可以让学生适应快速发展的软件开发技术,激发学生学习和研究的兴趣。本文从五个方面讨论了提高课程设计教学质量的措施,通过一个学期的教学实践,从效果上来看,这届学生分析问题、解决问题的能力,综合创新能力,学习积极性都比前几届学生有了明显提高,绝大部分的同学都能顺利完成课程设计并获得较好成绩,这为他们后续的课程打下了坚实的基础。
参考文献:
[1] 庞晓琼. 案例驱动的数据结构课程设计教学改革实践[J]. 计算机教育,2009(1):53-64.
[2] 陈越,何钦铭,冯雁.“数据结构”综合性课程设计教学探索与实践[J]. 计算机教育,2008(8):54-55.
[3] 李群,赵玉霞,庄波.《数据结构》实验课程设计与探讨[J]. 中国现代教育装备,2007(3):27-28.
[4] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2006:180-182.
Discussion and Practice on Improving Teaching Quality of Data Structure Course Design
XU Chong, WANG Libo, JIANG Juan
(College of Computer Science, Hangzhou Dianzi University, Hangzhou 310018, China)
摘要:结合高等教育心理学中的学习迁移理论,对数据结构课程设计的教学进行了思考与教学实践。文章针对数据结构课程设计的教学目标制定、设计题目设计、考核方式等各个环节的特点与问题,阐述了学习迁移理论对数据结构课程设计的指导作用;在此基础上给出了所制定的课程设计题目及一些有代表性的学生作品欣赏;对课程设计与课程实验的区别进行了论述。对今后数据结构课程设计教学具有很好的参考和借鉴价值。
关键词 :学习迁移;课程设计;题目设计;作品欣赏
基金项目:北京林业大学2011年“虚拟现实技术”精品课程建设项目;2014年北京林业大学微课建设项目“计算机动画原理与技术”。
第一作者简介:杨猛,男,讲师,研究方向为计算机应用技术,yangmeng@bjfu.edu.cn。
0 引言
数据结构[1]是北京林业大学信息学院的计算机科学与技术、数字媒体艺术、信息管理与信息系统等专业的一门重要专业基础课,也是必修课。它的总学时为64学时,其中理论授课48学时,实验16学时,课程设计(实习)一周,通常安排在第3学期或者第4学期开课。数据结构也是软件开发与设计、计算机算法研究与实现等课程的基础,其主要内容包括线性表、栈和队列、串、数组和广义表、树、图、查找算法和排序算法等。数据结构课程设计通常是在数据结构的授课环节以及实验环节之后,单独安排学生用大约一周的时间来完成一个较大的作业,以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。
学习迁移一般是指学习者已有的知识经验、技能等对另一种学习的影响。学习迁移是知识学习过程中普遍存在的。由数据结构课程实验到课程设计,是对数据结构基础知识到综合能力的一种自然过渡,这个过渡即为学习迁移。学生在课程学习过程中,如果能够很好地应用学习迁移,将有利于完善知识结构,收到举一反三、触类旁通的良好学习效果。可见,从数据结构基础知识到数据结构课程设计能力培养,是一种学习迁移的过程。因而,在课程设计的教学实施过程中,学习迁移理论对提高教师的授课质量和学生的学习效果起着非常重要的作用。
笔者对学习迁移基本理论进行了分析,并结合其在数据结构课程设计的实际教学实施过程中的体现,阐述了如何有效应用学习迁移理论来提高授课质量和学生的学习效率。
1 学习迁移基本理论
学习迁移是指一种学习中学得的经验对另一种学习的影响。迁移的基本过程是一个概括出新旧学习本质特征的过程。它是学习者运用已有的认知经验和技能,在对新的学习内容进行分析概括的基础上实现的。学习迁移有顺向和逆向两种,先前学习对后来学习的影响称为顺向迁移,反之则为逆向迁移。不论顺向迁移还是逆向迁移,都有正负之分。正迁移指一种学习对另一种学习起促进作用,反之起阻碍作用则为负迁移。按照迁移的方向来划分,可以分为水平迁移和垂直迁移。水平迁移指已习得的概念、规则或解决问题的方法等在同一抽象概括层次的新情境中的运用;垂直迁移指低级概念和规则向高级概念和规则的迁移。学习迁移理论主要包括以下几种[2]。
(1)形式训练理论。该学说以官能心理学为理论依据,认为通过一定的训练,可以发展心的官能,从而将其转移到其他学习上去。
(2)相同要素理论。该理论认为原先的学习能够迁移到新的学习中去的前提条件是两种学习情境有相同的要素。并且相同要素越多,迁移的程度越高。
(3)泛化理论。泛化理论是指将在一种情境中得到的经验进行“泛化”并运用到另一种情境中去。因此在教学过程中,为使学生能够掌握学习迁移,应该让学生学会思考泛化。
(4)转化理论。支持该理论的心理学家认为学习迁移实际上是一个关系转化的问题。产生迁移的原因,是由于两者之间存在着相同的关系。我们平时强调通过理解而不是机械记忆来学习是因为理解可以转化到各种情境中去,减少知识的错误运用。
(5)学习定势理论。该理论指出迁移取决于通过练习而获得的定势或学习能力。通过练习某一种学习问题,可以帮助解决另一种不同的问题。
(6)认知迁移理论。该理论认为迁移的可能性取决于在记忆搜寻过程中遇到相关信息或技能的可能性。所以,如何增加学生在面临实际问题时提取所学知识的可能性尤为重要。提取的可能性与交互联结的数量直接有关,所以任何增加交互联结网络的“丰富性”的教育方法,对增加迁移的可能性均是有利的。
2 基于学习迁移理论指导的数据结构课程设计
依据前面对学习迁移基本理论的分析,以下将结合数据结构课程设计在教学目标、教学内容与基本要求、题目设计、考核方式以及学生作品欣赏等各个环节的特点与问题,阐述学习迁移理论对数据结构课程设计的指导作用。
2.1 课程设计教学目标
2.1.1 教学目标
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。根据形式训练理论的观点,学习技能的掌握是经过反复训练达到的,学生对知识的理解程度和技能的熟练程度越高,正迁移的可能性越大。因此实践教学环节非常重要。通过课程设计,一方面,使学生学会综合分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,并初步了解对算法的时间分析和空间分析技术;另一方面,通过课程设计中的算法设计和上机实践的训练,培养学生全面的数据抽象能力、综合的程序设计能力等。通过此次课程设计主要达到如下目的。
(1)了解并掌握数据结构与算法的设计方法,掌握数组、链表、队列、堆栈、树、图、查找、排序等基本数据结构,具备初步的独立分析和设计能力。
(2)初步掌握软件开发过程[3]的问题分析、系统设计、程序编码、测试等基本方法和技能。
(3)提高独立分析和解决问题的能力。
(4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
2.1.2 教学实验中的迁移
教学实验[4]侧重于帮助学生详细理解相应章节的知识点,具有针对性强、目的明确等特点。同时帮助学生树立起动手编程的信心,逐步提高学生对该章节所涉及算法的理解与动手能力。这是由基础理论知识到编程实践的一种迁移,是正迁移。我们以实验1(基于线性表的学生信息管理)为例,该实验要求学生重点掌握线性表的定义与线性表的基本操作,如建立、查找、插入和删除等。其实验内容详细地介绍了需要实现的每一个功能。同时,为了使动手能力差、基础薄弱的学生也能快速地掌握编程技术,教学实验通常会给出一些代码不完整的参考程序供他们参考,只需添加需要实验的线性表功能的代码即可。这样,使学生能够对前面学习过的理论知识的理解更加清晰、深刻,有利于学生扎实地掌握理论知识。可见,这是后面编程实践所获得的经验对前面所学理论知识的一种迁移,是逆迁移。按照泛化理论,我们需要把一种情境中得到的经验进行“泛化”并运用到另一种情境中去,应该让学生学会思考泛化。为此,为了满足编程能力强的学生的需求,实验要求中除了必做题目外,还安排了选作内容供他们选择实现,充分调动不同能力的学生的编程积极性。
与教学实验不同,数据结构课程设计强调的是学生综合运用知识点与基础算法,设计出较为复杂的用来解决实际问题的算法。题目要求往往只是提出对课程设计题目的描述,而非一条一条的具体功能,这就要求学生具有一定的分析问题的能力和学习迁移的能力,综合运用所学知识解决题目中所描述的问题。所以,课程设计强调培养学生综合运用知识来分析问题、解决问题的能力,这也是泛化理论的体现。
总之,课程设计的目标[5]是使学生能将数据结构课程中所学的基本知识融会贯通,综合运用所学的知识解决相关的实际问题,能够把所学知识(包括算法和结构)在计算机上用编程语言加以实现,并且能够根据实际需求创建自己的数据结构和实现自己的算法。而学习迁移是实现这一目标的有效途径。只有在掌握好基础理论知识的基础上学会迁移,才能更好地解决问题、达成目标。
2.2 课程设计的内容及基本要求
合理安排课程设计的内容才能充分发挥其迁移的功效。从学习迁移的角度来说,合理安排课程设计的内容的标准就是使课程设计内容与课堂教学内容具有一定的关联性和一致性,这有助于学生在做课程设计的过程中巩固课堂所学知识,加深对知识的理解,重构教学内容的结构,为知识迁移提供很好的支撑。
课程设计的内容既要遵循基本的授课内容,又要从一定的高度上对基本内容进行抽象与发展,使之能够真实、准确地反映出由基础知识到综合运用能力的迁移过程。因而本文中课程设计的内容主要包括:①设计准备:理解实习任务,明确相关算法,搜集可用资源,熟悉实习环境。②方案设计:完成设计目标、设计路线的确定,并进行模块设计和任务分工。③代码编写:各模块代码编写、模块测试。④代码测试:模块组装、整体测试。⑤设计报告:完成设计文档,制作设计报告。
为了保证综合、灵活运用基础知识的迁移效果,课程设计有如下基本要求:首先,学生应该独立思考、独立完成。在课程设计过程中各任务的设计和调试要求小组独立完成,遇到问题可以讨论,但不可以拷贝。其次,要做好上机准备。每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。再次,按照课程设计的具体要求建立功能模块,每个模块要求按照以下几个内容认真完成,包括需求分析、概要设计、详细设计、调试分析、课程设计总结。最后,课程设计结束后需要对课程设计结果进行检查和演示,并提交程序源代码和文档文件、课程设计报告等内容。
课程设计过程中的编程环节是从程序设计语言课程到数据结构课程的另外一种重要的知识迁移,需要用面向程序或者面向对象的思想来完成数据结构中线性表等基本的结构定义以及操作。本文中课程设计需要重点注意的事项有:①注意备份源文件;②不要轻易删除代码,如需要修改,最好用注释方法来代替删除;③熟悉常用的调试技巧。
2.3 课程设计题目设计
为了促进学生正迁移学习,教师要科学合理地设计课设的题目,要建立在学生主动、适度、适量、适时且形式多样化的基础上, 引导学生综合利用所学知识和经验,深入思考分析问题,学以致用。按照形式训练理论,我们需要通过一定的训练进而发展学生心的官能,从而将其前面所学知识转移到其他学习上去。为此,通过教学实验内容的训练,我们已经训练了学生在基础理论与基础编程中的能力,这些经验为先前知识的转移打下了坚实的基础。按照泛化理论,我们将在一种情境中得到的经验进行“泛化”并运用到另一种情境中去,需要让学生学会思考泛化。为此,与教学实验的细化要求不同,我们所设计的课程设计题目主要是给出题目要求的概括性描述,之后是一些要求与提示,还会有一些对题目中个别语句的解释,但不会给出参考的代码,全凭学生自己的知识组成以及算法设计来完成题目要求。我们从泛化理论出发,2011级数字媒体艺术专业的课程设计共8个题目,其中题目1~7具体给出所做题目的描述,同时为了发挥学生的学习积极性,允许学生自拟题目,给学生一定的自由发挥的空间,但是需要教师对自拟题目的难度以及实验小组的组成进行一定的把关。
2.4 课程设计成绩评定体系
课程设计成绩评定体系是对学习迁移理论在课程设计中应用的成果的一个重要体现,因而需要我们更客观、更公平地评价学生的实习成果。为了避免片面的评价,本文中课程设计将综合考虑小组成员各自完成的任务与工作态度情况、机房中源代码系统与PPT的演示与答辩情况、课程设计报告书的质量等,请三位老师分别对上述项目分别打分,最终按照一定的权值进行综合求和。为了体现编程实践、报告在课程设计最终目标中的知识迁移效果,规定源代码演示未通过、未提交报告等情况记为不及格。
3 学习迁移效果展示
学生最终的作品是学习迁移理论应用于课程设计成果的具体体现。课程设计过程中,每个小组对各自的题目进行了深入研究,从基础知识向深度、广度上进行探索与综合,经过团队协作,完成了各自作品。我们选取了3个具有代表性的作品向大家展示。图1展示了某小组学生完成的手机通讯录系统界面,该系统具有大多数其他手机通讯录系统所不具备的动态常用联系人标定功能。图2展示了某小组学生完成的贪吃蛇游戏。该游戏通过MFC设计界面,通过链表组织贪吃蛇的结构,完成了贪吃蛇游戏的功能,但没有处理蛇碰壁的情况。图3展示了某小组学生完成的电梯模拟系统。该题目是学生自选题目,该系统可以自动模拟电梯的不同运行情况,同时考虑了用户请求的优先级问题。自选题目使学生充分发挥自己的主观能动性,更好地将理论知识迁移到综合设计能力上来。
4 课程设计分析
本次课程设计以学习迁移理论为指导,为了调动学生的积极性,并适合不同学生的风格和能力,这次课程设计共出了7个指定题目供学生选择,如果学生有自己的想法,也可以自拟题目,充分发挥学生的主观能动性,同时要求学生以软件工程的要求来实现这次课程设计,从需求分析到概要设计,再到详细设计,最终是调试分析。
从学生最终的作品来看,选择《手机通讯录功能模拟》的学生比较多,其次是《文章编辑系统》,其他题目选择的人数较少,《教学计划编制问题》无人选择。这主要是因为《手机通讯录功能模拟》题目与实验1有很多相似之处,只要对实验1做合理的改动以及扩充,即可完成手机通讯录的功能。从学生课题完成情况看,绝大多数学生完成了课程设计的基本功能要求,一部分学生还综合考虑了用户界面、程序健壮性等因素,课题完成质量较高。数据结构课程设计是在所学基础知识之上,对数据结构的深层次应用,既引导学生深入熟悉编程技巧,又加深对课程知识的理解,这体现了学习迁移的过程。实践证明,这在一定程度上激发了学生的积极性,有效提高了学生的编程能力,使得部分以前不怎么会编程的学生体会到了编程的乐趣。不过,还有一些学生并没有找到自己编程的方法,对数据结构的基本概念不是很清晰。这一方面与学生自身的编程基础较为薄弱有关,另一方面也是需要教师在指导过程中进一步加强基础知识与编程环境之间的联系,引导学生积极主动掌握学习迁移,并且能够针对实验中出现的问题及时进行一些专门讲解。实际情况表明,这次课程设计不但使得学生可以充分了解算法设计,而且能使学生了解软件工程的设计过程,为后续课程的进行提供一个好的开始。同时锻炼了学生的学习迁移能力,对后续学习是非常有利的。
5 结语
数据结构课程设计是综合运用所学的数据结构理论知识与实验实践能力来增强与提高独立分析问题、解决问题的有效手段,如何帮助学生快速、准确地理解并掌握课程的理论知识,是课程设计的目的之一。而学习迁移理论正是这样一种研究先验知识与后续知识之间转换关系的理论,这给数据结构课程尤其是课程设计环节带来了有力的指导。正因为如此,我们将学习迁移理论应用于数据结构课程设计。实验结果表明,这次课程设计比较成功,取得了较好的效果,基本达到了增强数据结构理论与提高编程能力的目的。
参考文献:
[1] 严蔚敏, 李冬梅, 吴伟民. 数据结构(C语言版)[M]. 北京: 人民邮电出版社, 2011.
[2] 施良方. 学习论[M]. 2版. 北京: 人民教育出版社, 2001.
[3] Ivar Jacobson Grady Booch James Rumbaugh. 统一软件开发过程[M]. 周伯生, 冯学民, 樊东平, 译. 北京: 机械工业出版社, 2002.
1 课程的地位与作用
《数据结构》是计算机科学与技术专业的核心专业基础课程,是计算机程序设计的重要理论和实践基础,是计算机理论与技术的重要基石。《数据结构》上承高级语言程序设计,下启算法分析与设计,是计算机科学与技术人才素质框架中的脊梁骨,对学生能力培养至关重要,向来是计算机本科教学的重中之重。调查表明已毕业的学生通过他们的工作实践认为《数据结构》是最有用的课程之一,这也从另一方面说明了该课程的重要性。
计算机科学与技术专业的培养目标之一是掌握计算机科学与技术的基本理论、计算机软/硬件基本知识及应用技术,《数据结构》在培养目标的实现中具有举足轻重的作用,是理解计算机科学与程序开发技术的关键课程。作为一门重要的专业必修课程,《数据结构》课程既是对以往课程的深入和扩展,也是为将来更加深入地学习其他专业课程打下基础。课程中所学习的排序问题的算法,以及基本的树、图等数据结构,是计算机科学的基本功。B+树等高级数据结构,也是数据库、操作系统、编译原理、计算机网络等后续课程的基础。《数据结构》是计算机专业考研的统考课程,也是很多大赛(“蓝桥杯”、ACM等)必涉及的知识。
《数据结构》与其它课程关系如图1所示。
图1 《数据结构》与其它课程关系
《数据结构》在培养目标中的作用如图2所示。
图2 《数据结构》在培养目标中的作用
2 课程的教学目标与主要内容
2.1 课程的教学目标
学习本课程后,应达到下列基本要求:
(1)理解数据结构的基本概念;
(2)熟练掌握线性表、栈、队列、树、图等常用数据结构的基本运算的实现及应用;
(3)熟练掌握排序和查找的常用算法及应用;
(4)能够对算法进行时间复杂度度、空间复杂度的分析;
(5)培养学生分析数据、组织数据的能力,能够根据实际问题来选择合适的数据结构,设计有效的算法。
2.2 教材与主要参考资料
教材
耿国华《数据结构(用C语言描述)》,高等教育出版社,2011年
教材选择的依据:
(1)该教材跟踪技术发展需要,体系科学,是“十一五”国家级规划教材。
(2)该教材理论的阐述由浅入深、通俗易懂。
(3)该教材理论结合实际,配有大量的例题、习题与实习题。
主要参考资料
[1]严蔚敏,吴伟民《数据结构(C语言版)》,清华大学出版社,2006年
[2]张铭,王腾蛟,赵海燕《数据结构与算法》,高等教育出版社,2008年
[3]朱战立《数据结构――使用C语言(第4版)》,电子工业出版社,2009年
[4]王晓东《数据结构(C语言版).》电子工业出版社,2007年
[5]西北大学数据结构精品课程网站
http//:/datastr
[6]北大数据结构与算法课程网站
http:///pkujpk/course/sjjg/
[7]洛阳理工学院数据结构精品课程网站
http//:/sjjg
[8]洛阳理工学院数据结构精品资源共享课程网站
http//:/ds
2.3 知识体系
《数据结构》知识体系可分为分为三大块,如图3所示。
图3 《数据结构》知识体系
数据结构课程的基本知识模块是以数据的逻辑结构为主线,顺序介绍线性结构(线性表、栈、队列、串、数组、广义表)、树形结构、图结构。在介绍每种数据结构时,再讨论其存储结构以及相关的算法。在介绍完基本的数据结构及其存储结构和相关的算法后,介绍了两种常用技术:查找和排序。
3 课程教学内容安排
3.1 课程重点、难点
重点:线性表、栈、队列、二叉树、图典型数据结构的逻辑结构、存储结构和操作的实现方法,各种典型的排序和查找算法思想。
难点:各种数据结构的操作实现和应用
第1章是对数据结构课程的认识,基本概念比较多,概念要讲清楚、准确,第一章要通过丰富的例子讲解如何分析算法时间复杂度,这是贯穿整门课程的内容,也是本课程的一个难点,第2章是整个课程的重要基础,要讲得十分详细,为后面的章节打下良好的基础,第3章的栈与递归的实现是本书的一个难点,要通过例子讲透,并且在第6章还要进一步地讲递归到非递归的转换。第四章内容较简单,而且学生在高级语言程序设计中学习过字符串,因此留给学生自学,也可以培养学生的自学能力。第五章数组和广义表一般讲解即可。第6章的二叉树要详细讲解,第7章的几个关于图的算法较难,要结合例子讲解,第8章中的难点是平衡二叉树的调整和B树,要通过例子把算法的思想讲清楚,使学生能实际操作。第9章要把各种排序的思想、特点讲清楚,特别是较难的希尔排序、快速排序、堆排序、基数排序一定要结合实例讲解。
3.2 课时分配
表1 总课时:72;理论授课:58,实验:14
4 课程实践环节
数据结构是与实践紧密结合的课程,学生学习的理论必须经过大量的实践才能更好的掌握,因此必须强化实践教学。数据结构实践分两部分:一部分是随课程进行的实验,另一部分是课程结束后为期一周的课程设计。通过合理、有效地设计上机题目,改进实验考核方式,调动学生的积极性,启发引导学生掌握基础理论并能创新应用,增强学生综合运用有关知识的能力。
实验内容包括六个实验项目,分别为:线性表的基本操作(2学时),栈的基本操作(2学时),队列的基本操作(2学时),二叉树的建立及遍历(2学时),图的遍历的实现(2学时),宿舍管理查询系统(4学时)。其中宿舍管理查询系统实验为三性实验。
课程设计是课程结束后进行的很重要的实践环节,本课程课程设计给出14个题目,这些题目都是综合性的,学生可任选一题,完成后要写出课程设计报告。通过课程设计,使学生进一步理解和掌握所学各种基本知识,培养学生综合运用所学的理论知识和方法独立分析和解决问题的能力;训练学生用系统的观点和软件开发一般规范进行软件开发,使学生具备软件工作者所应具备的科学的工作方法和作风。
学生完成实验后,不仅要求学生提交高质量的规范的实验报告,还要引导学生互相交流,开阔视野。好的实验作业要放到班级公共邮箱里和所有学生共享。
5 课程的建设情况
5.1 课程资源情况
该课程教学文件完备。通过多年的教学,积累了必要的一些辅助教学资料(包括教学参考书、参考课件、声像、影像等),并且使用效果良好。补充的学习资料有:
(1)教学网站:http:///sjjg/
http:///ds/
(2)搜集了大量探讨数据结构理论与算法、介绍学科前沿动态的中、英文学术论文和硕、博论文,对其分类整理后在课程教学网站上提供下载链接,以供学生深入研究、学习;
(3)自编《数据结构实验指导书》;
(4)多媒体电子教案的纸制版和网络版;
(5)数据结构与课程实验指导书的纸制版和网络版;
(6)自编的算法演示器;
(7)Flash课件和Flash算法演示;
(8)图书馆内,国外优秀的经典教材。
5.2 实验实习条件
所有实验在计算机系机房进行,机房现有的实验平台功能齐全,课程中所涉及的实验项目均可在平台上完成。目前课程实验大纲中所列的实验开出率达到100%,实验教学效果良好。
5.3 课程成果
该课程2010年被评为河南省级精品课程,2012河南省级精品资源课程。
6 教学设计
《数据结构》是一门理论与实践相结合的课程。由于理论的抽象性,学生难以建立起数据结构的相应算法概念,容易产生畏惧和茫然的情绪。因此教学中在积极引导学生、启发学生,激发学生学习的积极性。教学以课堂讲授为主,同时借助网络教学平台,拓展课堂讲授的相关知识,便于同学自主学习、巩固课堂所学内容。另外,组织独立习题课,针对学生作业中出现的典型问题进行深入探讨。
在教学中要贯彻“以理论学习为主线,以课程实验、课程设计为补充”的教学思想。
6.1 精心组织教学内容
分析学生的需求和现实,同时紧紧抓住教学目的,参考相关院校的教材和教学计划,取长补短,参考考研大纲、软考大纲,对课程的内容进行严格的筛选,删除一些较深且应用不是很广泛的内容,对于重点的内容要精讲、细讲,而对于有些较简单且与先修课程交叉的内容(如字符串与数组),就粗讲,甚至可以留给学生去自学。这样重点突出,简洁明了。在课程内容的安排上由浅入深,循序渐进。对每种数据结构都按三个层次来组织教学内容,并且把这三个层次的思想贯穿于数据结构教学的各个环节。第一个层次,基本概念、方法,这是最基本的内容,学生必须掌握,在学生很好地掌握了这个层次的内容后,可进入第二个层次,基本概念、知识的简单应用,这一层次是对基本概念、知识加深理解,这个层次学生必须达到。第三个层次就是基本概念、方法的深入应用,把所学的知识、方法串起来灵活运用。要达到这个层次,需经过大量的训练才行。
6.2 实现数据结构课程与其先修和后续课程的无缝衔接
程序设计语言(如C语言)是本课程的一门非常重要的先修课程,数据库原理、编译原理、操作系统是该课程的后续课程,这些课程不能各自为政,而要无缝衔接,教这些课程的老师要互相交流,这样在讲程序设计语言时可以有的放矢的把和数据结构联系紧密的内容预先告知学生,这样学生就会对相关知识印象深刻,到数据结构课中就很容易用的得心应手。在数据结构课中讲到各种后续课程中用到的数据结构时也告诉学生,并且在后续课程中用到相关数据结构时提醒学生这是这种数据结构在本课程中的应用。这样使学生的知识一脉相承,使学生在学习各门课程时把知识融会贯通。
6.3 精讲多练,加强实践环节,培养学生分析问题解决问题的能力
数据结构既有大量的理论又是实践性很强的课程,学生要很好地掌握这门课,必须要有一定的理论知识,又要经过大量的上机实践。因此,针对应用型本科的特点,在教学过程中,即注重理论,又重视实践,加大上机实践的力度。实践由与理论课同时进行的上机实验和理论课讲授完毕后的课程设计两部分组成。对所学的每一部分内容都要要求学生完成相应的实验习题。整个实践过程要结合教学进度与学生的实际情况,制定实践的内容。每部分的实验习题必须精心挑选,和上述三个层次对应,分为基础与验证型实验、设计与综合型实验,开发与创新型实验。既要把基本知识掌握好,又要会灵活运用。基础与验证型实验是基本的、较简单的题目,主要结合课堂理论教学内容展开,学生可以对在课堂上学到的基本算法进行验证;设计与综合型实验是具有挑战性的较难的新颖有趣的题目,让学生充分利用所学的理论知识进行相对较复杂的应用设计,培养学生综合能力;开发与创新型实验培养学生的创新意识,提高综合能力和创新实践能力。
6.4 多样化的教学方法
6.4.1 启发式教学
教师主要起引导的作用,激发学生的学习兴趣,发挥学生的学习积极性,与学生进行互动,鼓励学生对教学内容提出问题,师生共同讨论,提高教学和学习水平。鼓励学生多动脑子进行思考,在学习过程中不拘于以往的解法,对同一个问题可以提出不同的解法,深化对问题的理解。另外还要强调学生自己学会对知识的总结、梳理、推演和挖掘。总结是教学中一个非常重要的环节,不可忽视。通过对所学内容的总结、梳理、推演和挖掘,理清内容的内在联系,使知识条理化、系统化,加强对知识的理解和掌握,培养学生的归纳总结能力和思维创造能力,对所学内容提炼出精华的东西。(下转第260页)
(上接第167页)6.4.2 对比式教学
对同一问题,引导学生从不同的角度去思考,找出多种方法来解决。比如,在解决约瑟夫环问题时,可以采用循环链表作存储结构,或采用线性表的顺序存储结构,也可以采用数组作存储结构。这种对同一问题寻找不同算法实现的教学方式,有效地开阔了学生的思路,同时通过对不同算法的比较,加深了学生对算法的理解和掌握。
6.4.3案例教学
通过实例引入知识点。比如讲最小生成树可以通过城市间建立通信联络网为例引入最小生成树及其求解算法,再比如讲最短路径可以通过去旅游选择最短路径为例引入最短路径及其求解方法。
6.5 把课程与考研、软考、相关竞赛有机的结合起来
数据结构是计算机专业考研和软考的必考科目,在教学过程中有意识地把考研和软考引入教学中,使学生学完本课程后能够从容应对考研和软考中的数据结构题目。组织和鼓励学生参加程序员,高级程序员证书考试,辅导学生参加各种编程竞赛比如ACM大赛。
7 考核方法
要加强平时的学习过程管理,不定时地进行一些随堂的小测试,课堂提问等。考试以学生完成日常作业和实验环节为必要条件,期末考试采用笔试方式。成绩评定由三部分组成:期末考试占总成绩的60%,平时成绩占总成绩的20%,实验占总成绩的20%,综合考核学生该科成绩。
8 结语
《数据结构》对计算机科学与技术专业的学生来说是非常重要的课程,组织好教学,使学生通过该课程的教学,很好地掌握数据结构的相关知识,为今后的学习奠定良好的基础是非常重要的。
MU Cui-xia
(China Women’s University, Beijing 100101, China)
Abstract:On the basis of analyzing the present status of the practice teaching of data structures in China Women’s University, the teaching reform and adjustment measures for the practical teaching in recent years are introduced. And the key points of future reform are pointed out..
Key words:Data Structures; practice teaching; hierarchical teaching; Micro-Course Video
1 引言
数据结构课程是计算机科学与技术专业的专业基础课和核心课,也是计算机程序设计的重要理论和实践基础,其学习效果直接影响到学生的数据抽象能力和程序设计能力[1]。数据结构实践课与理论课相辅相成,是学生验证、掌握和应用数据结构理论的重要途径[2]。,但是课程特点、学生的整体素质水平和基本程序设计能力等多因素影响了实践教学进度和效果,进而影响了整个课程的教学效果。
2 数据结构实践教学现状
1)首先,要客观地认识到,不同层次高校的学生整体素质,尤其是学习能力确实存在一定差距。只有坦然地承认差距,才能认真、耐心地了解学生学习过程中的困难和需求,才能坦然地采取一些虽不够“高大上”,却符合教学对象实际情况的教学措施,从而实实在在地提高教学质量。
2)数据结构教学是在第3学期,学生在第2学期刚学完C程序设计基础。但学生在C程序设计基础课程中主要学习和接触的是简单数据类型和单个函数程序,侧重于基本语法学习,而对数据结构实践中大量用到的头文件、结构体、指针、递归、多个函数的定义调用及在主函数里测试等实践得相对少,理解较浅。因而对于数据结构课程,不少学生觉得上课能听懂,上机时无从下手或者程序错误很多。
3)传统的数据结构实践教学形式,教师布置实验任务,适当指导,学生独立完成,然后由教师验收。这种方法的优点是能够充分发挥学生在算法设计方面的主观能动性,不足是数据结构设计和程序设计的难度较大,学生可能会感到无从下手,教师进行指导难度较大,实践进度和效果不好控制[2-3]。
4)教材的选择上,最初选择了大部分高校采用的经典教材严蔚敏C语言版,也是考虑到考研参考书目需求。在教学过程中,也发现教材不适合我们学生的实际情况,比如类C的算法描述,使得程序设计思想和实践能力还不太成熟的学生在理解上有困难,在实践时觉得难以开始[4]。
5)另外,新实施的教学计划中课时减少也是一大挑战,需要对理论教学内容和实践内容进行调整,首先抓好数据结构的基本和重点内容,而不能面面俱到。
3 数据结构实践教学改革和调整措施
在具体分析数据结构实践教学现状的基础上,可增设C程序课程设计,加强基础知识实践要求,调整课程大作业安排,发掘贴近实际案例和知识背后的故事,灵活运用微课等措施,进一步增强学生实践积极性,提高实践教学质量。
3.1增设C程序课程设计环节,弥补课程衔接问题
为了进一步提高学生动手编程实践能力,一定程度上解决因学生基础薄弱导致的课程衔接问题,可增设两周共16学时的C程序课程设计。
在数据结构学习中,学生觉得在理论课上算法思想能听明白,一到上机就感觉无从下手;觉得代码出错误时,调试修改难。这说明三方面有待加强:一是从分析问题到给出解决问题算法步骤的能力,二是从理清算法步骤对应到编写源代码的能力,三是程序调试实践能力。因此,在此课程设计环节中要加强问题分析训练,根据给出的问题,分析出解决的主要思路,进而给出细化的伪代码或者流程图。要加强编码和调试训练,学生根据细化流程图编写出源代码,调试测试程序。因此,教学中采取具体改革措施如下:
1)时间和内容安排:在第3学期的前两周,开展C程序课程设计,数据结构从第3周开始。结合多年来的教学经验,针对学生上学期C程序设计实践的薄弱点和数据结构实践的具体需要,专门编写了课程设计指导书。为了进一步强化学生编码规范,指导书中给出了明确的代码书写要求和编码原则,在实践过程中进行督促并纳入考核点。为了让学生复习和掌握基础的知识要点,并能灵活运用在实践案例中,设计了基础和提高层次的例题和实训题目。在例题中强调算法分析,采用伪代码或者流程图进行算法分析训练,并给出参考源码。在掌握例题的基础上,要求学生独立完成实训题目。涉及的知识要点包括输入输出、常用数据类型和函数、分支结构和循环结构、数组、函数、结构体、指针以及文件等。然后进行分组合作完成一个综合课程设计,让学生从软件开发的角度开始分析问题、解决问题,教师对开发过程进行适当指导。另外,指导书中给出了两个完整案例给学生参考,拓展案例由小到大、由?\入深,使设计的功能越来越完善。指导书努力做到帮助学生从低到高的逐步提高编程和动手能力。
2)实践考核方式:以考核方式引导整个实践过程。考核总成绩由基础练习(例题和实训题)和综合课程设计两部分组成。根据衔接数据结构课程教学需要以及学生的具体学习基础情况,为了最大程度调动学生实践积极性和能动性,基础练习比例从40%逐步调整到70%,课程设计比例从60%调整到30%;从只有综合课程设计答辩,调整为当前的基础练习也进行抽查答辩,答辩内容包括设计思想、代码分析、结果分析、经验体会等,进一步突出基础的重要性。四次共16节课中都明确给出任务清单,并及时了解每次课的任务完成情况,针对具体问题及时集中或者个别指导。考虑到实践内容较多,基础练习答辩一般安排在第2和3周,另外由于跟数据结构内容的连贯性,答辩可适当占用前2周数据结构上机时间和课外时间。但是,综合课程设计的答辩会适当延长到第5周,为了促进分组合作的有效性,每个人对合作都要负责任,采取当天随机抽取一人负责答辩的方式。另外,下一步计划尝试基础练习采取2人一组,共同讨论分析完成,以应对任务多时间短、基础薄弱学生压力大等问题。还将设计细化的课程教学效果调查问卷,深入了解学生需求,调整教学内容和方式等。
3.2在数据结构教学中不断加强基础知识的上机实践要求
考虑到学生的实际情况,在课堂教学中主要采取源码形式来讲解各种结构和算法(线性表、栈、队列、二叉树、查找、排序等)的实现,基础实践就是要求编写函数代码实现并在主函数中测试各种数据结构的基本算法,完成后提交源码即可。为了夯实基础知识,提高基础编程能力,不断调整对基础知识实践的要求,加强对基础知识进行复习的书面作业要求,重要基础知识点都留书面作业,将书面作业成绩计入平时成绩,并提高分值比例,这样可以引导学生重视并加强。然后,将基础知识的实践作业提交情况和抽查答辩情况都计入平时成绩,并调整分值比例。通过期末考试试卷平均成绩能较明显看到重视基础的效果。另外,学生学习基础和能力确实存在差异,明确分层要求哪些是必须掌握的基础,哪些是可以扩展选做的,也是很有必要的[3-4]。
3.3调整课程大作业的安排和要求,让不同基础和能力的同学都能有所收获[3]
在数据结构教学过程中,会有同学疑问,学了数据结构到底有什么用。虽然概论一章曾经讲授过一些实例,但终究不如自己实践体验来得深刻。通过课程大作业,利用掌握的基础知识,实现一个贴近生活的实例,是加深理解和提高能力的有效途径。利用堆栈实现迷宫游戏,很多同学答辩完后表示很有成就感,但也确实经历了克服困难的过程,而这一克服困难逐步解决问题的过程,也正是学生能力提高最快的阶段。但也不可避免地出现了问题,比如基础比较弱的同学,完成基础练习都很吃力,大作业就会觉得太难,最后效果也就不理想。因此,在大作业的难度设置上,首先要考虑大部分同学的能力情况,还可以考虑有适当难度差异的题目供学生选择。同时,如何避免学生趋向选择小难度以及考核公平性,这是需要继续探讨的问题[5]。
这几年教学中,有个思路调整,就是首先夯实基础、抓好主线,在此基础上进行拓展。比如,有学生在大作业答辩过程中,能很清晰表达算法思想、分析代码等,但平时基础练习却做得不好,期末考试成绩也不理想。因此,课程大作业在总成绩中占分比例调整降低。另外,为了满足基础好的同学的学习需求,可以适当提供完整的有趣或者贴近生活的扩展案例代码,进行读代码这种形式的学习,也可提供同学间分享交流机会。
3.4小举措增强学生自信心,提高学习积极性
1)在教学中多从正面引导和肯定,增强学生自信心。如果学生有抵触或者畏难情绪,肯定会影响学生的学习效果。教师在教学中确实需要正视学生的学习基础和能力的现实情况,必须承认不同层次学校的学生之间学习基础和能力差距的存在,才能理直气壮地安排合适的教学内容和方式方法。作为中华女子学院唯一的工科系,较大比例学生不是第一志愿入学计算机专业。经过一年的学习时间,每位学生对计算机专业了解和接受程度不同,大学二年级更是关键的一年。因此,老师在实践教学过程中更需要细致的情绪关怀,及时了解学生在实践过程中碰到问题,给予积极回应或帮助。尤其在学生学习困难或者压力大时,更要理解和尊重,耐心疏解,正面引导,具体指导,多正面肯定每次哪怕小小进步。同时,在教学进度安排上要考虑整体学生情况,抓牢主线夯实基础为先,并注意教学内容的螺旋式进展,这样可以一定程度上减小学生心理压力,进而增强自信心[4]。
2)联系实际应用,,关注技术背后的故事,激发学生学习兴趣。比如,实现了队列的基本操作之后,带着学生一起分析和实现医院就诊排队应用,加深对队列逻辑结构特点的理解以及数据结构在解决较复杂问题中的应用。实现堆栈的基本操作之后,带着学生先玩迷宫游戏,再一起分析利用堆栈如何实现走迷宫。在讲赫夫曼编码前,先引入赫夫曼当初发明赫夫曼编码的背景故事,引起学生的好奇心和求知欲。类似这些小举措却可以激发学生的学习兴趣。
3)一起?I造分享、合作、互助和积极的学习氛围。鼓励学生在实践过程中多讨论,大作业合作完成,遇到困难互相帮助。发现有优化算法的例子,老师及时表扬并让学生跟大家一起分享讨论,从而营造积极的集体学习氛围。
3.5发挥微课在数据结构实践教学中作用
互联网+时代的教育改革,将以学生和学习为中心,创造性地利用信息技术,提高教与学的效率,改善教与学的体验,更好地满足个性化的学习需求。“翻转课堂”模式中,学生在课外通过看视频讲座、阅读功能增强的电子书等形式,自主规划学习内容、学习节奏、风格和呈现知识的方式来完成知识的学习。而在课堂上教师答疑解惑,有更多的时间与每个人交流,学生之间也可以讨论,可以开展知识运用的实验实践等,最大程度地满足学生的个性化学习需要。微课是实现“翻转课堂”教学组织形式的一种常用的课件设计方案,它基于学科的核心知识点设计而成,以短小教学视频为核心的、具有明确教学环节的结构化和微型化在线教学课件。基于微课的翻转课堂教学模式能更好地做到分层教学、因材施教,而且更有利于学生的个性发展。
分析女院计算机专业学生的具体情况,结合数据结构课程本身的特点,完全实现翻转课堂难度极大,但是将微课作为传统课堂的一种延伸和补充,将会更好地满足学生的学习需求,改善教学效果。在算法设计实践过程中,最容易发现学生的不同学习能力和需求,也更适宜开展微课应用,也利于教师不断总结和完善重点和难点的教学方法方式[6-7]。比如稍慢于实践进度的,有疑问可通过微?n进行回顾,自行安排学习和实践进度。快于实践进度的,可通过补充视频自学来加大实践力度,拓展学习和实践内容。
《数据结构》是计算机科学与技术专业的必修课之一,是一门综合性的专业基础课和专业核心课程,而且正逐步发展成为众多理工专业的热门选修课。通过本课程的学习,能使学生熟练掌握如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法的分析和评价等知识。它是学习操作系统、编译原理、数据库原理等计算机专业核心课程的基础,掌握好这门课程的内容,是学习计算机其他相关课程的必备条件。因此,该课程在专业建设的地位十分重要。
《数据结构》课程体系不断发展,传统的教学内容和教学方法已落后于时代的发展和市场经济的需要,作为以应用型本科人才培养为目标的高等学校,如何针对计算机科学与技术专业学生就业难的特点,利用有限的教学课时,让学生接触到较新的理论和技术,同时提高学生对数据结构理论的掌握能力,并且能利用数据结构理论进行实践,培养创新能力和自主学习能力,使学生毕业后能尽快适应就业市场的需要,是一个急待解决的问题。
而当前《数据结构》课程的教学存在以下问题:①教学内容跟不上计算机技术的快速发展,教材没有从理论、抽象和设计三种形态的高度来组织教学内容,理论性强,实践性弱。②教学方法单一,不能使学生掌握本学科系统分析、解决问题的基本科学方法。③教学手段的落后,只通过PPT讲稿向学生讲解教学内容。④教学实践设置侧重于单一知识点的训练,与实际应用脱节。
通过教学改革,以上问题才能得到解决。一方面,使教师教学和教研水平得到提高;另一方面,使学生掌握最新的学科知识及对知识的灵活运用能力及实践动手能力,为将来的进一步深造打下良好的基础,所以《数据结构》课程的教学改革势在必行。
《数据结构》是计算机科学与技术专业的主干课程,遵循应用型本科院校的办学宗旨,不断更新课程内容,改进教学方法,加强学生实践能力和创新能力的培养,从而提高学生素质的教学改革思想,构建课程体系。改革主要分以下几方面:
一、吸取国外教材的优点,对教学大纲内容进行调整
删减必要性不大、陈旧过时的内容,如广义表、多维数组、串的基本内容等,逐步增加了反映学科发展趋势的新内容,如生物信息计算、各类搜索引擎中常用的数据结构和算法等,还增加许多典型的数据结构的算法与应用,如跳表、优先队列、B-树等内容。重新修订现有的教材和教学大纲,保持教学内容具有先进性、科学性。同时考虑到与其他课程的衔接问题,进行双语教学,并且申请校级优秀课,以此促进教学改革的进行。
二、教学方法和手段改革上,采用面向问题求解的教学方法
从科研工作或现实生活中的大量实际问题入手,引导学生主动探求答案的积极性。并依托学校的网络建立《数据结构》教学平台,提供丰富的《数据结构》教学资源,包括高质量的多媒体课件,算法动态演示系统,授课内容,教案,大纲,参考文献,疑问解答等等。全方位地为学生提供学习方便,与学生进行网络互动,学生随时有问题都可以通过网络进行求解,从而极大地吸引了学生的学习兴趣,激发了学生学习的积极性和主动性。
三、建立高素质教师队伍
由于《数据结构》技术发展飞速,建立起一支稳定的、高素质的《数据结构》教师及实验教师队伍,这也是提高《数据结构》实验及理论教学质量的关键,从多个渠道解决了师资缺乏的问题,从而使教师的理论和实践操作水平大大提高。
为了提高教师的指导水平以利于进一步的培养学生的实践动手能力,同时能够使理论课教师通过对实验的掌握更好的讲授和体会理论课的教学,每隔一段课程组开培训和研讨会,讨论课程内容的设置及实验和课程设计的内容安排问题。课程组所有成员积极提出有效合理的改善方案,使课程的发展稳固进行。无论是主讲教师还是实验教师均在讨论中有所提高。同时在讲授有关实验内容时更准确、更有自信,避免了在出现问题时无法解决的尴尬局面,进一步激发学生的学习兴趣,培养了学生应用能力,达到了教学要求,而且对其它课程的教学具有深远的意义。
四、在实践环节教学方面,以创新能力培养为目标,进行实践环节的教学改革
详细分为以下三点:
1.以学生为出发点进行调研选择合适的实验项目
从科研和实际问题选题,编写实验指导书和课程设计指导书,实验增设设计型和综合型的实验内容,通过实践培养学生面向问题求解的能力,如:结合ACM认证进行教学,使学生马上从理论过度到实际应用;讲课过程中的理论,课后布置实际问题作业和学期末布置大作业,让学生利用理论自己解决,编写程序,完成作业。在选择实验内容时重点考虑开设哪些实验,所开设的实验中,哪些是验证性的,哪些是综合性、设计性的;并且对于计算机专业所开设的实验项目要有不同的针对性;针对每个实验确定考核依据和方法以及整个实验课程的考核评分方法;提高学生对《数据结构》理论的动手实验能力。使学生通过实验课程的开设来提高实践能力,实验的设置做到了少开一些验证性的实验,多开一些设计性的、综合性的实验。真正提高了学生的动手能力及技术应用能力。当然,在教学过程中理论课教师与实验课教师应经常相互沟通、相互协调教学内容。
《数据结构》课通常是56学时以上左右,《数据结构》课程的重要性不言而喻。在理论课内容的设置上,不同专业由于学时不同而有所区别。计算机专业的学生不但要掌握线性表,树,图实验,而且还要开设有关表,树,图的综合设计性实验;而软件专业除了掌握上述实验外,对多维数组等内容也要进行实验。通过不同性质的实验设置,催发学生的学习主动性和兴趣,有效地利用《数据结构》资源,帮助学生深人理解和掌握《数据结构》的原理和技术,提高了学生实践和运用数据结构知识的能力,锻炼了学生独立分析解决问题的能力,加强了学生学习的协作精神,从而达到了数据结构课程的教学目标。
2.有良好的实验室条件
除实验室专门配备的实验室指导教师外,课程组教师都在实践环节中进行指导,利用实验室的环境,加上合理的实验题目引导学生积极主动地学习,锻炼学生的动手能力、创新能力及面向问题求解的能力。实验室有专门的实验环境,从实验目的到实验原理,实验步骤都可以从实验环境中得到,有了这些理论基础,学生就可以在此基础上顺利完成各个实验项目。实验中心每天在无课的情况下,全天对学生开放,为学生自主创新提供方便。对不同层次的学生进行不同层次的辅导答疑。实验成绩由程序设计,文档说明组成,课程设计成绩由程序设计、设计作品、报告撰写和答辩表现四部分组成。
3.采用“理论――实验――理论总结” 的方法进行实验内容的讲解
传统计算机课程教学中,理论课与实验课教师为同一人,《数据结构》课程也不例外,经过多次讨论和改革,应设专门的实验老师,在实验课上,主讲老师和实验老师同时指导,方便学生提问,有问题及时解决。无论是授课老师还是实验老师在每次实验课后都要对实验内容和对应的理论内容作出总结,经过理论到实验的总结,授课教师和实验教师对课程的内容有了更加深刻的认识,对以后的教学和实验指导有重要意义。
在长期的《数据结构》课程讲解中,可以积累丰富的教学经验,实行理论课与实验课相剥离的教学方式,并采用“理论-实验-理论总结”的方法进行教学会起到事半功倍的作用。即理论课教师在做实验之前先讲解一次要做的实验项目,可能学生会明白50%~60%的内容;然后再安排专门的实验课教师在做实验时边指导边讲解,这样学生在有了对实验内容的大致了解之后经实验课老师的指导再经亲自动手去完成,大概就可以理解90%;实验结束后理论课教师再对实验中的重点进行总结,对问题加以分析,就可以使学生更好的掌握《数据结构》理论和实验知识,从而加强了《数据结构》实践能力的培养。
4.依据实验过程和书面的《数据结构》实验基础知识进行考核
通过实验过程进行考核,教师重点查看学生对实验中所出现问题的理解或解释,鼓励学生在做每个实验时开动脑筋独立解决问题,而不拘泥于查看学生实验报告的工整性,对解决问题好的可另酌情加分;对于综合性实验或创新性实验,根据学生个人意愿进行分组选题或自选题,重点查看学生如何围绕实验目标来解决问题的思路而不过分拘泥于实验的结果,对完成实验优秀的学生另酌情加分。在期末考核时,既实现了书面的《数据结构》实验基础知识卷面考试,也组织进行专项的实验设计或模拟应用动手考试,围绕教学大纲由师生或聘请有关专业人士一起对实验成果进行分析评定等。
通过改革,对调动学生的积极性、培养学生的综合素质、创新能力、创新意识以及扩大就业机会具有重要的意义,为他们将来进入社会打下良好的基础。《数据结构》课程实践操作能力培养模式的构建,对于普通工科院校尤其是工程类专业提高学生的综合素质和能力,具有一定的参考价值和可借鉴的经验。同时也提高了教师的理论水平、业务素质和科研能力。这种教学方式和方法是一种颇有成效的教学改革。
参考文献:
[1]马艳芳,姜桦.《数据结构》课程教学方法的探讨[J].科技信息.2009
【摘要】数据结构是高职院校计算机专业中一门专业基础课程和核心课程,本文关注了当前《数据结构》课程教学的现状,总结该课程教学中存在的一些不足,并提出了一些见解。
关键词 数据结构;算法;程序设计
1 《数据结构》课程的作用及意义
1968年美国唐纳德·克努特(Donald Ervin Knuth)教授开创了数据结构的最初体系,他所著的《计算机程序设计艺术》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作,是《数据结构》的经典之作。随后,数据结构作为一门独立的课程开始进入大学课堂。
数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。主要内容包括数据的逻辑结构,数据的物理存储结构和对数据的操作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。数据结构是通过对数据的抽象与研究,帮助我们把生活中具体的事物抽象出数学模型,从而帮助我们写出“好”的算法。
数据结构课程与数学、计算机硬件和软件有十分密切的关系,它是介于数学、计算机硬件和计算机软件之间的一门计算机专业的核心课程。伴随计算机应用领域的扩大和软、硬件的发展,非数值计算性问题使得人们越来越重视数据结构,所有的计算机系统软件和应用软件的设计、开发都要用到各种类型的数据结构,已成为高级程序设计语言、操作系统、编译原理、数据库、人工智能、图视学等课程的基础。同时,数据结构技术也广泛应用于信息科学、系统工程、应用数学以及各种工程技术领域。《数据结构》的学习越来越被人们所重视,成为构建计算机类专业群的重要课程。目前,这门课程不仅在本科段开设,同时也是高职高专院校计算机相关专业开设的主要课程之一,许多非计算机专业的理工专业也都将它作为必修课程或热门选修课。
学习数据结构的目的是使学生在软件开发的过程中能够正确、合理地选择数据的存储结构,有效地设计算法,从而提高软件整体质量,既可以为后续课程的学习以及软件设计水平的提高打下良好的基础,也可以培养学生的分析与解决问题能力,提高学生的思维能力和程序设计能力,进而促进学生的综合应用能力和专业素质的提高。
2 《数据结构》课程教学现状
《数据结构》课程具有概念抽象、理论性强、逻辑性强、难度大等特点,它涉及到不同的数据逻辑结构和存储结构,以及相应结构上的算法,因而总被认为是一门深奥、抽象的课程,一门理论性很强、和实践相脱节的课程。学完后不能形成一个完整的知识体系,学生为了考试而学习,而在程序设计的能力上不能得到提高,分析原因主要有以下几点:
2.1 教学目的不够明确
《数据结构》课程本来是以在程序设计过程中总结而得到的数据组织和操作的体验和认识,用于程序设计的指导工作,而当下的教学很大程度上只要求掌握数据结构的几种基本类型和基本操作,期望通过基本数据类型的掌握能够用于指导实际程序设计。这就使得教学过程偏重理论而忽略了本课程的根本目的和意义,导致学生对学习这门课程的作用不够明确。从而使学生感觉课程内容抽象、算法复杂、实用性不强。
因此,学生的学习目的主要变成是为了应付考试,只注重课本上的理论内容,而不去考虑在具体程序设计中如何去使用《数据结构》基本理论来设计和解决具体的问题。在课程设计中,学生只是为完成编程去苦苦思索,而根本就想不到如何去进行数据的有效组织和实现数据的基本操作。很难想象不带问题去学习一门课程,会有很高的学习积极性。
2.2 教学内容不尽合理
学习《数据结构》课程的最终目的是为了使学生获得求解问题的能力,就是从实际问题中抽象出数学模型,选择合适计算机表示的数据结构,再把解决问题的算法程序化,这是一个复杂抽象思维的过程,是一项创造性的智力劳动。但从目前的教学内容来看,强调的是数据结构的各个模型内容,每个模型只是说明模型的结构和模型的计算机实现,在理论描述上力求做到尽善尽美,从内容安排上,各个模型之间表现为相对独立的关系,使得学生在学习过程中不能将课程的内容联贯在一起而形成一个整体,更就谈不上思维训练、分析和解决问题能力的提高了。
而课程安排的实验环节,通常是对所讲述的内容的伪代码翻译成高级语言进行调试,或者是仿造例子依葫芦画瓢地来解决一个简单的问题。没有通过具体应用教会学生解决问题的思路、算法思想和数据结构的使用,在实验中也只能停留在完成课本内容,而对实际问题则是一筹莫展。
2.3 教学方式不够新颖
计算机技术日新月异,程序设计的思想也在不断发展。程序设计方法已从面向过程的设计方法发展到面向对象的程序设计方法。然而目前大部分的数据结构教学方式还是停留在面向过程的设计思路上,所使用的教材也大致类似,教师按照课本的思维方法传授知识,学生被当成听众。这种教学思维严重落后技术发展的的现象制约了教学效果的提高。
教学手段比较单一,依然主要是老师讲,学生听的状况。学生接受的知识局限于教材和老师授课的内容,学生的认知水平被压制,出现能力强的学生不满足,能力弱的学生比较吃力的现象。这种单向的教学方式,不利于《数据结构》课程的学习,对锻炼学生创造和分析问题的能力也无益处。
2.4 学生素质有所制约
必要的数学知识是学好《数据结构》课程的前提。目前,由于高职学生的基础较差,特别是数学基础更加薄弱,这对《数据结构》课程的学习极为不利。另外,《数据结构》课程的教学基本上都是在学过一门或几门程序设计语言(如C语言)的基础上进行的。不少学生对这些程序设计语言课程就没有学好,因此学习《数据结构》课程就觉得困难。再加上学习的积极性不高,学习的目的性不明确,学习习惯不良等,因此学习效果可想而知。
3 方法出路
基于改变上述现状的思考,可以从以下几方面着手:
3.1 整合教学内容
首先从教材的选用上,力求教材版本新、质量高,以防止教材内容滞后。教材内容的编排,要以程序设计的基本原理引领数据结构的内容;教材内容的描述,要以程序设计技术发展相对应的手段,如现阶段可选择面向对象的方法描述;其次要及时把反映学科前沿动态的新成果反映在授课内容里,如数据结构的描述上尽量使用面向对象的方法,描述语言尽量选择目前较为流行的C++、JAVA等语言;再次是教师在授课过程中,对教学内容进行整合,将形似分散的各种数据结构类型通过实例能够组成一个整体。
同样的,实验的内容也应是配合授课内容,对同一项目能够逐步深入,从低效率的程序设计,随着数据结构内容的不断深入,不断完善程序。体会采用不同的数据组织方式,带来不同的程序运行的效率。
3.2 改进教学方法
将学生为主体,教师为主导的教学模式始终贯彻于教学的全过程。采取实例式与研讨式教学相结合的方式,以项目作为切入点,分组组织学生对项目展开讨论,在讨论的过程中发现并提出问题,老师参与学生的讨论并针对问题讲解解决问题所需要的数据结构的知识。这样学生由被动变主动地学习课程内容,既增加了师生之间的互动,也调动了学生学习的主观能动性;同时,学生的发现问题,分析问题、解决问题的思维能力也得到提高。
3.3 加强实践环节
提高学生程序设计的能力是《数据结构》课程的目的之一,实践环节自然必不可少。而且也只有通过实践才能体会到数据结构对程序设计的影响。首先对每一部分的理论内容安排实验内容,既要使学生能够加深对所学内容的理解和应用,也要通过实验让学生逐步提高程序设计的逻辑思维能力,摆脱的单纯的为了解决某个问题而编程的粗放方式。其次是要合理安排课程设计的内容。课程设计是对所学内容的一个综合练习,也是检验学生具体应用所学内容的能力。在题目选择上应考虑学生的知识水平层次,从难度上做到难易结合,由浅入深完成设计内容。关注解决问题中程序设计的过程,规范化程序设计思维。三是剖析讲解典型程序设计中数据结构的具体使用过程,以增加学生对数据结构的实际应用的直观感性认识。
4 结束语
纵观作者数年来的《数据结构》课程的教学实践,仅是根据自己的教学经验和体会,提出了存在的问题,并在实际的教学工作中积极摸索改进方法。经过多年的努力,学生的程序设计能力都得到不同程度的提高,也增强了学生对计算机课程的学习积极性。
参考文献
[1]张红霞.数据结构教程与实践[M].北京理工大学出版社,2006.
中图分类号:G642 文献标识码:A文章编号:1007-9599 (2011) 19-0000-01
"Data Structure" Teaching Reform and Research
Zhang Mingwei
(School of Computer Science&Engineering,Anhui University of Science&Technology,Huainan232001,China)
Abstract:For the course characteristic of"data structure",and combining the prombles which exists in learning this course,the auther introduced the teaching methods and experimental procedure of this course.
Keywords:Data structure;Teaching methods;Practice
一、前言
《数据结构》是计算机专业及相关专业中一门重要的专业基础课程,它涉及的内容和方法在计算机科学中有许多广泛的应用,学好这门课为学生今后从事理论研究、应用开发、技术管理工作提供了坚实的理论基础。数据结构这门课主要研究非数值型数据三方面的问题,一是数据内在逻辑关系,二是数据在计算机内的存储,三是对数据的运算(操作)以及对运算的分析。这三方面问题是紧密联系的,对每一种数据结构都从这三方面来进行梳理,这是数据结构教与学的主线,所以说数据结构是形散而神不散。但该课程具有相当的抽象性,对计算机编程的能力要求也较高。笔者通过长期教学实践不断总结经验,为了解决学生学习中现存问题,从教学方法、教学手段上进行改革,从而提高了教学质量。
二、数据结构学习困难分析
首先是这门课较抽象,内容丰富,学习量大。怎样从现实问题中抽象出三种数据结构即线性结构、树型结构和图型结构,怎样理解非数值型数据的这三种逻辑结构,怎样使抽象的数据逻辑模型转化为物理存储,对应于各种存储上操作怎样实现,这些问题对于初学者来说较抽象,涉及的知识点较多,一时之间难于把握这门课的重点,学生学起来感觉晦涩难懂,久而久之就会丧失学习的信心。
其次是这门课程所用的教材大多是基于C的,那么数据结构的前置课C语言的学习就至关重要,C语言是学生开的第一门程序设计课,由于课时的局限和考虑到学生的接受能力,教师在讲解指针的时候没有深入地讲解,线性链表多局限于简单介绍或者不讲,这就增加了数据结构的教学难度,有的同学理解了某种数据的逻辑结构,也能把逻辑结构映射于物理存储,但是在讲解算法的时候就不明白了,特别是涉及二级指针和结构体的时候。
最后就是教学方法不得当,在教学的过程中以教师为中心,没有很好的与学生互动,有些老师对“数据结构”知识掌握、理解的好,教授也到位,但在教学的过程中没有照顾到学生的具体水平和接受能力,只是按教学内容把知识点灌输给学生,学生的接收效果并不尽如人意,这种教与学分离,学生学习的兴趣也不高,感觉越学越难,陷入教与学的恶性循环。
三、教学改革的措施与方案
针对《数据结构》课程的自身特点和以上在教学中存在问题,从教学改革、学生学习和教学实践方面展开探讨。
对于数据结构抽象性强,难于理解的特点,教师可以在讲解的时候多注重于每一种数据结构的应用,以实例引出每一种数据结构,这样不但使同学对这种数据结构的认识形象化,而且提高同学的学习兴趣,另外还要与学生互动,及时掌握同学们的接受情况,在讲解每一种数据结构时,可以本着提出问题、分析问题、解决问题的思路,例如在讲解图这种数据结构时,以著名的七桥问题引入图的概念,然后提出怎样对图进行存储,结合前面所学二叉树的可让同学回答问题,然后分析由图的特性,得出图的两种存储结构,问题得以解决。另外由于课时的局限性,也为了提高同学的自学能力,在每次课最后总结完本次课学习内容后,留几道下一堂课主要解决的问题,供同学们课下预习的时候思考,下一次上课的时候可以直接让同学回答他对这些问题的理解,老师可以纠正理解不到位或错误的地方。这样对同学们对学过的知识点印象会更深刻一些。
数据结构教程中大多是基于C的,这样C语言的学习就至关重要,可以适当的加大C语言的授课学时,另外就是尽量提高同学学习的主观能动性,教师可以把在数据结构中用的较多指针、结构体等的知识点的讲解和相关程序放到教师主页上供同学参考学习,学生有什么问题可以在网上留言,教师在网上及时解答问题,当然这里还是要强调学生学习的兴趣,教师要调动学生的非智力因素,教师要多介绍这门课程的作用和学习目标,培养学生的自信心,从就业和未来发展的角度帮学生分析利害关系,督促同学尽最大努力来学习。
一、引言
设计、实现一个复杂或者高级项目的软件项目,可能需要涉及程序设计语言、数据结构、算法设计与分析、计算机网络、数据库等许多课程。而计算机科学技术专业的每一门课程都是从基础理论入手,复杂、高级项目不适合作为课程的学习案例或者习题。
不少课程选用比较简单和容易理解的小项目作为例题讲解知识点或者作为习题巩固学生所学知识点。比如约瑟夫程序,在程序设计语言中是链表操作习题,而数据结构课程中又作为线性表的习题或者上机题目;图书馆管理程序,可能作为数据结构课程的线性表的课程设计题目,也可能作为数据库课程范式优化的例题;集合的交集和并集可能作为离散数学课程的习题,也常被选做数据结构课程线性表操作的算法优化例题;网络蜘蛛常被作为计算机网络课程的课程设计题目,也常因为其中的典型树形结构关系被数据结构课程选作综合性课程设计题目;多优先级作业调度既是操作系统课程的主要研究内容,也是数据结构课程队列内容的习题。
以往的教学实践反映,很多学生学完课程之后并没有达到预期的目的。究其原因,一是对学生动手能力的培养没有到位,以至于部分同学对课程的学习还停留在“纸上谈兵”的阶段;二是对学生自主学习能力的培养没有到位,以至于涉及讲授范围之外的问题学生就不知从何入手。可以采用分层次教学,就是要因材施教,根据大多数学生的情况,正确处理教学中难与易、快与慢、多与少、应知与应会的关系。充分发挥学生学习的主体作用,转化差生、培养优生,全方位增进教学效果。
目前的教学活动,主要考虑的先后关系,而没有建立良好的课程的衔接关系。需要研究、整理他们直接的衔接关系。
需要整理本课程案例,考虑与先修课程或者后修课程的关系及所选题目的价值和意义,同时对案例采用层次性分解方法,满足层次性教学需求。
鉴于计算机专业本科教学课程数量多,本文针对计算机两大具有紧密关系的核心基础课程《数据结构》和《程序设计C语言》进行探索,并期望扩展到其他课程。
二、课程的衔接关系
C语言程序设计与数据结构是工科院校计算机专业中开设的两门重要的专业基础课。在以往教学中,这两门课程是相对独立、分开授课的,因此导致内容脱节,教学效果差。一般C语言程序设计课程只注重C语言的语法体系,因此学习后却不能用C语言进行程序设计;后者则注重讲授抽象的数据关系和算法在计算机中的表示及实现,学生能进行抽象算法的描述,上机实践应用时却无从下手。然而,这两门课程都以培养学生解决实际问题的程序设计能力为共同目标。因此,如何将这两门课程有机地结合起来,构建C语言与数据结构的新体系,改革教学方法,提高教学质量,成了当前教学改革中亟待解决的问题。
在传统的教学模式下,C语言程序设计与数据结构这两门课程分开教学。C语言程序设计的学习主要在语言语法的层次上,数据结构难度较大,注重思维训练,造成学生不能结合有效结合这两门课程运用到实际中去。通过不断探索,认识到这两门课程有很多内在联系,如软件是用一种程序设计语言编写解决该问题的算法,通过编译、链接成为可执行程序而成,而算法是通过处理输入数据转换为输出的解决方案,因此数据结构和程序设计语言密不可分;再比如数据结构讨论的抽象数据关系和算法要用C语言去实现等。
针对差异化的学生现状,整理课程关系,精巧的设计教学案例和习题实现任务驱动式教学法,对于调动学生学习兴趣,先修课程的简单案例让学生能够逐渐独立实现,有助于学生产生满足感,增加学习自信心;对于案例的扩展性引导,启发学生深入思考和逐步掌握自学方法,通过自学后修课程,提出的较难的问题又有助于激发学生参与后修课程学习的积极性。
三、拟解决的主要问题
数据结构与C语言课程的结合方式的探讨,针对探讨结果设计实际结合方法,并在学生中实践,选择最佳结合方式。
数据结构与C语言,每门课程需要有经验的任课教师结合本课程特点,探讨并确定各个案例与各知识点和其他课程关系,针对学生差异性现状和任务驱动式及层次性教学需求,对选择的案例采用递增式设计;确定跨课程案例及相关课程名,涉及的知识点。探讨选择的习题(包括课堂练习题、课后思考题、课后作业、上机实验题和课程设计题目)于知识点及其他课程的关系,标注习题难度级别,以达到层次性教学目的。
针对这两门课程的案例和习题,深入探讨相互关系,特别是相互的衔接性,C语言课程首先需要讲解基本语法知识,帮助初学者建立简单的程序设计过程思想,但由于教学时间限制,只依靠课内学习和课后作业及上机实验是不能充分达到熟练运行C语言解决问题,编写项目程序的目的。
C语言是大一学生首先接触的程序设计语言,加上许多学生还存在中学时期的一切依赖老师的学习方法和观念,未能进一步学习并提高程序设计能力,因此在后续课程中,比如数据结构课程中需要在讲解数据结构抽象数据类型及解决问题的时候,学生应该尝试借用C语言编程实现抽象算法。因此,应该结合学生的这个实际情况,进一步细化和分解选择的案例和习题,让学生在C语言学习过程中学会应用C语言解决和数据结构简单问题相关任务,为数据结构课程打下坚实基础;而数据结构课程中有意识的安排一些案例和习题,让学生能够有运用C语言解决简单问题的能力,并通过数据结构课程的学习和培养,掌握复杂问题的解决方法和更加熟练的应用C语言工具。
四、总结
根据计算机课程关系,设计优化与其他相关课程有关系的案例与习题,一来可以引导学生理解后修课程部分内容,引起学习兴趣,二来在一些先修课程已经介绍本课程该知识点的基础上,提出新的解决方案或者优化方法,更容易激发学生探索问题的好奇心和解决复杂问题的满足感,加强学生理解课程相互关系和培养计算机创新思维。
以数据结构课程和程序设计语言课程为例整理课程关系,研究和设计教学案例及习题,满足学生差异化需求和对学习内容的兴趣,进行层次性教学,将其经验和方法最终推广到计算机本科教学的各课程。
参考文献:
[1]黄迪明.C语言程序设计(第2版)[M].成都:电子科技大学出版社.
[2]吴跃,李树全,尚明生.数据结构与算法(第2版)[M].北京:机械工业出版社,2010.
[3]萨师煊.数据库(第3版)[M].北京高等教育出版社,2000.
中图分类号:G642文献标识码:A文章编号:1009-3044(2007)12-21712-01
Research on the Practice Teaching of Data Structure
CHEN Lan, GU Xiang
(School of Computer Science and Technology, Nantong University, Nantong 226019, China)
Abstract: The data structure is one of the most important core courses in computer science and technology. It is also a difficult course for a student to study. Aimed at the characteristics of data structure, such as strong logic, higher degree abstract etc., problems in practice teaching are set out. And the corresponding solved scheme is also discussed.
Key words: Data structure; Practice teaching; Teaching Method
1 引言
数据结构作为计算机学科中一门核心专业课程,综合了数学、计算机程序设计、软件开发等课程的众多知识,该课程为理解、应用和开发计算机应用程序提供了技术和方法支持,是计算机软件开发的基础。实践教学对于数据结构这门课程,有着十分突出的意义和价值。只有在实践的过程中,才能使学生的编程能力得到切实锻炼,让他们在不断的练习与尝试中,把理论运用于实践,设计编写出结构清晰明了、可读性强、高质量、高效率的计算机程序。最终使学生在用计算机解决实际问题时能有效地组织、存储和处理数据,为后续课程打下良好的理论基础和实践基础。然而,在实际教学中,学生对该门课程的掌握并不理想,实践环节不到位是其中一个重要的原因。
2 实践教学中的问题
分析起来,在课程实践教学中的问题可以归纳为教材、教师教学方法和学生这三个方面。
2.1 教材方面的问题
数据结构实践教学的教材较少,现有的一些实验教材所设计选取的实验题目难度较大,不适合学生使用。因为对于大多数刚刚学过一门程序设计语言的学生来说,将教材中用伪码书写的算法转换成完整无错的可以运行的程序代码,都是一件相当困难的事情,更不用说自己设计数据结构和算法去解决实际问题了。因此上机实验的失败便比比皆是,几次实验课下来,学生就会对这门课程的学习失去了兴趣和信心,从而严重影响了教学效果。
2.2 教师的教学方法
一些教师在教学过程中,由于各种主客观原因,往往会高估学生的高级语言程序设计的基础。在大多数高等学校的教学计划中,学生一般是在学完C语言(C++语言)后的学期里接着学习数据结构的,他们的语言基础并不牢靠。倘若仅按照教材而不顾及学生的现实水平,只会使学生越学越枯燥。
另外由于高校扩招,学生规模很大,一个教师同时上四个班(120人左右)的课是很常见的事情,这也使得实验课中教师指导作用弱化,学生遇到问题不能及时得到解决。实践教学的效果便也受到直接影响。
2.3 学生方面的问题
学生在学习数据结构时,先修课程――程序设计语言的基础相对薄弱。对C(C++)语言中的难点,如结构体(类)、指针、函数(方法)等等内容,理解不透彻,掌握不充分。而这些内容恰恰是数据结构的基础。
其次,学生的编程能力与经验不足。多数学生仅仅学习过一门程序设计语言,并且也没有很多的实际编写程序的机会。他们没有能够很好的理解、掌握程序设计的方法和理论。
再有,学习上的困难导致学习热情的缺乏。数据结构这门课程理论性强,内容枯燥,不大好学。学生学了不知道有什么用、怎么用。这样,学习时间越久,越觉得辛苦,逐渐磨灭了学习兴趣。
3 数据结构实践教学题目的设计要点
针对上面所提出的问题,在现有条件下,只有通过精心设计、选取实践教学题目,编写能够针对所教学生特点、适合他们自学、使用的实验指导讲义,才能在一定程度上弥补教材、教师教学和学生学习三个方面的缺陷,提高数据结构的教学效果。
我们通过实际教学的不断尝试,逐步总结了在设计实践教学题目时应该注意的几个要点,简要说明如下:
3.1 选择典型算法,做到以点带面
在选择实践教学题目时,应该尽量选择一些典型算法。这些典型算法应该具有一定的代表性,能够系统的体现某个数据结构的基本特征;难度应该适中,能被绝大多数学生理解和掌握;还要有一定的综合性,具备一定的理论深度,通过算法的实现,不仅能帮助学生更好的学习和掌握数据结构,还能提高学生编写程序的水平。表1中,给出了对应于某种数据结构的一些可以选用的典型算法。
表1 数据结构课程中的典型算法
3.2 注重示例程序,起好示范作用
把实验中每种数据结构的第一个算法的源程序提供给学生,使得他们能对该种数据结构的实现有更好的理解,同时还有一个可以参考模仿的范本。实践表明,这样做能够极大地提高程序的成功率,增强学生的学习信心,提高了实验效率。
3.3 与现实相结合,提高学生学习兴趣
在设计实验题目时,应力求与相关课程、实际生活相联系。把理论和实际联系起来,使得实验题目生动、接近学习和生活实际,学生容易接受和理解,容易调动学习积极性。
比如消防武警选址实例:给定5个县之间的交通网,现要在5个县中选择一个县建一个消防武警中队,使得离消防队最远的县到消防队之间的路程最短。问这个消防队应建在哪个县?实际上,这个问题就是从5个县中选出一个县,使得它到其他4个县的最短距离的最大值最小,而问题的关键就是顶点与顶点之间的最短路径问题。解决该问题的经典算法是弗洛伊德算法。
3.4 与学生实际水平相结合,设计不同层次的实验题目
在设计实验的过程之中,需要考虑学生的专业水平以及编程功底。由于不同的人对新知识的接受能力和认知能力存在差异,所以不可能用一两个实验就要学生们在对知识的了解程度上达到相同的层次。一个有效的办法是,在一个实验题目中,提出不同层次的任务要求,难度由低到高。这样可以充分的调动所有同学的积极性,使得不同层次的学生可以在各自的层次上进行思考,并获得收获,提高学生的学习兴趣并增强自己对学习这门课程的信心。
例如在堆栈这一实验中,按照难易程度从低到高,可以设计出堆栈的实现(构建堆栈、入栈操作、出栈操作)、使用堆栈模拟停车场、使用堆栈模拟铁路调度站、算术表达式求值等四个难度不同的题目,供学生选用。
3.5 设计综合实验(课程设计),提高学生对所学知识的灵活掌握程度
综合实验的设计是将书本中多个知识点整合在一个实验中,是对学生能力水平上的一种较高层次上的要求。学生在课程设计中,综合的运用自己所学过的基础知识,使用软件工程的方法指导和要求整个实验过程。在整个过程中,学生可以以两到三个人为一个开发小组共同进行实验。使得学生在相互学习相互促进中进一步掌握数据结构的应用,提高学生分析问题,组织数据,组织编程解决实际问题的能力。并在次过程中可以提高团队意思,培养协作精神。当然,在题目的选取上,也可以设计难度层次不同的实验,以适合不同需要的小组或个人。例如迷宫问题,教学计划,校园导游咨询等。
4 数据结构实践教学的实施
实践教学题目设计完成以后,教学的组织实施是下一个重要的环节。在实施的各个阶段,都必须向学生提出明确的要求,并进行必要的检查。否则,依然会达不到预期的效果。
4.1 实验预习
学生在上机实验时临时现编代码是常见的事情。为此,在预习阶段,就应该要求学生根据自己的情况,选择一个适合的题目,并对完成此题目的算法进行较为透彻的研究:设计出算法所必需的数据结构,给出具体的函数声明(如果是C++,则应给出类的定义)及函数实现流程。对于掌握得较差的学生,还应要求他们事先编写好源程序。所有这些内容构成预习报告。
在实验开始时,教师应该对学生的预习情况进行检查,对于没有很好完成实验预习的学生,要直接取消其实验资格,实验成绩记零。课程开始时,学生可能会不适应,但当养成习惯以后,他们就会深刻体会到预习工作的重要。
为了更好的调动学生的积极性,作为鼓励,前次实验完成得较好的学生,可以不作预习检查。
4.2 实验实施
教师在实验进行中,所扮演的角色不应当是程序调试者,而应当是引导者。当学生在代码执行中发生错误而向教师求助时,教师只需指出可能导致此问题的原因即可,更多的工作应该留给学生自己去完成。这样一方面可以节约教师的时间,从而能为更多的学生解决问题;另一方面也可以解除学生的依赖思想,锻炼他们的代码调试能力。
教师在实验进行中的另一项重要工作,是观察并提示学生的代码书写是否规范。从某种意义上说,代码的规范比编程技巧更为重要。在课程前期,这将是教师在指导实验时工作量最大的工作。
4.3 实验报告
实验完成后,学生必须撰写实验报告,实验报告应附预习报告。实验报告一般包含的内容是[放参考文献]:实验题目、实验目的、实验任务和要求、实验步骤(源程序)、实验总结。
特别要强调的是实验总结,必须讨论在实验中遇到的问题以及是如何解决的,即使是语法错误也应该报告。这样可以促使学生对错误不断反思,从而逐步提高编程能力。可以明确告诉学生,这部分将是成绩评定时最重要的考察因素。
4.4 成绩评定
成绩评定以鼓励为主,只要学生确实付出了努力(这从实验报告的实验总结中可以看出),那就可以适当给以高分。另一个要考虑的因素是学生所选题目的难度,但这不应该是主要的。
5 结束语
文中所讨论的是我们在数据结构课程实践教学中的一些成功经验的总结。实践表明,这些经验对于提高实践教学的效果是有益的,这也进一步促进了课程的理论教学。当然,这些经验还是初步的和粗浅的,还需要在实际教学中作进一步的研究。
参考文献:
[1] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,1997.
[2] 陈宇文. 注重源程序在《数据结构》课程中的重要性[J]. 高教论坛,2004.(1):73-75.
中图分类号:G642 文献标识码:B
CDIO原本是工程教育领域内的一个概念,它是构思(Conceive)、设计(Design)、实现(Implement)、运作(Operate)的集合体,是2001年由瑞典查尔姆斯技术学院、瑞典林克平大学、美国麻省理工学院、瑞典皇家技术学院合作开发的一个新型工程教育平台。它以工程项目(包括产品、生产流程和系统)从研发到运行的生命周期为整体,让学生主动地参与到理论到实践的转化过程中来,是一种倡导“做中学”和“基于项目的教育和学习”的新型教学模式。CDIO既注重抽象理论知识的“教”和“学”,又强调了教学过程中“做”的重要意义;既增强了学生的动手能力,又培养了学生的创新意识、项目设计的能力和团队协作的精神。CDIO教学模式应用于我国的一些高校,已经取得了初步成果。比如清华大学工业工程系的顾学雍教授就曾创造性地将CDIO方法运用于“数据结构”和“数据库原理”两门课中,取得了突出的成效。笔者也在本院计算机专业“数据结构”课程的建设过程中遵循CDIO原则,进行了一系列教学实践与探索。
1CDIO能力培养大纲
CDIO模式以构思、设计、实现、运作为主线,将基础知识、个人能力、团队协作与社会环境融合在一起,注重理论与实践的结合。图1为CDIO大纲的主要内容。
大学计算机专业也是实践性很强的学科专业,借鉴CDIO大纲对工程师的培养目标,我们对于专业性人才的培养也应该首先立足于加强学生对专业基础性知识的学习和基本技能的掌握,倡导产学研相结合,在实践中培养学生的专业技能与合作沟通的能力,最终让毕业生满足企业对人才的需求并服务于社会。
2“数据结构”课程的重要性
“数据结构”是整个计算机学科体系的一门核心课程,也是计算机相关专业的专业必修课。学好这门课程,不仅可以为软件开发奠定良好的编程基础,也可以培养学
生良好的编程思想和编程风格。这门课程主要介绍各种离散结构,如表、树、图、集合等在计算机内的存储和处理,以及各种常用算法及其应用。课程除了要求学生有较好的离散数学基础外,还应至少掌握一门程序设计语言(Pascal、C、C++、Java等)。因为课程既包含抽象的理论,又强调算法的实践,所以一直以来都被学生认为是最难学的课程之一。
3基于项目的学习
CDIO教育模式要求学生基于工程项目的全生命周期进行学习与实践,项目最好来源于企业的真实题目或结合教师的科研课题组织和设计,以项目作为基础知识传授与基本技能掌握的载体。考虑到“数据结构”课程一般开设在计算机专业大学本科二年级,此时学生刚刚学习了一至两门程序设计语言,对编程语言的运用还处在初级阶段,还没有经过软件工程的系统培训,所以教师在设计项目时,还必须讲究方式方法,结合学生的实际情况来组织教学。
3.1课堂讲授
课堂讲授是贯彻CDIO教学大纲,学习基础知识的主要方法,要求教师对“数据结构”课程中所有的知识点、重点及难点有很好的设计。在讲授教学内容时,教师可以适当地引用实际项目,引导学生体会产品从构思、设计、实施到运作的完整过程。
比如在讲解树结构时,引入ERP企业资源计划系统中的BOM(Bill of Material)物料清单的实例。BOM是一种描述配套件结构的零件表,包括所有子件、零件、原材料的清单以及制造一个配件需要的所有物料数量。BOM是制造业信息系统的一个核心部分,在ERP系统的MRP分析、制定生产计划、采购及销售控制及生产过程控制等环节都具有重要的作用,设计合理的BOM结构可以取得事半功倍的效果。针对对BOM特点和作用的简单讲授和对树型结构的分析,教师可以引导学生从实例入手,锻炼学生从分析实例产品的构成和用户的实际需求出发,构思并设计合理的数据结构,促进学生对树型结构的掌握。
3.2课堂讨论
课堂讨论是课堂讲授教学内容的有效补充形式。现代教学理念主张启发式教学,在适当的时候抛出一个问题,给学生5~10分钟的自由发言或分组讨论时间,效果会更好。比如上一个问题,教师可以在讲解BOM的时候直接给出树型结构的解决方案,但是如果教师在讲授了基础知识和问题背景后,让学生自行讨论设计方案,自由发言或由小组代表提出设想,再由全班讨论,经教师总结后给出结论,则可以充分地激发学生的积极性,也让学生体会了“提出问题―分析问题―解决问题”的过程。在这个过程中,教师要注意对学生的思路加以引导,对学生所提的方案加以鼓励,帮助学生树立创新意识,让他们不墨守成规,学会从多角度思考问题。
3.3课后作业
课后作业是对课堂教学内容的延伸和对课堂教学效果的验证。在教学时间紧任务重的前提下,科学地设计课后作业可以弥补缺憾,也可以促进学生主动学习。比如可以针对具体项目,让学生通过上网查阅资料补充项目背景知识,也可以让学生查找相关问题的其他解决方案,或对课堂提出的算法进行代码实现。教师可以从这些内容中挑选出精彩的部分,安排合适的时间,在课堂上由学生进行汇报讲演,交流心得。这种形式既对课堂教授有很好的补充,又有效杜绝了学生的作业抄袭现象。
4通过课程实践体会“做中学”
CDIO理念是总结了欧美20多年来工程教育改革的产物,目的是能够培养出全面发展的工程师,他们不仅要具有扎实的专业知识和熟练的专业技能,理解构思―设计―实施―运行一个完整系统的复杂性,还要能够在一个现代的、合作的环境中让这个产品升值。CDIO强调学生的工程能力不是单纯的理论知识或直观技能,而是两者的综合运用,也就是所谓的“做中学”。
“数据结构”课程的实践环节由两部分组成:课内上机和课程设计。课内上机一般有2~4个学时,以验证性实验为主,侧重学生对每章知识点的上机验证和内容的延伸;课程设计时间相对较长,一般有20~40个学时不等,学生可以在这个过程中完整地体验一个项目的设计和实施。
4.1项目的选择
课程实践的项目最好来自企业一线,或者是一些具有实际意义的题目,考虑到学生知识的局限性,教师可以对这些题目稍作改动。比如“北京市城市轨道交通咨询模拟系统”要求参考北京地铁运营线路图,见图2,以无向图的形式描述城市轨道交通状况,给出从甲地到乙地的最优换乘方案。此项目来源于实际问题,学生很容易理解题目的要求和最终的结果。由于实际地铁运行线路中站点比较多,所以布置题目时可以适当简化,比如减少站点数目(但要保留换乘站),忽略两站之间的运行时间和每站的停靠时间,以途经的站数来作为最优路径的计算依据等。
在课程设计阶段,学生首先选择自己感兴趣的项目,然后从问题需求入手,设计合理的数据结构,明确输入和输出信息,进行模块设计,最后进行详细代码的编写和模块测试。整个过程始终遵循CDIO“做中学”的原则,让学生在实际动手的过程中不断增强解决实际问题的能力。部分能力较强的同学还在原题的基础上进行功能扩展,形成了一个带有友好人机界面的可视化软件,既提高了学生的学习兴趣,又激发了学生的创造力。
4.2分工与合作
《礼记•学记》上讲:“独学而无友,则孤陋而寡闻”。由于CDIO强调的项目具有完整性和综合性,一个学生很难在短时间内完成,因此可以考虑采用分组的形式,由多名学生组成小组,由组长负责安排整个项目的进度。这种团队的形式最能锻炼学生的协作精神、沟通能力和领导能力。李开复教授在给中国学生的信中这样写道:“像Windows 2000这样的产品研发,有超过3000名开发工程
师和测试人员参与,写出了5000万行代码。没有高度统一的团队精神,没有全部参与者的默契与分工合作,这项工程是根本不可能完成的。”CDIO模式就是要让学生在不断的碰撞和沟通中学会相互支持,共同讨论,共同进步。
4.3项目考核
课程设计结束时,教师要对项目的完成情况进行考核,CDIO教学模式的标准之一就是要对学生个体进行评估验收。考核的形式可以是多样的,比如采用“答辩”的方式,由学生演示程序的运行结果,然后针对自己在小组
中的分工情况,详细介绍具体算法和遇到的问题,最后提交项目总结报告。较之传统的考试,这种考核方式更加强调学生的表达能力和科技文章的撰写能力,既分享了学习经验,又拓宽了知识面。教师在考核过程中要起到主导作用,要站在企业、用户或用人单位的角度来设立问题,将学生置于一个大的环境中,使学生具备业界所需要的素质和能力。
总之,通过将CDIO教学模式运用于“数据结构”课程,倡导“做中学”和“基于项目的教育和学习”,使学生在掌握基本专业知识和技能的同时,既提高了学习兴趣,又增强了从业所要求的各项素质,对学生毕业走上社会的可持续发展起到积极的作用。
参考文献:
中图分类号:TP311.12-4
数据结构是计算机专业中介于数学、计算机硬件和计算机软件三者之间的一门综合性的专业基础课。数据结构的内容不仅是程序设计进行总结和提高,而且是编译原理、操作系统、数据库系统等后续专业课提供基础,具有承上启下的重要作用。本文针对数据结构的课程特点和教学过程中存在的问题,探讨教学实践中如何针对产生的问题进行教学改革与实践,以提高教学质量和学生学习效果。
1 数据结构教学中存在的问题与现状
1.1 缺乏对数据结构认识。正确深刻地理解数据结构的涵义、作用以及数据结构课程内容体系是学习好数据结构的前提和基础。但是,一般情况学生只是大概了解了数据结构的概念,在缺乏正确认识和深刻的理解的情况下,就开始直接学习课程内容了,认为具体的内容才是最重要的。对于为什么需要数据结构,课程中包括哪些内容,从哪些角度和方面对数据结构进行讲解,原因是什么等等,都没有认真研究和体会,导致数据结构的学习效果和教学效果都不甚理想。如果这些问题都理解了,就从整体上认识了数据结构,那么学生学习,教师教授都会有的放矢。
1.2 C语言知识储备与数据结构的要求相脱节。数据结构涉及指针、结构体、类型定义、函数调用等相关知识,所以要求学生对这些内容的掌握程度比较高高。但是在C语言教学中,一方面,这些内容都是在课程的后半部分且学习起来难度较大,学生学习有畏难情绪,往往对这些内容掌握不牢;另一方面,教师在授课过程中,对不同专业区别度不大,很少特别为后续课程的需要专门对相关知识做重点讲授,这样就影响后续课程的学习。最终导致学生掌握的C语言知识不能满足学习数据结构课程的要求。
1.3 缺乏独立分析解决问题的能力。在课堂讲课过程中,一般以教师讲授课程内容为主导,在讲解课程内容时,学生貌似都学会了,和老师的互动也非常积极,对老师提出的启发式问题都能正确回答,认为课堂上老师所讲的实例也都很简单。但是,若在没有老师的引领的情况下,让学生单独分析、解决一个例题,多数学生就很难掌握方向,不知从哪做起,缺乏独立分析问题、解决问题的能力。
1.4 动手编程能力不强。相对于理论知识的学习,学生在上机实践中遇到的问题更大。学生的程序设计基础薄弱,缺乏足够的系统训练,对调试程序的方法不够熟练,程序结构设置不合理,代码编写可读性差。即使一些学生看懂了教材上的算法,将其转换成能运行的C语言程序,也存在一定的难度。这些都对学生的学习效果都有较大的影响,甚至会削减学习的积极性,进而产生畏难和厌学情绪,产生恶性循环,有些学生干脆不学了。数据结构中教学中出现的这些问题,严重影响了数据结构课程的教与学,探讨数据结构课程教学方法,势在必行。
2 教学探讨与实施
2.1 正确认识“数据结构”。认识数据结构课程不仅仅让学生了解其在专业中的地位和重要性,更要理解数据结构课程本身的涵义和作用。所以在课程开始的时候开课之初,对课程绪论部分的讲解不应吝啬时间,要把这部门内容讲清楚讲透彻。数据结构是一门研究非数值计算机的程序设计问题中计算机的操作对象以及他们之间关系的操作等的学科。从这个定义中,我们从中抽取对象、关系、操作等关键词,再以设计实现一个家族家谱这样一个比较形象的例子进行讲解,进而引出如何存储表示数据对象及关系和能对这个家族的族谱做哪些操作,这样就引入了逻辑结构和物理结构的知识以及对数据结构建立相应操作的问题。这样学生就基本能建立数据对象、数据关系、基本操作三元组的概念,并能深刻理解逻辑结构与物理结构的概念和关系。从总体上认识、把握、建立数据结构的整体概念是学习好数据结构的基础。
2.2 针对数据结构课程需要制定C语言课程教学大纲。因为不同专业学习C语言的要求不同,所以根据教学计划制定科学合理的数据结构前导课程的教学大纲、考试大纲能有效解决前导课程储备知识不足的情况。根据教学计划安排有数据结构课程的专业,其C语言课程与其他专业的课程不同,是单独列出的。其教学大纲、考试大纲等教学文件由讲授C语言和数据结构的老师根据专业特点及后续课程的需要共同研究制定,并按学校的规定定期修订。教学中只要按照制定好的教学大纲等相关文件规定执行,就能满足数据结构课程的要求。这样就从源头上解决了C语言储备知识不足的问题,避免了以往数据结构课程教师需要与C语言课程教师沟通重点讲解哪些内容,但因只是个人行为而没有学校相关文件规定的限制,所以不能达到较好的效果。通过制定专门的教学大纲,也无需要求数据结构与C语言课程采用“一师制”,避免了人员变动等其他因素带来的不确定性影响。
2.3 构建整体教学内容体系。数据结构课程内容抽象涉及很多概念和技术,学生在学习的课程过程中总是感到知识没有连贯性与整体性,难以对所学内容融会贯通,对课程的知识缺少一个整体的把握。所以建立整体的知识框架体系对数据结构的教学非常重要。数据结构课程的内容主要围绕数据的逻辑结构、数据在计算机中存储的物理结构以及对数据操作算法的实现及评价展开。数据的逻辑结构根据数据对象之间关系的不同特性,分为线性结构(一对一)、树形结构(一对多)、图结构(多对多);数据的物理存储结构按照数据对象之间关系的表示方法分为顺序存储结构和非顺序存储结构。在教学中引入抽象数据类型(ADT)观点介绍数据结构技术,采用算法时空分析来判断算法的好坏。在讲授每一个数据结构时,以抽象数据类型为主线,按照抽象数据类型的定义—抽象数据类型的设计—抽象数据类型的实现三个层次展开来讨论,渗透并应用模块化的思想,在此基础上介绍数据结构的具体应用。在教学过程中教师会反复强调课程的篇章结构及其关系,数据结构课程的章、节、目,是课程的“骨架”,反应了课程内容的逻辑关系,以此加强学生对课程的内容体系的理解和掌握。
2.4 课堂上适当进行编程示范教学。教学过程中,我们发现,学生能听懂老师所讲授解题的算法思路,但就是不知道如何用编程语言或算法表达出来。为解决这一问题,在教学中会在课堂上对有代表性的算法进行现场编程演示。课堂上教师先带着学生先把算法总体思想写出来,接下来选择合适的物理存储结构利用C语言进行编程调试运行。这种方法可以让学生掌握将解决问题的思路转变成代码的全过程,对学生编写和调试程序起到很好的示范作用。在编程过程中,教师会边写代码边讲解,引导学生积极献计献策一起来解决问题。由于现场编程比较耗费课时,对于比较长的程序,一般教师会在课前完成,留下解决问题的关键步骤在课堂与学生一起编程实现。通过这个过程学生能深刻理解绪论中算法的设计只取决于将要解决问题的数据对象之间的逻辑结构,而算法的实现则依赖于数据对象及其关系的存储结构。同时学生也能认识到用类C语言表示的算法与用C语言编写的程序有哪些不同。有了现场的变成演示,在上机实践中,学生直接将教材上的算法照抄到计算机内运行的情况大大减少,理解了如何将抽象的数据结构理论应用到实际解决问题当中去。
2.5 任务驱动教学方法的应用。所谓“任务驱动”就是在学习信息技术的过程中,学生在教师的帮助下,紧紧围绕一个共同的任务活动中心,在强烈的问题动机的驱动下,通过对学习资源的积极主动应用,进行自主探索和互动协作的学习,并在完成既定任务的同时,引导学生产生一种学习实践活动。“任务驱动”是一种建立在建构主义教学理论基础上的教学法。它要求任务的目标性和教学情境的创建。使学生带着真实的任务在探索中学习。在这个过程中,学生还会不断地获得成就感,可以更大地激发他们的求知欲望,逐步形成一个感知心智活动的良性循环,从而培养出独立探索、勇于开拓进取的自学能力。在教学中,我们应用了任务驱动的教学方法并加以改进,达到了较好的教学效果。我们的做法是根据不同的场景“任务”不仅仅是学生的,也是老师的,或者是由老师和学生共同完成的。比如在讲解第二章线性表的时候,我们就会根据课程内容,设计完成一个共同的任务:一元多项式的相加。为了完成这个任务师生共同找解决的方法,当然任务的完成需要老师的按既定的方向循序渐进地引导,先讲解两个集合合并到一起的算法,再讲解将两个按值非递减有序排列的线性表如何合并,一元多项式相加的问题稍加改进就解决了。在完成一些比较大任务的过程中,我们会将其分解成若干个小任务让学生独立完成。当然,在教学实践中也不是所有的内容都可以通过任务驱动的方法实现,不能执行一刀切。授课教师应根据课程内容,学生的能力多方面考虑设计合适的任务。任务太大完不成,容易打消学生的积极性,任务太小不能起到应有的作用。
2.6 系统化实践教学。为了满足不同层次学生对实验题目难度,提升学生对实践教学的兴趣;我们针对不同学生的特点,制定分层次实践教学的方法。按照实验的难易程度分为验证性实验、设计性实验、综合性实验三个层次。验证性实验根据数据结构基础内容设计,难度较低。目的是让学生掌握基本数据结构的特点和基本概念,同时掌握基本算法及应用。在上机指导中授课教师将验证性实验作为主要的考核内容,只有对基本算法的完全掌握,才能灵活应用。设计性实验是在验证性实验的基础上增加难度和深度。根据特定的数据结构有针性设计题目,必须使用某种数据结构解决。授课教师会和学生一起分析问题,引导学生如何解决,如何设计数据结构,采用什么样的算法,但是具体的数据结构及算法编程实现需要学生独立完成。综合性实验一般要求综合使用多种数据结构解决一个难度较大的现实问题;主要训练学生综合运用知识的能力、协作能力和创新能力。由于问题难度较大,我们采取将综合性实验安排在课程设计阶段。
教学实践证明,这种重点进行验证性实验,适当补充设计性实验,通过课程设计完成综合性实验的分层次的实践教学体系,符合学生的认知规律和特点,在实践教学中也取得了较好的教学效果。
3 总结
数据结构课程在计算机专业的课程体系中具有非常重要的作用。本文通过对数据结构课程教学中存在的问题及现状进行深刻剖析,结合教学经验有针对性地提出了相应的解决方法,从问题的源头上避免了这些问题的发生。教学实践表明,通过在教学中采用以上教学方法,提高了数据结构的教学质量,并取得了良好的教学效果。
参考文献:
[1]严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社,1997.
[2]余建国,刘双红.基于任务驱动的协同教学模式在程序设计类课程中的研究与实践[J].科技信息,2009,27:104,83.