您好, 访客   登录/注册

也谈“数据结构”的教学

来源:用户上传      作者:

  摘要:本文对目前“数据结构”的教学现状进行了分析,指出了在教学中存在的问题,并根据自身的教学经验分析了产生这些问题的原因,针对这些原因并结合本人在教学中的实践经验提出了一些对策。
  关键词:数据结构;算法;教学
  中图分类号:G64 文献标识码:A
  文章编号:1672-5913 (2007) 15-0020-04
  
  Discuss on Teaching Data Structure course
  Wang Yu-feng1 , Liu bao-zhi1 ,Wang Meng1, Wei Li 2
  (1.Department of information science and technology, JiNing Medical College, RiZhao ShanDong 276826
  2. Department of computer,JiNing profession technology college,JiNingShanDong 272100)
  Abstract: In teaching data structure course, there are many problems both in teaching and study.In this paper ,the author analyze the reasons of this questions and propose some ways to improve the quality of teaching and enhance the students’ abilities in solving practical problem.
  Key words: Data Structure;Algorithm;Teaching
  
  1“数据结构”课程的教学现状
  
  “数据结构”是计算机程序设计的重要理论技术基础,也是计算机学科的核心课程。本课程的学习目标就是培养学生的数据抽象能力以及培养他们具备基本的、良好的程序设计技能,可以编制高效可靠的程序,为后续课程的学习如“操作系统”、“编译原理”、“人工智能和数据库”等奠定基础。笔者在近几年的教学工作中发现学生在学习这门课程时还存在很多问题,具体表现在初学“数据结构”,不知所然;学完之后,不知所云。学生很认真地去听课,但学后不知道学习“数据结构”有何用处,在编程过程中也没有体会到学习“数据结构”的益处,面对算法无从下手。对于教材上的算法,学生看得懂却无法转化成程序,从而导致学而无趣;教师在授课中也很努力,但课堂气氛沉闷,教学效果很不理想,教师的普遍反映是“数据结构”课的教学是“出力不讨好”、“难学难教”,等等。由此反映出在“数据结构”的“教”和“学”中还存在着一些需要改进的地方。
  
  2成因分析
  
  2.1前导课不扎实
  学习“数据结构”需要有“离散数学”、“概率论”的知识和程序设计的能力。没有相关的数学知识基础,在学习的过程中做算法的时间复杂度分析或者在利用图或树型结构的某些知识来讨论非线性结构时就会碰到许多困难。而基本的程序设计能力更是学好“数据结构”的基础条件。“数据结构”本身就是为程序设计提供方法性的指导,其中的算法大都由类PASCAL、类C、C++或Java语言描述而成,而学生在学习“数据结构”时,大都刚刚开始接触程序设计语言,对程序设计语言的许多约定理解不透彻, 基本的程序设计思想并没有完全建立起来,用计算机解决问题不能得心应手,更谈不上把所学的知识融会贯通。因此,在碰到“数据结构”中大量设计巧妙甚至某些较为复杂的算法时感到“头晕目眩”也就不足为怪了。
  2.2教材理论性强
  “数据结构”是一门理论性很强的课程。其初衷就是培养学生的数据抽象能力,因此为了突出其数学特性,“数据结构”中许多定义的描述就显得非常抽象,不好理解。另外,当前教材普遍采用的是以“算法为教学模块”的编写方式,几乎所有算法都没有完整的源程序实现,这无形中也给学生更好地理解算法带来了很大困难。另外,还有些教师没有很好地研究教材,教学方法落后,教学手段单一,进教室就“念书”而无视学生反映,给学生学好“数据结构”带来许多教材之外的困难。
  2.3上机实践少
  “数据结构”同时也是一门实践性很强的课程。学完本课程就应该具备在面对一个实际问题时,能够选择合适的数据结构和算法进行程序设计的能力。但由于实验学时有限或碍于授课教师对课程内容的理解不到位或程序调试能力较弱等原因,使得在教学过程中有意无意地弱化了“数据结构”的实践环节,而对算法的讲述又仅限于主体部分,算法的其他部分一律省略。这样客观上给本来就“不得其门而入”的学生造成一种印象:“数据结构”就是一门研究理论的课程,无需也不能实践,老师所讲不过是“纸上谈兵”,没有实际用处,从而导致学习没有动力乃至厌学。
  
  3教学对策
  
  笔者在多年“数据结构”的教学过程中总结了一些心得。
  3.1提纲挈领,从总体上把握
  “数据结构”内容繁多,刚开始接触确实让人有些“摸不着北”。因此,上课伊时就明确的告诉学生本课程的内容分类和地位,以利于学生高屋建瓴,从总体上把握本课程。
  以严蔚敏老师的《数据结构(C语言版)》教材为例。授课内容可大体划分为四大块:第一部分是绪论,以介绍“数据结构”的地位、目的、内容定义(逻辑结构、存储结构)和算法分析为主。第二部分指线性结构,包括线性表、栈、队列、串、数组和广义表。第三部分指非线性结构,包括树、二叉树和图。第四部分主要包括查找和排序算法。有了这个框架,学生在学习的过程中就会感到条块清晰,而不是原来的“乱花渐欲迷人眼”了。
  另外,在教学的过程中,教师要始终坚持并强调“一个中心,两个基本点”。“一个中心”指“数据结构”是一门研究非数值运算的程序设计问题中计算机的操作对象及相互间的关系和运算的学科。非数值运算问题的特点在于对数据所进行的操作一般较为容易,多为插入、删除、查找、排序、更新之类,但数据量大,因此合理的数据组织形式就显的尤为重要。这一点是和学生在程序设计语言课中接受的训练大为不同。授课过程中必须尽快帮助学生加深对非数值运算程序设计问题的认识,这样有助于学生理解本课程的学习目的。“两个基本点”指逻辑结构和存储结构。逻辑结构是指相互之间存在一种或多种特定关系的数据元素的集合。教材中谈到四种逻辑结构:集合结构、线性结构、树型结构、图或网状结构。对这四种逻辑结构可大体上归结为两种:线性和非线性结构,其包含的内容如本文前面所述。存储结构是指数据结构在计算机中的表示。有两种存储结构:顺序存储和链式存储。对每种数据结构的讲解,都按照逻辑结构(数据关系)、存储结构、操作和算法分析的步骤来进行。这样在教学的组织上既保证了课程的逻辑性,又可强化课堂教学,还利于学生对学习内容进行横向类比,加深理解。
  3.2重视前导课,成立课程组
  向学生强调前导课的重要性,并督促他们复习。对关键的知识点,以C语言为例,如函数、指针、结构体等部分的内容在算法讲解或实践教学过程中应适时地加以引导或强化。
  成立“数据结构”及相关前导课程的课程组,对于“数据结构”的教学是非常必要和有益的。课程组对整个课程体系内容的编排进行集体讨论,使得授课教师对整个体系有个总体把握。这样可实现“数据结构”与其相关的前导课之间紧密衔接,避免出现前后脱节。在我们成立的课程组中有教授、副教授、讲师共计6人,师资队伍职称比例合理,且全部具有硕士学位。在课程组成立后,我们一直坚持集体备课,课程体系、教学方法集体讨论,大家集思广益,取长补短,各尽所能。为加强师资队伍建设,课程组建立了青年教师培养导师制度,充分发挥老教师在专业技术、科学研究、授课水平方面的“传帮带”作用和青年教师精力充沛、进取心强的特点,努力把课程组建设成一支科研有方向、学术有专攻的高水平教师队伍。从2004年至今,课程组共承担省、厅、校各级各类科研课题15项,发表论文近20篇。正是有了科研的“源头活水”,有了创新的切身体验,教师讲起课来才会显得游刃有余而不是照本宣科,才能做到“授人以渔”而不是“授人以鱼”,才有可能做到像古希腊哲学家说的那样“传授的是智慧,而不是学科”。

转载注明来源:https://www.xzbu.com/8/view-8711567.htm