面向对象的数据结构的教学方法研究
2016-01-18任平红陈矗刘清秀
任平红++陈矗++刘清秀
摘要:数据结构是一门核心的计算机专业基础课,其主要的描述语言已由C语言逐渐转变成C++。通过对课程教学现状的分析,将面向对象的思想融入数据结构的教学中,提出了教学改革的几个方法。通过使用对比分析法、实例引导算法、重视课程设计等,使学生更深刻地理解数据结构,有效地改善了教学效果。
关键词:面向对象;数据结构;C++
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2015)33-0095-02
Research of Teaching Method of Object-Based Data Structures
REN Ping-hong, CHEN Chu, LIU Qing-xiu
(School of Information Science and Engineering,Qufu Normal University, Rizhao 276826,China)
Abstract: Data Structure is a core basic theoretical course of computer specialty. The main description language has gradually changed from C to C++. Through the analysis of the present situation of teaching, the object oriented idea is integrated into the teaching of data structure, and several methods of teaching reform are put forward. By using the comparative analysis method, taking advantage of examples to guide algorithms and paying more attention on teaching design, so that students have a deeper understanding towards data structures, and the teaching effect has been obviously improved.
Key words: object-based; data structure; C++
数据结构是一门重要的专业基础课,在计算机相关专业的教学体系中处于核心地位,是学习操作系统、数据库、编译原理、软件工程等课程的基础。早期的数据结构一般采用面向过程的程序设计语言描述,例如C语言或者Pascal语言。由于面向对象的方法能够更好地描述现实世界,因而面向过程的程序设计已逐步被面向对象的程序设计所取代。数据结构的描述也逐步采用面向对象的C++语言或Java语言。数据结构中涉及线性表、栈和队列、字符串、树和二叉树、图等诸多逻辑结构,每种逻辑结构具有特定的操作,并且元素的类型不确定,更适合使用面向对象的思想描述。由于数据结构理论性强,涉及大量的算法,学生普通反映较难,往往不能深刻理解各种算法的思想,不能根据实际需求设计并实现相应的算法。
针对上述问题,结合多年的教学经验,提出了面向对象的数据结构教学的一些改革方法,实践证明,这些方法可以有效地解决上述问题。
1 现状分析
数据结构是一门理论性很强的课程,在学习数据结构之前,学生一般只学习了计算机文化基础、C++语言等基础课程,对数据结构的作用理解的不够深刻,体会不到其重要性。课程中所涉及数据结构和算法较多,抽象性强,学习效果达不到理想要求,并且会直接影响到后序课程的学习。目前,数据结构的教学中存在的问题主要有以下几点:
1.1 前导课程的基础薄弱
在C++程序设计语言的学习过程中,由于受学时所限,一般会把教学重点放到基本的数据类型(例如整数、浮点数、字符等)、类和对象的特性、继承和派生等内容上。学生对指针、模板类等知识点掌握的不够熟练,而这些又恰好是描述数据结构的重点,导致有的学生看不懂类的ADT定义,无法读懂包括指针或模板类的算法[1]。
1.2 对数据结构的作用理解模糊,学习积极性不高
因为程序设计语言的教学重点一般为基本语法,所涉及的例子比较简单,使用的数据有时是简单的数据类型,有时是数组或结构体等。这些数据结构理解起来比较简单,学生体会不到复杂的数据结构的重要性。
1.3 对实践环节的重视不够
目前,数据结构的教学仍然采用传统的模式。教师讲授,学生听讲。每周安排一定的课时实践练习。教师在课堂上安排的实践作业,学生独立完成可能会存在困难。学生的自我约束力差,并且实践环节一般难于考核,导致理论和实践出现脱节的现象,同时实践环节不能正常完成会影响课堂讲授的效果,学生对算法的认识只停留在理论阶段,不能通过具体的实例与理论知识相互印证[2]。
1.4 面向对象的数据结构的学习资料缺乏
数据结构的学习资料绝大部分是使用面向过程的语言描述的,例如C语言。虽然面向对象的程序设计的学习资料较多,但和数据结构相相关的资料较少。目前面向对象的数据结构的教材主要为使用C++语言描述和使用Java语言描述的[3]。
2 面向对象的数据结构的教学方法
2.1 重点复习相关的基础知识
在课程正式开始之前,先了解学生对指针和模板类的掌握情况。针对学生掌握的比较薄弱的知识点,进行重点复习,并说明指针和模板类用于描述数据结构的重要作用。可以接合实例说明,例如顺序表对应的模板类SeqList的设计与实现。
2.2 将对象和数据结构相结合
每种逻辑结构都有相应的存储结构,例如线性表可采用顺序表或链表进行存储。而顺序表和链表都具有各自的属性和操作集合。此特点与类的对象的特点相统一。线性表中的元素具有相同的类型,但是并没有限定使用何种具体的类型。C++语言中的模板类可以描述类中元素类型不确定的类。使用模板类描述物理结构,能更好地体现面向对象的思想。例如使用模板类描述单链表结构[4],代码如下:
template
class LinkList{
public:
LinkList(); /*无参构造函数,构造空的单链表*/
LinkList(T a[],int n); /*根据数组a构造单链表*/
int Length(); /*返回单链表的长度*/
T Get(int i); /*返回逻辑上的第i个元素*/
int Locate(T x); /*返回元素x的逻辑次序*/
void Insert(int i, T x) ; /*在单链表的第i个位置上插入元素x*/
T Delete(int i) ; /*删除单链表的第i个元素,并返回元素值*/
private :
Node
};
2.3 使用实例引导算法
数据结构涉及算法较多。如果直接讲解复杂算法的思想,学生会感觉到困难,不易理解。怎样引导学生带着兴趣和问题去学习是值得思考的问题。可以使用实例引导算法,例如快速排序算法,使用一个待排序序列进行快速排序,在排序过程时,将排序算法的思想穿插其中。然后再使用伪代码引入算法的描述。此方法可以降低授课难度,提高学生的学习积极性,改善授课效果。
2.4 使用对比分析法梳理相关的知识点
数据结构中有许多相关的知识点,在授课的过程中要引导学生进行对比和分析。例如,由于单链表从结点p出发无法访问到其前驱,因而引入了循环链表;由于循环链表从结点p出发访问其前驱的时间复杂度为O(n),因而引入了双向链表;双向链表从结点p出发访问其前驱的时间复杂度为O(1)。例如,在排序算法中,希尔排序可以看作是对直接插入排序的改进,快速排序是对冒泡排序的改进,堆排序是对简单选择排序的改进。
2.5 小作业和大作业相结合
作业是检验并加强听课效果的重要手段。每一节完成后,应该给学生布置比较容易实现的小作业。每一章完成后,给学生布置较有难度的大作业,并给予必要的指导。可将学生分成不同的小团队,进行协同开发。避免因为作业难度太大,学生无法独立完成的情况。
3 结束语
数据结构是计算机相关专业的核心的专业基础课,面向对象的程序设计已逐步替代了面向过程的程序设计。面向对象的语言更适用于描述数据结构。通过分析教学现状,提出了使用知识框图、实例引导算法、对比分析法、小作业和大作业相结合的几种教学方法。这些方法在授课的过程中明显改善了教学效果,具有一定的参考价值。
参考文献:
[1] 钟美.以培养应用型人才为目标的数据结构教学改革[J].计算机教育,2014(14):26-29.
[2] 吕雅丽.面向对象的数据结构教学改革的研究与探索[J].现代企业教育,2012(10):123-124.
[3] 王淮亭.数据结构实践教学探讨与实践[J].计算机教育,2009(12):133-134
[4] 王红梅,胡明,王涛.数据结构(C++版) [M]. 2版.北京:清华大学出版社,2011: 32.