数据结构课程新型教学方法思考与实践

计算机教育 / 2018年01月09日 11:21

新闻

面向应用的数据结构课程教学改革与实践

马竹娟+陈明华+汪宏喜+尹超

摘 要:针对学生对数据结构课程认知“乏”、水平“弱”、掌握“难”的现象,以绪论部分教学为例,提出利用虚拟实验平台演示、借题发挥、化繁为简等多样化教学方法,提高学生学习的兴趣和探索的欲望。

关键词:数据结构;虚拟实验平台;教学方法

文章编号:1672-5913(2017)07-0085-04

中图分类号:G642

1 教学中遇到的问题

数据结构课程内容比较抽象,理论性较强,学习和理解这门课的时候有一定的难度,但在实际教学中遇到的最大的困难,不是“会不会”,而是“学不学”。很多学生在接触数据结构的第一堂课时就没有学好这门课的欲望,原因主要可以分为3种。

(1)因为“乏”而没有兴趣。缺乏对数据结构知识的了解,不知道学习数据结构有什么用或者盲目地认为数据结构只是程序设计的延伸,从而没有学习兴趣。

(2)因为“弱”而没有兴趣。一部分学生由于未能熟练地掌握C语言,尤其是缺乏对指针、数组、结构体等内容的理解,还没有理解算法与代码的区别,因此在看到满教材的类C语言伪代码时,便早已望而却步。

(3)因为“难”而没有兴趣。数据结构课程的知识介于数学、计算机软件、计算机硬件之间,理论性很强,内容较抽象[1]。如果仅用单纯的口头讲授、枯燥的黑板板书的传统授课形式,理解力不强的学生很容易产生畏难情绪,失去对这门课程的学习和钻研兴趣。

我们以绪论为例,针对上述3种现象,以激发学生学习兴趣为主旨,提出:①以课程概述填补学生知识之“乏”,辅以虚拟实验平台展示,使学生认清学习目标;②借助答疑,进行知识展开,使学生正确自评,避开“弱”项,勇于探索知识;③以化抽象为具体、化繁为简的方法,使“难”懂的问题变得容易理解,使学生不仅能学会,而且能学好;④以动画演示和图文并茂的教学方式,令课程更加生动有趣。

2 教学方法及实践

绪论部分作为数据结构课程的先锋,必须承担起“先声夺人”的任务:就是在第一堂课让学生比较透彻地理解数据结构的含义,从宏观上了解数据结构的内容以及它在课程体系结构中的重要位置。针对学生畏难现象,教师可采用概述补“乏”、实验提鲜,借题发挥、识强避“弱”,化繁为简、变“难”成易,图文并茂、动画结合等教学方法,引导学生自主、自觉地完成学习,激发学生学习的热情和兴趣。

2.1 概述补“乏”、实验提鲜

对数据结构课程进行统领性介绍,可以使学生对整个课程内容有宏观上的了解,同时明确其在计算机学科中的重要地位。除了内容的概述,绪论部分还有许多基本概念和术语的介绍,如果仅凭口头讲解和板书,就很容易产生呆板、沉闷的课堂气氛。为了避免概念的枯燥堆砌,教师应尽量增加实验展示或实例讲解。我们建立了虚拟实验平台,用来展示数据结构中的各种实验,使学生对各种结构特性一目了然,如利用虚拟实验平台建立的栈结构,向学生演示数据入栈和出栈操作,如图1所示。栈结构是一种只允许在一端进行插入和删除的线性结构,数据插入的一端为栈顶,数据的插入操作称为入栈,具有后来居上的特点。栈结构的出栈操作,如图2所示,明显具有后进先出的特点,因此栈又被称为后进先出(last in first out,LIFO)表。直观的实验结果不仅可以加深学生对知识点的记忆,还提高学生进一步探索学习的兴趣。

2.2 借题发挥、识强避“弱”

教材使用类C语言作为数据结构和算法的描述语言,与实际运行的C语言程序是有区别的。类C语言利用了C语言的特点,而又不拘泥于C语言的细节。C语言掌握不好的学生在上机实验環节会有难度,但并不影响对核心算法的正确理解。如果是因为没有学好C语言而主动放弃学好数据结构,那么更是因小失大,因此,教师在绪论部分要借助少量的核心算法进行讲解,明确算法与程序之间的联系和区别。

例如,教师在讲解算法时间效率问题时,可利用冒泡排序算法进行讨论。冒泡排序算法如下:

void bubble_sort(int a[],int n)

