数据结构教学方法

摘 要 :分析影响数据结构课程教学效果诸多因素,提出改善教学效果的方法.

关 键 词 :数据结构;教学方法;课堂教学;实践教学

数据结构是信息类相关专业本科生必修的专业基础课,以武汉科技大学为例,信息与计算科学系、计算机科学系、电信系、自动化系和信息管理系等均开设有该课程.数据结构旨在帮助学生用计算机解决非数值计算问题,为所处理的数据选择正确的逻辑结构、建立高效的存储结构并实现有效的算法.同时,该课程的学习过程也是学生进行复杂程序设计的训练过程.该课程既涉及硬件存储又涉及软件算法,对学生抽象思维及编程能力要求较高,不少学生在学习过程中感到困难较大,影响了学习信心和学习兴趣,致使教学效果难以达到预期目标.笔者从学生的知识基础、课堂教学和实践教学各方面分析影响数据结构教学效果的诸多因素,并给出提升教学效果的一系列方法.

1.课前准备扫清障碍

目前广泛使用的数据结构教材是严蔚敏编著的《数据结构》(C语言版),为了更清晰地表达算法主体,教材中所有函数的实现采用的是类c语言,并借用了c++中引用调用的参数传递方式.该教材对引用的讲解只有一句话:“引用参数以&打头,除可提供输入值外,还将返回操作结果.”对于没有任何C++学习经验的学生来说,这一句讲解对于他们正确理解引用的用法远远不够.对于只有c语言基础的学生,只知道参数的单向传值,而且函数返回操作结果靠的是函数的返回值,书中对引用的简短描述和他们已有的知识是相违背的.然而,引用符号贯穿教材始末,这直接影响到学生对书中所有算法的理解及实现;引用符号在整本教材所有基本操作对应的函数头中时而出现时而消失,更让初学数据结构的学生感到困难和迷惑,这成为学生学习数据结构的一大障碍.

对于初学数据结构的学生来讲,引用到底是什么?何种情况下需要使用引用?怎么使用引用?C语言编译环境下引用可以调试通过吗?这一系列问题都应在讲授本课程的初始阶段给予详解,并需要设计相应的上机练习帮助学生熟练掌握引用的用法.学生只有在课程初始阶段搞清了引用的含义和用法,在后续章节的学习中才能够轻松理解各类基本操作.根据笔者的教学经验,可以采取两步走的策略引导学生正确认识引用.在讲解过程中给出简单易于理解的例子,并略去引用的内部实现机制,更深入的知识可以在C++课程中学习,具体方法如下.


第一步,帮助学生理解引用的本质是变量的别名,可按以下方法,引用一个整型变量.

inti;//声明一个整型变量i

int&ri等于i;//声明引用ri,ri成为i的别名

ri等于10;//作用等同于i等于10

i等于5;//作用等同于ri等于5

另外,学生第一次见到引用符号时,马上会想到C语言学习时遇到的取地址符“&”,它们的符号相同,如何进行区分呢?在此需要告诉学生区分引用和取地址符的重要法则:引用只在声明语句中使用,并总跟在类型名的后面.

第二步,引导学生认识到引用通常用于传递参数.把引用作为形参,则成为实参的别名,函数体对形参的操作直接作用于实参.根据教学经验来看,在讨论引用参数时给出几种不同形式的用于数据交换功能的函数,有着较好的教学效果,便于引导学生体会、总结引用参数的应用场合,从而顺畅理解书中的各种算法.可按以下方法举例:

例1,无法实现数据交换功能:

void swapl(int x,int y){

intt:

t等于x:

x等于y;

y等于t;

}

例2,可以实现数据交换功能,但指针增加了程序的复杂性:

void swap2(int*x,int*y){

int t:

t等于*x:

*x等于*y;

*y等于t;

}

例3,可以实现数据交换功能,且程序可读性更好:

void swap3(int&x,int&y)f

intt:

t等于X:

x等于y;

y等于t;

}

通过上述例子的讲解,不仅可以帮助学生理解引用参数的作用,而且可以使学生认识到使用引用参数的意义.教材中所有使用引用参数的函数都可以转化为指针传递的形式,但使用引用参数可以使算法的可读性更好.在数据结构教学的初始阶段,补充强化学生所欠缺的知识,可以帮助学生扫清学习数据结构的障碍并建立起学习信心.

2.课堂教学注重引导

2.1引导学生参与问题思考

数据结构教材对知识的讲解严谨简洁,但是对知识的表达过于生硬,缺少对问题背景、存储结构及基本操作实现方法设计思想的讨论,致使部分学生在数据结构的学习过程中习惯于记忆各种存储结构的表示方法或算法流程,却未能理解各种存储结构、基本操作实现方法构造的内在原因.这些学生往往可以获得比较高的考试分数,却没有真正掌握数据结构的灵魂,更谈不上在未来学习工作中灵活运用数据结构知识.因此在数据结构课堂教学中应特别强调对各类问题求解方法的思考,让他们真正参与到知识理解与消化的过程中,使其学到数据结构的思想精髓,而不是浮于课程内容表面.

例如在讲授线索二叉树这一节内容时,学生往往习惯于去记忆线索二叉树结点存储结构的表示方法,同时只关注怎么按题目要求画出线索二叉树的逻辑结构或存储结构,却忽视设计线索二叉树这种结构的原因,以及在何种场合需要使用线索二叉树.在讲授该节内容时,应花一定的时间带领学生思考并参与到线索二叉树结构设计的问题中来.首先引导学生思考“使用递归策略遍历二叉树会带来什么问题”,在讨论该问题的同时加强学生对递归算法特点的认识:容易实现,但执行效率低.为了提高遍历二叉树的效率,会考虑采用非递归算法,因此需要引导学生逐步思考以下问题: “非递归算法在遍历过程中需要知道二叉树中各结点在遍历序列中前驱后继的信息,为达到这个目的我们应该怎么办?”

