章丽玲
(湖北第二师范学院 计算机学院,武汉 430205)
数据结构课程是计算机相关专业的专业核心课程,其主要的教学目标为:让学生理解如何有效的组织、存储和处理数据,正确地设计算法以及对算法复杂度进行分析和评价,从而培养学生具备抽象建模能力、算法设计与分析能力及解决复杂工程问题的能力等。然而数据结构教学中面临两个主要问题,一是:学习内容抽象,算法繁多且枯燥,学生很难理解,导致学生学习信心不强,兴趣不高;二是:理论教学与实际应用容易脱节,学生不能学以致用,导致学生学习动力不强,不利于学生各项能力的培养。为了解决这两个问题,本文提出以能力培养为核心的教学模型,如图1所示,模型中教学目标、教学内容、课后作业、闯关实践四部分围绕能力培养这个中心进行,同时四部分内容相辅相成,相互推动,根据教学目标,确定教学内容,由教学内容提炼课后作业,根据课后作业完成闯关实践,通过闯关实践,进一步巩固教学目标并进入下一个更高目标的学习,这样,形成一个良性的学习闭环。
图1 以能力培养为核心的教学模型
由于学生学习能力的差异性,因此在教学中要求老师能够因材施教,然而在教学中老师很难做到,因此,围绕培养能力,合理进行分层教学是必不可少的,分层遵循由易到难,由浅入深的原则,这样可使不同层次的同学都能够有所收获,充分调动每个学生的学习积极性。具体开展分层教学对应的关系如表1所示。教学目标主要根据教育学家布鲁姆提出的认知领域的教学目标分三层:分别对应理解记忆、分析应用和创造评价三层;教学内容根据学生的认知程度分为:核心基础、应用分析和综合应用三层。课后作业根据教学内容分为:基础题、扩展题和综合应用题三层。闯关实践以游戏闯关的形式进行分层,具体分为验证性、设计性、综合性实验和创新性实验。
表1 能力培养与各项分层设计关系
教育学家布鲁姆认为,认知领域的教育目标包含由低级到高级、由简单到复杂的六层次,分别为记忆、理解、应用、分析、评价和创造。我在这里将记忆和理解、应用和分析、评价和创造进行综合,将数据结构的教学目标分为初级目标、中级目标和高级目标,教学目标分层图如图2所示:
图2 教学目标分层图
知识领会目标:掌握线性表的定义,逻辑结构特点;领会两类存储结构设计方法以及各自的优缺点;掌握顺序表和单链表基本运算实现方法;掌握有序表的特点等。
应用分析目标:掌握顺序表和单链表算法设计和应用;掌握有序表的归并算法设计方法;有序表的应用
综合评价目标:利用线性表求解复杂的应用,在掌握经典的查找和排序算法的基础上,能对算法进行分析和评价。
根据教学目标及教材的内容,将教学内容分为三个层面,一是:学生必须掌握的核心基础部分,以掌握基本概念和原理为主,算法设计较为简单,二是:应用分析内容,这一部分的内容是在前一部分内容基础上的扩展,引导学生做到能将所学的内容加以应用,举一反三。三是:综合应用内容,这部分相对比较抽象,算法复杂,主要引导学生能够应用所学的知识应用于日常生活实践,培养学生分析问题和解决问题的能力。现以单链表为例来进行教学内容分层设计。
核心基础内容:单链表的类型说明与定义,单链表基本操作的实现(插入、删除、头插法建表、尾插法建表),线性表基本操作在单链表中的实现(初始化、销毁、判空、求表长、输出、定位、查找、插入和删除等)。
扩展部分内容:引导学生利用核心基础内容,实现单链表相对复杂的应用。如:拆分单链表、求单链表中元素值最大和最小结点、单链表排序等。
提高部分:实现学生信息表的日程管理,这部分内容引导学生将前两部分所学的内容应用于日常工作实践,首先引导学生实现一个班级的学生管理,然后扩展到一个年级和一个学校。重在培养学生解决复杂工程问题的能力。
课后作业主要根据教学内容进行提炼,同样分为三个层次:基础题、扩展题和综合应用题。根据教学内容,将需要完成的作业设置不同的难度系数,难度系数分为易、中和难,学生可以根据自己的实际能力完成不同难度系数的作业,对于中等难度的作业,大部分学生跳一跳也能完成,这样,不仅学生的能力得到很大的提高,同时,增强了学生学习的信心。
基础题主要目的是巩固、强化数据结构理论课教学过程中的核心知识点,培养学生运用所学基本概念、基本原理和编程技能实现通用数据结构及其典型算法的能力,如简述线性表的两种存储结构的主要特点;简述单链表设置头结点的作用;设计一个算法,将元素x插入到一个有序顺序表的适当位置,并保持有序性。
扩展题主要是在基础题的基础上进行扩展,使学生能够举一反三,增强学生的发散思维能力,例如对线性表进行插入和删除操作的作业进行扩展,删除线性表中的最大元素,并在最大元素之前插入元素x,如何用高效的算法删除线性表中所有值为x的元素等。
综合应用题是在扩展题的基础上进行综合运用,主要培养学生综合运用顺序表的知识进行相关算法分析,提高解决实际问题的能力,如分别用顺序表和单链表实现学生管理系统,比较分析他们的特点,并针对插入和删除算法做时间和空间复杂性分析。
实践是数据结构教学中必不可少的一环,只有把理论知识应用到实践中,学生才能深刻理解理论的内容,从而更好地指导实践。为了激发学生实践的热情,本文的实践内容以游戏闯关的形式进行分层,具体分为验证性、设计性、综合性和创新性实验,具体内容如表2所示。
验证性实验主要实现顺序表和单链表的基本操作和一些常规算法的实现,教学目的是让学生掌握数据结构的基本概念,培养学生抽象建模的能力。以单链表的实现为例,闯关题包括:头插法或尾插法整体建表;判断单链表是否为空;求单链表的长度;输出单链表;求单链表中第i 个元素值;按元素值查找;插入数据元素;删除数据元素。每一个闯关题难度都很小,同学们都很容易实现,这样,既提高了学生学习的信心,也增强了他们进一步闯关的动力,实现时,要求学生把这些基础函数库形成一个头文件,供后面其他程序调用。
设计性实验,主要是在验证实验基础上的扩展,进一步提高学生的分析和应用能力,同样以单链表为例,闯关题一:以给定值x为基准将单链表分隔成两部分,所有小于x的结点排在大于或等于x的结点之前,该闯关题主要考查学生对头插法和尾插法的灵活运用,闯关题二:应用有序单链表,实现两个多项式的相加和相减,该闯关题主要考查学生对经典算法二路归并算法的灵活运用。虽然设计性实验有一定的难点,但都在学生的能力范围之内,学生在掌握验证性实验的基础上,进一步完成设计性实验,大大提高了学生的编程能力。
综合性实验是在验证性实验和设计性实验的基础上的一个综合运用,这个实验内容难度较大,主要目的是培养学生的综合运用能力,提高学生分析和解决实际问题的能力、创新能力等。闯关题样例:简单的学生信息管理。学生记录包括:学生学号(no)、姓名(name)、5科成绩(数学、英语、政治、专业课1和专业课2)、总分,分别用顺序表和链表实现学生信息管理,包括,学生表的创建、学生信息查找、插入、删除、定位、排序等操作。这个综合实验是在前面验证性实验的基础上稍作修改,如把ElemType的int类型改为学生信息这个结构体,相应地修改输入和输出的格式即可完成学生信息管理。
创新性实验为可选实验内容,主要是为那些学有余力的学生设计,创新型实验在综合性实验的基础上的扩展,大部分来自生活实际问题及工程应用等,可锻炼学生的科学研究能力和工程应用能力。上面的综合实验只要求学生完成一个班的学生信息管理,在创新性实验中,可扩展为一个年级或是一个学校的学生信息管理,在数据结构的处理上,可引导学生将顺序结构和链式结构结合起来实现,提高了学生解决复杂工程问题的能力。
表2 闯关实践分层
通过分层式教学设计与实践,使得不同层次的学生都有所收获,在体验了学习成功和快乐的同时,极大地调动每个学生学习的积极性,进而提高了学生抽象建模能力、比较分析能力和解决复杂工程问题的能力,真正做到“授人以鱼不如授人以渔”。