论文部分内容阅读
摘要:“数据结构”是计算机及相关专业本科生的一门必修课程,是计算机程序设计的重要理论和实践基础。但由于课程内容抽象性较强,传统的教学方法很难使学生很好地掌握课程的主要内容,从而导致学生失去学习兴趣,教学效果不理想。针对上述问题,从“数据结构”课程的教学现状入手,认真研究和分析了目前教学过程中存在的主要问题,以提高学生的学习兴趣、加强学生的动手实践能力为出发点,提出了案例式教学法、对比和归纳式教学法、启发式教学法、联想式教学法以及任务分解式实验教学法。实践证明,教学方法的改革可以提高学生的学习效率,激发学生自主学习的热情,增强学习的兴趣,课堂教学效果显著提高。
关键词:数据结构;案例式教学;对比归纳式教学;启发式教学;联想式教学
作者简介:刘娜(1978-),女,辽宁大连人,大连工业大学信息科学与工程学院,讲师;路莹(1970-),女,辽宁大连人,大连工业大学信息科学与工程学院,教授。(辽宁 大连 116034)
基金项目:本文系辽宁省教育科学“十一五”规划课题(课题编号:JG09DB018)、辽宁省普通高等教育本科教学改革研究立项项目(项目编号:辽教发[2012]130号)的研究成果。
中图分类号:G642 文献标识码:A 文章编号:1007-0079(2014)02-0112-03
数据结构是计算机学科的专业核心课,在计算机课程体系中起着承上启下的作用,其不仅可以为后续专业课程提供理论和实践的基础,而且与计算机学科的其他课程,如操作系统、编译原理等都有密切的联系。
数据结构课程的教学目标主要是培养学生具备合理而且有效地组织、存储和处理数据,并正确设计算法、对算法有效性进行分析的能力,因此,学好该门课程对于提高学生的理论认知水平和实践动手能力有着极为重要的作用。但由于数据结构课程本身的抽象性和动态性,难免造成学生在学习过程中对相关内容难以掌握,从而致使学生学习兴趣降低、学习主动性减弱。因此,对数据结构课程进行教学方法改革以提高教学质量是非常有必要的。本文从数据结构课程的现状入手,找出课程中存在的主要问题,并提出一系列的教学改革方法。
一、“数据结构”课程教学中存在的主要问题
经过多年的教学实践工作,笔者发现目前“数据结构”课程在教学过程中主要存在以下问题:
1.课程内容抽象
“数据结构”课程是一门专业基础课,融合了数学、计算机硬件和计算机软件的内容,目的是使学生能够根据实际问题的需要选择出合适的数据结构和算法,从而提高编写软件和解决实际问题的能力。其内容涵盖软件设计中经常遇到的线性表、栈、队列、串、数组、树和二叉树、图等典型数据结构的逻辑结构、存储结构、操作的实现方法,以及各种典型的查找和排序算法。因此,授课内容多、覆盖面广,主要和数据、算法有关,所以内容的抽象性较强,而且教材中数据的逻辑结构通常采用抽象数据类型进行表示,算法采用伪代码进行描述,这就更加大了学生理解的难度。尤其是面对一些实际问题的时候,学生很难将现实问题与数据的逻辑结构相对应,也找不到相应的解决问题的算法,更编制不出程序,所以学习兴趣自然会明显下降。
2.教学模式单一
目前,“数据结构”课程在教学过程中大多采用多媒体教学的方式。这种方法虽然清晰、方便,但由于本课程涉及大量的概念、抽象数据类型以及算法,理论性强又较为抽象,特别是算法的描述无法在课堂上一一详细介绍,算法的执行过程很难在课堂上充分演示,使学生难以想象数据之间的复杂关系。即使学生在课堂上听懂了,课后也可能无法及时上机实践,由此导致教师讲授的知识多于学生吸引的知识,长此以往学生便失去了学习的热情。
3.实践能力薄弱
目前大部分的数据结构教材都是采用C语言进行算法描述,而且主要使用的是C语言里的指针、函数和结构体这些知识。但笔者在教学中发现这些C语言内容恰恰是学生掌握情况最不理想的部分。所以在实验中,学生往往不知道如何将算法转换成计算机能执行的程序,又或者直接把教材中的伪代码当成C语言语句进行编写。因此在实践环节中很多学生的程序都无法调试通过,久而久之便对编程失去兴趣。
二、“数据结构”课程教学方法的讨论
针对“数据结构”课程教学过程中存在的主要问题,以严蔚敏主编的《数据结构(C语言版)》教材[1]为基础,从激发学生的学习热情、提高学生的学习兴趣、加强学生的实践能力为出发点,提出以下解决方案。
1.案例式教学法
案例式教学法是一种极具发展潜力的教学模式。所谓案例法是指教师在讲授新内容之前,不是从定义或抽象数据类型入手,而是以某个案例为切入点,学生围绕教师所提供的案例积极进行思考、分析和讨论。[2]案例首先让学生对要讲授的内容有感性的、具体的认识,然后教师再由案例自然过渡到问题的原理和本质。由于案例一般都具有趣味性和启发性,因此可以激发起学生探究如何解决这些问题的好奇心以及学习相应知识的愿望,可以在具体问题和数据结构之间架起一座理解的桥梁,降低学生学习抽象数据内容的难度。
教师选取的案例可以是一个或几个,但必须贴近生活、趣味性强,并且刚好能用某种数据结构来描述,有很多的案例都可以引入到“数据结构”课程的教学过程中。比如,学生刚学习“数据结构”课程的时候,对课程的作用不是很清楚。这时教师可以引入电话号码查询问题作为案例。电话簿是手机里最常用的功能,在查找电话号码的时候可以从前到后依次查找,也可以按照姓名的汉语拼音的顺序进行查询。显然,学生们认为后一种方法比较常用,因为其查找效率比较快。此时,教师可以顺理成章地引出在设计一个算法的时候同样也存在的效率问题,如何设计效率高的算法是“数据结构”课程的一个重要研究内容。另外,电话号码是按照结识朋友的先后顺序录入的,而显示的时候却是按照拼音的先后顺序显示的,即电话号码是按照拼音的顺序存储的,这样做的目的是减少号码的查找时间。这说明数据的存储结构可以决定数据运算的效率。利用这个案例,可以让学生较好地理解“程序设计实质=好算法+好结构”这句话。 案例式教学法能够使理论与实际更好地结合起来,消除学生刚接触数据结构这门课程的陌生感。通过对案例内容的分析、讨论和实践,可以帮助学生更好地掌握理论及其实际应用,快速的进入到“数据结构”课程的学习中去。
2.对比和归纳式教学法
“数据结构”课程的很多知识点之间是相互关联的,为了使学生能够更好地掌握每个知识点,可以采用归纳对比的方式授课。[3]比如,线性表是学生接触到的第一个逻辑结构,熟练掌握其对应的存储结构对以后课程的学习大有帮助。在介绍顺序存储和链式存储结束以后,可以对这两种存储结构进行对比归纳:顺序存储结构采用的是连续的存储空间,链式存储结构的存储空间并一定连续,如图1所示;顺序存储结构的优点是可以随机存取元素,缺点是插入、删除时需要移动大量元素;链式存储结构的优点是插入、删除时是通过移动指针完成的,缺点是读取元素时需要从前至后依次读取。
在讲授栈和队列时也可以采用对比归纳教学法。栈和队列的共同点是两者都是特殊的线性表,特殊在插入和删除操作做了限制。不同点是:前者是先进后出,后者是先进先出,如图2所示。通过这样的对比归纳可以使学生更加容易掌握知识点的主要内容,对相近的内容也更容易区分。
3.启发式教学法
启发式教学就是通过在教学中适当设置问题,引导学生积极主动思考,从而提高学生的学习兴趣和主动性。[4]一般情况下,学生们普遍认为链表是比较难掌握的内容,在讲授这部分内容的时候可以多采用启发式教学法。比如,在图3所示的单链表进行读取操作时,若要读取数据ai,可以启发学生ai的地址在哪里?学生自然会想到ai的地址存放在ai-1的指针域中。那么要想表示ai-1的指针域就要知道ai-1的地址,以此类推,还要知道ai-2,…,a1的地址,那么这个过程怎么表示呢?学生就会想到使用循环结构移动指针p=p->next来实现。
在一元多项式相加问题也可以采用启发式教学法,让学生思考一元多项式相加问题的数据对象是哪些?这些数据对象采用何种存储方式更合理?经过对这些问题的思考和分析,鼓励学生们独立定义合适的结构体并写出相应的算法。
在教学过程中采用启发式教学方法,可以培养学生分析问题、解决问题的能力,并在分析、解决问题的过程,激发学生的自主学习热情、提高学习兴趣、培养创新能力。
4.联想式教学法
联想式教学法是在教学过程中通过纵向和横向联系,把抽象的内容和现实生活当中的例子联系起来,以此来调动学生学习的积极性和主动性,达到显著的教学效果。比如,栈和队列的插入、删除位置特殊,为了帮助学生掌握这两种结构的特点,可以将栈结构的入栈操作联想成向一个纸箱子里放书,后放到箱子里的书要摞在上面,出栈操作则联想成从纸盒里取书,后放进去的书要先拿出来。这样,通过联想书的取放过程就可以很轻松地掌握栈的结构特征是后进先出。利用联想式教学法进行教学,不仅可以提高学生的想象力,活跃课堂气氛,还可以使学生迅速掌握新知识,使课堂教学效果显著提高。
5.任务分解式实验教学法
数据结构实验在数据结构教学中占有重要的地位。通过实验可以使学生上机解决一些典型问题,加强学生分析、设计、编码、调试等环节的训练,培养学生正确阐述实验结果、正确绘制系统和程序框图的能力,从而逐步建立正确的程序编写风格。但由于“数据结构”课程的抽象性等诸多原因,这个环节恰恰是学生感觉最困难的地方,学生往往很难将一个实际问题与算法、程序结合起来。
为了充分调动学生的动手积极性,使学生能够独立完成实验内容,可以在实验课上把一个实验题目分解成若干个子任务,指导学生逐步完成这些子任务。比如,在解决约瑟夫环问题的时候,可以把实验内容分解成如下的子任务:
(1)定义结点结构;
(2)输入人数n、初始密码;
(3)输入每个人的编号、密码,建立链式存储结构;
(4)将建立的链式存储结构改造成循环链表;
(5)输出结果
for(1..n)
{
for(1..密码)
{
找到停止报数的人(即找到需要删除的结点);
}
输出删除结点的编号;
获取删除结点的密码;
删除结点;
}
在上述5个子任务中,(1)和(2)两个子任务比较简单,学生基本都能完成;第(3)个子任务可以参照书上的算法或C语言参考书,大部分同学能够独立完成;第(4)个子任务只需要将单链表尾结点的指针域指向头结点,大部分同学也能够在老师的提醒下完成;第5个子任务涉及两个for循环,外层循环控制人数,内层循环控制报数,在找到停止报数的人以后,需要用到链表中的删除结点操作。
通过这样的任务分解,就把一个复杂的问题转换成了多个学生相对熟悉的操作,这样,学生就不会对实验内容感到束手无策了,学生们可以在一步步完成子任务的过程当中,把理论内容和动手实践结合起来,体会到编程的乐趣,同时也增强了学生的自信心。
三、结论
“数据结构”课程是计算机及相关专业的重要理论基础课程,在计算机学科中有着重要的地位和作用。但由于其抽象难懂,传统的教学很难使学生较好的掌握该门课程的内容,尤其是一些难点内容,学生更是感到晦涩难懂。为了解决这一问题,本文从分析数据结构课程的现状入手,以激发学生的学习兴趣,培养学生的动手能力主出发点,提出了三点提高数据结构课堂教学质量的方法。实践证明,通过采用案例教学、对比归纳教学、启发教学、联想教学、任务分解实验教学方法可以提高学生学习的主动性,增加学生学习的兴趣,达到改进课堂教学效果的目的。
参考文献:
[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2010.
[2]董丽薇.“数据结构”课程教学方法的改进[J].沈阳师范大学学报,2012,30(2):307-309.
[3]范德宝,于晓聪,丁伟祥.提高数据结构课程教学效果的探讨[J].黑龙江科技信息,2007,17(1):194.
[4]唐年庆,汪在荣.数据结构中线性结构教学分析[J].内江科技,2011,(2):146-147.
(责任编辑:王意琴)
关键词:数据结构;案例式教学;对比归纳式教学;启发式教学;联想式教学
作者简介:刘娜(1978-),女,辽宁大连人,大连工业大学信息科学与工程学院,讲师;路莹(1970-),女,辽宁大连人,大连工业大学信息科学与工程学院,教授。(辽宁 大连 116034)
基金项目:本文系辽宁省教育科学“十一五”规划课题(课题编号:JG09DB018)、辽宁省普通高等教育本科教学改革研究立项项目(项目编号:辽教发[2012]130号)的研究成果。
中图分类号:G642 文献标识码:A 文章编号:1007-0079(2014)02-0112-03
数据结构是计算机学科的专业核心课,在计算机课程体系中起着承上启下的作用,其不仅可以为后续专业课程提供理论和实践的基础,而且与计算机学科的其他课程,如操作系统、编译原理等都有密切的联系。
数据结构课程的教学目标主要是培养学生具备合理而且有效地组织、存储和处理数据,并正确设计算法、对算法有效性进行分析的能力,因此,学好该门课程对于提高学生的理论认知水平和实践动手能力有着极为重要的作用。但由于数据结构课程本身的抽象性和动态性,难免造成学生在学习过程中对相关内容难以掌握,从而致使学生学习兴趣降低、学习主动性减弱。因此,对数据结构课程进行教学方法改革以提高教学质量是非常有必要的。本文从数据结构课程的现状入手,找出课程中存在的主要问题,并提出一系列的教学改革方法。
一、“数据结构”课程教学中存在的主要问题
经过多年的教学实践工作,笔者发现目前“数据结构”课程在教学过程中主要存在以下问题:
1.课程内容抽象
“数据结构”课程是一门专业基础课,融合了数学、计算机硬件和计算机软件的内容,目的是使学生能够根据实际问题的需要选择出合适的数据结构和算法,从而提高编写软件和解决实际问题的能力。其内容涵盖软件设计中经常遇到的线性表、栈、队列、串、数组、树和二叉树、图等典型数据结构的逻辑结构、存储结构、操作的实现方法,以及各种典型的查找和排序算法。因此,授课内容多、覆盖面广,主要和数据、算法有关,所以内容的抽象性较强,而且教材中数据的逻辑结构通常采用抽象数据类型进行表示,算法采用伪代码进行描述,这就更加大了学生理解的难度。尤其是面对一些实际问题的时候,学生很难将现实问题与数据的逻辑结构相对应,也找不到相应的解决问题的算法,更编制不出程序,所以学习兴趣自然会明显下降。
2.教学模式单一
目前,“数据结构”课程在教学过程中大多采用多媒体教学的方式。这种方法虽然清晰、方便,但由于本课程涉及大量的概念、抽象数据类型以及算法,理论性强又较为抽象,特别是算法的描述无法在课堂上一一详细介绍,算法的执行过程很难在课堂上充分演示,使学生难以想象数据之间的复杂关系。即使学生在课堂上听懂了,课后也可能无法及时上机实践,由此导致教师讲授的知识多于学生吸引的知识,长此以往学生便失去了学习的热情。
3.实践能力薄弱
目前大部分的数据结构教材都是采用C语言进行算法描述,而且主要使用的是C语言里的指针、函数和结构体这些知识。但笔者在教学中发现这些C语言内容恰恰是学生掌握情况最不理想的部分。所以在实验中,学生往往不知道如何将算法转换成计算机能执行的程序,又或者直接把教材中的伪代码当成C语言语句进行编写。因此在实践环节中很多学生的程序都无法调试通过,久而久之便对编程失去兴趣。
二、“数据结构”课程教学方法的讨论
针对“数据结构”课程教学过程中存在的主要问题,以严蔚敏主编的《数据结构(C语言版)》教材[1]为基础,从激发学生的学习热情、提高学生的学习兴趣、加强学生的实践能力为出发点,提出以下解决方案。
1.案例式教学法
案例式教学法是一种极具发展潜力的教学模式。所谓案例法是指教师在讲授新内容之前,不是从定义或抽象数据类型入手,而是以某个案例为切入点,学生围绕教师所提供的案例积极进行思考、分析和讨论。[2]案例首先让学生对要讲授的内容有感性的、具体的认识,然后教师再由案例自然过渡到问题的原理和本质。由于案例一般都具有趣味性和启发性,因此可以激发起学生探究如何解决这些问题的好奇心以及学习相应知识的愿望,可以在具体问题和数据结构之间架起一座理解的桥梁,降低学生学习抽象数据内容的难度。
教师选取的案例可以是一个或几个,但必须贴近生活、趣味性强,并且刚好能用某种数据结构来描述,有很多的案例都可以引入到“数据结构”课程的教学过程中。比如,学生刚学习“数据结构”课程的时候,对课程的作用不是很清楚。这时教师可以引入电话号码查询问题作为案例。电话簿是手机里最常用的功能,在查找电话号码的时候可以从前到后依次查找,也可以按照姓名的汉语拼音的顺序进行查询。显然,学生们认为后一种方法比较常用,因为其查找效率比较快。此时,教师可以顺理成章地引出在设计一个算法的时候同样也存在的效率问题,如何设计效率高的算法是“数据结构”课程的一个重要研究内容。另外,电话号码是按照结识朋友的先后顺序录入的,而显示的时候却是按照拼音的先后顺序显示的,即电话号码是按照拼音的顺序存储的,这样做的目的是减少号码的查找时间。这说明数据的存储结构可以决定数据运算的效率。利用这个案例,可以让学生较好地理解“程序设计实质=好算法+好结构”这句话。 案例式教学法能够使理论与实际更好地结合起来,消除学生刚接触数据结构这门课程的陌生感。通过对案例内容的分析、讨论和实践,可以帮助学生更好地掌握理论及其实际应用,快速的进入到“数据结构”课程的学习中去。
2.对比和归纳式教学法
“数据结构”课程的很多知识点之间是相互关联的,为了使学生能够更好地掌握每个知识点,可以采用归纳对比的方式授课。[3]比如,线性表是学生接触到的第一个逻辑结构,熟练掌握其对应的存储结构对以后课程的学习大有帮助。在介绍顺序存储和链式存储结束以后,可以对这两种存储结构进行对比归纳:顺序存储结构采用的是连续的存储空间,链式存储结构的存储空间并一定连续,如图1所示;顺序存储结构的优点是可以随机存取元素,缺点是插入、删除时需要移动大量元素;链式存储结构的优点是插入、删除时是通过移动指针完成的,缺点是读取元素时需要从前至后依次读取。
在讲授栈和队列时也可以采用对比归纳教学法。栈和队列的共同点是两者都是特殊的线性表,特殊在插入和删除操作做了限制。不同点是:前者是先进后出,后者是先进先出,如图2所示。通过这样的对比归纳可以使学生更加容易掌握知识点的主要内容,对相近的内容也更容易区分。
3.启发式教学法
启发式教学就是通过在教学中适当设置问题,引导学生积极主动思考,从而提高学生的学习兴趣和主动性。[4]一般情况下,学生们普遍认为链表是比较难掌握的内容,在讲授这部分内容的时候可以多采用启发式教学法。比如,在图3所示的单链表进行读取操作时,若要读取数据ai,可以启发学生ai的地址在哪里?学生自然会想到ai的地址存放在ai-1的指针域中。那么要想表示ai-1的指针域就要知道ai-1的地址,以此类推,还要知道ai-2,…,a1的地址,那么这个过程怎么表示呢?学生就会想到使用循环结构移动指针p=p->next来实现。
在一元多项式相加问题也可以采用启发式教学法,让学生思考一元多项式相加问题的数据对象是哪些?这些数据对象采用何种存储方式更合理?经过对这些问题的思考和分析,鼓励学生们独立定义合适的结构体并写出相应的算法。
在教学过程中采用启发式教学方法,可以培养学生分析问题、解决问题的能力,并在分析、解决问题的过程,激发学生的自主学习热情、提高学习兴趣、培养创新能力。
4.联想式教学法
联想式教学法是在教学过程中通过纵向和横向联系,把抽象的内容和现实生活当中的例子联系起来,以此来调动学生学习的积极性和主动性,达到显著的教学效果。比如,栈和队列的插入、删除位置特殊,为了帮助学生掌握这两种结构的特点,可以将栈结构的入栈操作联想成向一个纸箱子里放书,后放到箱子里的书要摞在上面,出栈操作则联想成从纸盒里取书,后放进去的书要先拿出来。这样,通过联想书的取放过程就可以很轻松地掌握栈的结构特征是后进先出。利用联想式教学法进行教学,不仅可以提高学生的想象力,活跃课堂气氛,还可以使学生迅速掌握新知识,使课堂教学效果显著提高。
5.任务分解式实验教学法
数据结构实验在数据结构教学中占有重要的地位。通过实验可以使学生上机解决一些典型问题,加强学生分析、设计、编码、调试等环节的训练,培养学生正确阐述实验结果、正确绘制系统和程序框图的能力,从而逐步建立正确的程序编写风格。但由于“数据结构”课程的抽象性等诸多原因,这个环节恰恰是学生感觉最困难的地方,学生往往很难将一个实际问题与算法、程序结合起来。
为了充分调动学生的动手积极性,使学生能够独立完成实验内容,可以在实验课上把一个实验题目分解成若干个子任务,指导学生逐步完成这些子任务。比如,在解决约瑟夫环问题的时候,可以把实验内容分解成如下的子任务:
(1)定义结点结构;
(2)输入人数n、初始密码;
(3)输入每个人的编号、密码,建立链式存储结构;
(4)将建立的链式存储结构改造成循环链表;
(5)输出结果
for(1..n)
{
for(1..密码)
{
找到停止报数的人(即找到需要删除的结点);
}
输出删除结点的编号;
获取删除结点的密码;
删除结点;
}
在上述5个子任务中,(1)和(2)两个子任务比较简单,学生基本都能完成;第(3)个子任务可以参照书上的算法或C语言参考书,大部分同学能够独立完成;第(4)个子任务只需要将单链表尾结点的指针域指向头结点,大部分同学也能够在老师的提醒下完成;第5个子任务涉及两个for循环,外层循环控制人数,内层循环控制报数,在找到停止报数的人以后,需要用到链表中的删除结点操作。
通过这样的任务分解,就把一个复杂的问题转换成了多个学生相对熟悉的操作,这样,学生就不会对实验内容感到束手无策了,学生们可以在一步步完成子任务的过程当中,把理论内容和动手实践结合起来,体会到编程的乐趣,同时也增强了学生的自信心。
三、结论
“数据结构”课程是计算机及相关专业的重要理论基础课程,在计算机学科中有着重要的地位和作用。但由于其抽象难懂,传统的教学很难使学生较好的掌握该门课程的内容,尤其是一些难点内容,学生更是感到晦涩难懂。为了解决这一问题,本文从分析数据结构课程的现状入手,以激发学生的学习兴趣,培养学生的动手能力主出发点,提出了三点提高数据结构课堂教学质量的方法。实践证明,通过采用案例教学、对比归纳教学、启发教学、联想教学、任务分解实验教学方法可以提高学生学习的主动性,增加学生学习的兴趣,达到改进课堂教学效果的目的。
参考文献:
[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2010.
[2]董丽薇.“数据结构”课程教学方法的改进[J].沈阳师范大学学报,2012,30(2):307-309.
[3]范德宝,于晓聪,丁伟祥.提高数据结构课程教学效果的探讨[J].黑龙江科技信息,2007,17(1):194.
[4]唐年庆,汪在荣.数据结构中线性结构教学分析[J].内江科技,2011,(2):146-147.
(责任编辑:王意琴)