“为二叉树每个结点加上两个指示前驱后继的指针域好不好?”

“对于,1个结点的二叉树有多少空链域?”

“我们如何利用这些空链域?”

在引导学生思考上述问题的过程中,一步一步引出二叉线索树的结构设计.按照这样的思路展开讲解,不仅使学生知道什么是线索二叉树,更让他们知道为什么要设计这样一种结构,以及在解决具体问题时,何种情况下会倾向于选择线索二叉树来提升系统的时间效率.

为使学生知其然并知其所以然,在数据结构课堂教学环节中,应防止枯燥的单向传授;设计问题情境引导学生,使其在学习过程中养成思考的习惯,并深刻体会到任何存储结构、算法并非凭空而来,而是根据解决问题的需要精心设计.

2.2引导学生把握知识架构

有些学生在该课程的学习过程中,容易忽视对知识的贯穿与联系,在头脑中难以形成整体的认识,从而更进一步增加学习的难度.在数据结构教学过程中应引导学生把握学习的主动权,各个章节都遵循着抽象数据类型—存储结构一基本操作的实现一应用数据结构解决具体问题这样一条线索展开知识的讲解,并强化学生对该知识体系的认识,从而降低学习的难度.

2.3激发学生学习兴趣

数据结构课程教材的讲解偏重各种数据的逻辑结构、存储结构及操作的实现算法,却很少给出各种数据结构的应用案例,致使学生无法想象所学知识的真实应用场景,使得学习过程枯燥无聊.因此,需要在教学过程中演示一些学生能够理解的应用案例.诸如在讲解“栈”时,可以给学生演示具有优先级的计算器程序,并和Windows系统自带的计算机程序进行比较,使学生直观认识到“栈”在实际开发中的作用;在讲解“树”时,可以给学生演示三维人体运动程序,其中人体骨骼就是用“树”给予存储表示,的实现靠的是每一帧对人体树进行遍历来计算其各个关节点在图像中的位置信息,从而使学生直观认识到“树”在软件开发中的作用.这些演示程序,既可以加深学生对数据结构的认识,又可以提升学生的学习兴趣和主动性.

3.实践教学由浅入深

数据结构是一门理论与实践并重的课程.该课程的教学要求之一是训练学生进行复杂程序设计的技能,其重要程度不亚于知识传授.在学习数据结构之前,学生只有一学期C语言程序设计的学习经验,此时学生的编程经验还很薄弱,部分学生甚至对结构体类型的定义、函数体的定义和函数调用方法都不熟练.而数据结构教材对各种存储结构都以结构体类型的定义给予实现,各种存储结构之上的基本操作都以函数的形式给予实现,书中没有学生在学习C语言时熟悉的主函数,这使得学生在初学数据结构时感到陌生和无所适从.因此,实践环节的具体内容需要精心设计,对于各章节的内容应采用进阶的方法给予训练.

对于各章内容的实践训练,第一阶段要求学生编程实现各种存储结构的演示系统,通过人机交互式命令,测试验证所设计的存储结构及各种基本操作.该训练一方面可以加深学生对教材中各种存储结构及基本操作的理解,另一方面可以帮助学生巩固c语言程序设计的知识.

第二阶段引导学生利用演示系统已实现的数据结构解决某个具体应用问题.例如,在“栈”这一章,可以先要求学生根据教材提供的算法设计并实现具有运算优先级的能处理10以下整数的计算器.然后再要求学生为程序增加词法分析功能,使其可以处理10以上的整数.最后进一步完善程序,使其能够处理带小数点的数据.该训练一方面能够提升学生实现复杂算法的能力;另一方面,由于程序实现涉及多个问题,因此可以引导学生学会组织大规模程序结构.最后,在程序功能逐步完善的过程中,使学生认识代码重用及程序的可扩展性在实际开发中的重要性,并能够基于以上两点设计出正确的程序结构.

按照上述由浅入深的方法设计配套上机练习进行实践教学,有利于学生建立起编程的信心,并体会到征服困难与不断进步的成就感;使他们在牢固掌握书中所提供的各种算法的基础上,对各种数据结构的意义产生更深刻的认识;另一方面,也有利于逐步培养学生大规模程序设计的能力,使其程序开发能力上升到一个新的台阶.

4.结语

数据结构是一门重要的专业基础课,学生对该课程的掌握程度直接影响其后续课程的学习效果及未来从事软件开发工作的能力.笔者提出的在教学各环节有效提升教学效果的方法,仅供同行参考.

类似论文

“数据结构”教学与教材

摘 要:本文回顾了著者三十多年来从事“数据结构”教学与研究的主要经历,重点介绍。
更新日期:2024-11-3 浏览量:19130 点赞量:5323

独立学院数据结构与算法课程教学改革

摘 要: 对独立学院中数据结构算法课程的教学现状进行了分析,阐述了在教学内容、理论课堂教学方式,以及上机教学实践环。
更新日期:2024-7-11 浏览量:94929 点赞量:21396

应用型本科院校数据结构课程教学改革

摘 要: 数据结构课程的教学在应用型本科院校存在着较大难度 为此,分析了该课程的教学现状,并以软件学院Ja数据结构课程改革作为参。
更新日期:2024-1-23 浏览量:22513 点赞量:6652

《数据结构》的学习方法

摘 要:“数据结构”在计算机科学中是一门非常重要的综合性的专业基础课,其内容丰富,涉及面广泛,但却存。
更新日期:2024-10-3 浏览量:17808 点赞量:5029