{for(i=n-1,change=true;i>=1&&change;--i)

{change=false;

for (j=0;j

if(a[j]>a[j+1])

{ a[j]a[j+1];change=true;}

}

}

它只是借助类C语言描述冒泡排序的方法。如果需要以程序的形式输出结果,就要按C语言的语法要求进行修改和加工。程序代码如下:

#include

void Bubble_Sort(int a[], int n)

{int i,j,t,change;

change=1;

for (i=n-1,change=1;i>=1&&change==1;--i)

{change = 0;

for (j =0; j< i; j++)

if (a[j] > a[j+1])

{t=a[j+1];

a[j+1]=a[j];

a[j]=t;

change = 1;

}

for(i=0; i

printf("%d ", a[i]);

printf("\n ");

}

}

int main()

{int i;

int a[8] = {49,38,65,97,76,13,27,49};

printf("未排序数为:\n ");

for(i=0; i<8; i++)

printf("%d ", a[i]);

printf("\n ");

printf("每次排序结果为:\n ");

Bubble_Sort(a, 8);

return 0;

}

在亲历算法改写成程序代码的过程中,学生可以很清楚地认识到算法和程序不能等价,因此完全不必因为没有学好C语言而对数据结构望而却步,反而能够因为学好数据结构而更加熟练地操作C语言。

在对有序序列进行冒泡排序的实验对比和讨论中,学生也能很容易观察到,经过改进的算法可以在最好的情况下,即排序序列本身有序的情况下,只执行一次循环就结束程序,在时间效率上有很大的提高,如图3、图4所示,由此便可理解优化算法的意义,讨论算法效率的必要性以及“时间复杂度”的概念。这些结论不是教师填鸭式的知识灌输,而是由学生通过实践、观察和讨论后自己总结得出的,不仅可以锻炼学生的实践能力,还能使学生学习的主动性、学习兴趣和热情大幅度提高。

2.3 化繁为简、变“难”成易

数据结构在很大程度上依赖于数学的基础,许多概念是以数学的方式表达描述的,含义精准,但抽象难懂。教师在授课时,可以采用化繁为简、化抽象为具体、用口语化语言表达等方式,使学生对知识要点理解得更加透彻。例如,“数据结构”的定义为:数据结构是一个二元组

Data_Structure={D, S}

其中,D是数据元素的有限集,S是D上关系的有限集[2]。

如果把抽象的数学表达转化为具体的算式“数据结构=数据元素+元素关系”,则更加容易被学生理解。最常见的数据結构莫过于学生在初中、高中就接触过的方程式,它就是一种数据结构,未知数x, y构成的方程就是它们之间的约束关系,计算结果是一个具体的数值。在非数值领域如信息管理、人机对弈等,数据之间的约束关系就呈现出一对一、一对多等情况,而这正是数据结构课程所要讨论的内容。经过化繁为简,化抽象为具体,学生对概念的理解更为清晰。其实,数据结构后续章节里的很多抽象概念或数学表达式都可以采用这种方法,改用比较通俗、具体的语言去讲解和描述。这种理解方法的转变可以在很大程度上缓解学生畏难的情绪。

2.4 图文并茂、动画结合

加入图像、Flash动画等辅助措施不仅能够提高数据结构知识讲解的条理性,还可以使枯燥的理论变得有趣味,如在绪论中的一道例题可以用来描述课题小组导师、研究生和本科生的数据结构,如果单从定义的角度进行讲解,则晦涩难懂,但加以图示说明,则很容易理解,如图5所示。这种数据结构具有明显的层次性,是一对多的树型结构。

在数据结构后续章节的讲解中,如哈夫曼编码、最小生成树、拓扑排序等知识,教师更需要利用图像和Flash动画加以演示,使知识要点更清晰,学生对算法的理解更透彻。

3 结 语

采用概述补“乏”、实验提鲜,借题发挥、识强避“弱”,化繁为简、变“难”成易,图文并茂、动画结合等教学方法,结合虚拟实验平台演示、实验动画展示等多样化教学手段,可以不断增进教学质量,充分调动学生的学习热情,提高和培养学生的学习能力。图6所示为2011—2014级学生学习本课程的期末考试平均成绩。除了2012级学生成绩因试卷难度偏大而造成平均分略有降低之外,学生成绩基本呈上升趋势,说明我们提出的几种教学改良措施是积极有效的,课堂的内容生动有趣可以大大提高学生的学习兴趣。

参考文献:

[1] 沈鹏飞. 数据结构及其在计算机科学中的作用和地位[J]. 自然杂志, 1986, 9(6): 447-452.

[2] 严蔚敏, 吴伟民. 数据结构[M]. C语言版. 北京: 清华大学出版社, 2009: 5.

(编辑:宋文婷)

1.环球科技网遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.环球科技网的原创文章,请转载时务必注明文章作者和"来源:环球科技网",不尊重原创的行为环球科技网或将追究责任;3.作者投稿可能会经环球科技网编辑修改或补充。