HI,欢迎来到学术之家股权代码  102064
0
首页 精品范文 数据结构课程设计

数据结构课程设计

时间:2023-05-30 10:17:43

开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇数据结构课程设计,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。

数据结构课程设计

第1篇

摘要:本文针对传统数据结构课程设计教学过程中出现的问题,提出一种案例驱动的数据结构课程设计教学方式,以帮助学生理解和掌握分析问题、解决问题的方法,提高自主学习能力,锻炼设计创新能力。实践表明,此教学方式能够弥补传统教学的不足,开阔学生的思路,提高自主完成率,达到课程设计目的。

关键词:课程设计;数据结构;案例驱动;教学改革

中图分类号:G642

文献标识码:B

1引言

数据结构课程是计算机相关专业的专业基础课程,属于专业课程体系中的核心课程。该课程着眼于对基本数据结构进行阐述和分析、讲解基本数据结构的应用并介绍典型的基本算法等三个方面,内容比较抽象枯燥,掌握起来相对困难。数据结构课程设计是一门独立的实验环节,是对数据结构课程教学理论的延伸和补充,是对理论知识的综合应用,其目的是发挥学生的主动性,培养学生分析实际问题并加以解决的能力,锻炼学生的设计创新能力。

传统的数据结构课程设计教学轻讲授,主要以对学生的单独辅导为主,督促学生完成课程设计。这种方式存在后文所提及的一些问题,随着互联网资源的日益丰富,部分问题更加突出了。为了能让学生通过课程设计更好的掌握数据结构的内容,我们设计了案例驱动的数据结构课程设计教学改革,实践证明,该项教改能够填补传统教学过程的不足。

2传统教学过程中暴露的问题

(1) 缺乏驾驭全局的能力。本科二年级学生计算机建模能力弱,没有软件工程的思想,因而缺乏驾驭全局的能力。软件工程课程一般都开设在数据结构课程之后,在进行数据结构课程设计前,学生也基本没有分析、编写较大程序的经验,这种情况造成了学生拿到问题后不知该从何下手和如何规划好课程设计的整个过程。

(2) 生搬硬套基本数据结构。数据结构教材中都是最原始的数据结构,不进行扩展和修改基本上是不能直接用到课程设计中解决实际问题的,而采用多种数据结构解决问题并加以比较找寻最优方案对于学生来说就更为困难。

(3) 对高级程序语言掌握不到位。数据结构课程设计是需要用高级程序语言来编写的,学生对该程序语言的掌握程度直接影响到课程设计的质量,常见的问题包括:变量定义不规范、函数功能划分不合理、代码可读性较差、文件读写掌握不好、调试程序能力较弱等。

(4) 照搬、照抄他人课程设计的现象存在。由于完成课程设计的时间有限,有的学生在无法自主完成的情况下,通过网络、书籍等方式来查找解题方法。本来通过查阅资料消化吸收他人的解题思路来求解自己的课程设计问题是毋庸置疑的正规途径,然而一方面课程设计的题目每个学校每届学生都相对比较固定,致使存在抄袭往届学生程序的现象,另一方面互联网的发展使得查找相似题目的课程设计源代码并非难事。此外,市面上还存在着大量快餐式的课程设计书籍在售,这类书籍良莠不齐,多是搜集、罗列了若干课程设计题目,源码、光盘附上,草草分析讲解了事。许多学生也习惯了这种快餐式的学习,能做到独立思考、举一反三的越来越少。

3案例驱动的数据结构课程设计教学改革特点

案例驱动的数据结构课程设计教学改革是将案例教学法引入数据结构课程设计教学中,教师通过讲解一个完整的案例分析解决过程,辅以多媒体的手段与学生交流、互动,达到培养学生分析并解决实际问题的能力,锻炼学生的设计创新能力的目的,同时也弥补了目前数据结构课程设计教学重实践、轻讲授的不足,丰富该项课程设计的教学内容。该方法有以下特点:

(1) 提前熟悉软件工程思想。案例的分析解决过程就是一个实践软件工程思想的过程,学生可以在讲解的过程中体会软件开发的完整流程,进而对自己的课程设计有全局性的考虑。

(2) 举一反三,定制合适的数据结构。对于案例讲解中所涉及到的数据结构,教师将进行细致的分析。采用不同数据结构解决同一问题,在性能和功能上会有所区别,学生可以在与教师的互动讨论中提高对各种数据结构的认识,从而设计适合解决自己课程设计的数据结构,甚至能够采取多种解法。

(3) 养成良好的编程习惯。优秀的代码就像优美的文章一样能使阅读者心情舒畅,教师讲解的案例都是代码级别的,定义规范、流程清楚、可读性强、具备参考价值,这样就促使学生养成良好的编程习惯。教师以多媒体手段演示代码的编制调试过程,使学生对编程环境更加熟悉,能够灵活运用跟踪、断点等调试手段,开发过程事半功倍。

(4) 最大限度避免抄袭课程设计的现象。大多数学生事实上都希望能够自主完成课程设计,只是因为不会做才导致抄袭往届学生或是市售相关书籍源码的现象存在。授之以鱼不如授之以渔,通过对典型案例的讲授,教师教给了学生解决课程设计的方法,学生找到了突破口,便愿意通过自己的努力完成任务,自己能制作“大餐”,也就不再求助于“快餐”了。

4典型数据结构课程设计案例分析

“活期储蓄帐目管理”是常见的数据结构课程设计题目,下面以其讲解过程为例简单描述一下案例驱动的数据结构课程设计教学的过程。

此课程设计需要实现的功能一般是:(1)采用交互工作方式;(2)实现储户开户;(3)实现储户销户;(4)向某账户存款;(5)从某账户取款;(6)排序显示所有账户信息;(7)查询某账户余额;(8)查询某账户交易记录;(9)所有账户及其交易信息存储至文件,程序运行时从文件中读入。该课程设计考察的知识点包括:选择并构造数据结构;使用与特定数据结构相应的算法来实现具体功能;对文件读写结构化数据;对程序设计语言的灵活运用等。

首先应对题目进行大致的分析,该题目包括两方面的信息。一方面是储户的信息,可设计为包含账号、姓名和余额等字段;另一方面是交易记录信息,可设计为包括账号、存取时间、存取标志、金额等字段,两方面信息通过账号字段关联起来。使用顺序存储结构、链式存储结构或树形结构都可以存储这些信息,但其中各有利弊。顺序存储结构设计简单,但容量固定,账户插入删除需要进行记录的移动,单个账户的交易记录信息存储不易连续导致列举时需要对全部交易记录进行完整遍历,对已排序顺序表查找某一记录时可以采用特定算法(如二分法)提高效率,总体上来说实用性和整体效率相对较差。链式存储结构设计略复杂,容量不设上限,账户插入删除较方便,采用链式结构存储的交易记录形式上连续,列举时很方便,但在查找某一记录时需要遍历整个链表效率较低,总体上来说实用性和整体效率中上。树形存储结构相对最复杂,容量也不设上限,插入、删除算法也相对复杂,采用特殊树形结构(如二叉排序树)能够提高查找记录时的效率,交易记录仍可采用链式结构存储,总体上来说实用性和整体效率较好,现实中的数据库管理系统(DBMS)多是用树形结构来实现的。从实现难度上来说,顺序存储最简单,链式存储次之,树形存储最难。因此,对学生一般要求其用链式存储来实现,对能力较强的学生可以鼓励其用树形存储来实现,以链式存储为例继续讨论。

账户信息和存取记录之间是通过账号来关联的,在链式存储结构中可以用指针来表示两者的联系,即每个账户节点(数据域可包含账号、姓名和余额等字段)具有两个指针域,一个指针指向下一个账户节点,另一个指针域指向该账户的存取记录链表(存取记录节点的数据域可包含存取时间、存取标志、金额等字段),如下图所示。

从功能上分析,储户开户、储户销户就是在账户链表中进行插入和删除操作;对账户存、取款时,首先找到相应账户,然后添加一条存取记录,同时修正该账户的余额;排序显示所有账户信息,就是对账户记录依据某一关键字进行排序并显示排序结果;查询某账户余额,就是遍历账户链表,找到对应记录并显示出来;查询某账户交易记录,就是先找到该账户,然后遍历显示该账户对应的存取记录链表。可以看出,对账户链表进行遍历查询在账户存取款、查询余额和查询存取记录是都有用到,因此在设计时,可以考虑编写查询账户函数,以供其他功能模块调用。

在文件存取方面,存取时都是以存储节点为单位进行的,即一次性存取一个结构体。该课程设计有其特殊之处,有两种类型的结构体需要存取,即账户信息和存取款记录,这两种结构体所占用的空间不尽相同,若是都保存在一个数据文件中则需要一定的技巧。以保存记录到文件为例,可以采用存一个账户信息,再存一个整形数,该整形数的数值为此账户对应存取记录节点的数量,然后再逐一保存每条存取记录,存储完毕后再用相同方法保存下一个账户的记录。读取文件过程则是存储过程的逆过程,这样可以保证存取时,账户信息和存取记录一一对应,不至于混淆。

在确定了上述思路后,便可以着手编码,值得注意的是数据结构的定义。由于采用了链式结构,许多同学便直接将链式结构的节点(包括指针域)直接存储到文件中。事实上,这个指针域是没有保存价值的,尤其在读取时如果也将指针域读出并赋值,将很有可能导致不可预知的错误。可以采取的方法是,先定义只包含数据域的数据结构体,再定义链表节点结构体将数据结构体封装起来并加上指针域,在文件读写时只对数据结构体进行操作。给出该课程设计数据结构参考定义如下:

typedef struct log //存取记录

{

char DateTime[25]; //存取时间

char W_D; //存取标志

float Amount; //存取金额

} log;

typedef struct node_log //存取记录节点

{

log data; //存取记录

struct node_log *next; //下一存取记录节点指针

} node_log, *p_node_log;

typedef struct account //账户记录

{

char ID[10]; //账号

char Name[10]; //姓名

float Balance; //余额

} account;

typedef struct node_account //账户记录节点

{

account data; //账户记录

struct node_log *nlog; //存取记录节点指针

struct node_account *next; //下一账户记录节点指针

} node_account, *p_node_account;

其他功能模块便可以参照数据结构教材上的相关算法设计实现。

5结果与结论

我们将来自3个不同专业(计算机、网络工程、软件工程)10个班级的57名同学分成了两组,一组(试验组)通过上述方法进行了课程设计教学,一组(对照组)仍采用传统方法教学,课程设计题目相同。课程设计对比统计情况如下表,其中试验组优良率达到44%,不合格率13%,对照组优良率21%,不合格率26%。同时,试验组采用了多种方式来实现了课程设计,且雷同情况较少,对照组多数采用顺序存储方式实现,程序雷同情况较多。很明显,试验组的学生思路更加开阔,自主完成率更高。

时代在变迁,信息获取更加便捷,部分学生的学习积极性在某种程度上也发生了蜕变,随之的教学方式也应有所改变,教师应从正面加以引导。在以案例驱动的数据结构课程设计教学改革实践中,教师通过对典型案例的细致分析,比较不同数据结构的优缺点,一方面使学生更加牢固的掌握了数据结构知识,另一方面让学生找到入手之门,激发学习兴趣,提高动手能力,更重要的是能让学生掌握分析和解决问题的方法,自主完成课程设计,这对今后其他课程的学习也是有所裨益的。

参考文献:

[1] 张培,肖天庆. 基于网络环境下教学设计与课程开发的合作模式研究[J]. 电化教育研究,2007,(9):60-63.

[2] 吴宏伟,张殿龙,梅险. 高校网络辅助教学的探索与实践[J]. 计算机教育,2007,(7):18-21.

[3] 张敏霞. 程序设计语言课程教学方法改革的探索与实践[J]. 中国高教研究,2004,(2):90.

第2篇

关键词:CDIO模式;教学改革;创新意识

CDIO是Conceiving,designing,implementingandoperating的缩写,即“构思、设计、实现、运作”。2014-2015年度第一学期,我们对辽宁工业大学(以下简称我校)电信学院数据结构课程,以CDIO模式进行了数据结构课程设计教学模式的探索。数据结构课程是一门实践性很强的专业核心课程,将CDIO教学模式在数据结构课程设计运用,就是培养学生创新能力、分析设计能力和团队合作能力的重要途径。培养学生充分考虑数据结构特性、响应速度、处理时间、存储空间和单位时间的处理量技术参数,鼓励学生自己去尝试各种设计方案,找出最有效的解决办法,着重培养学生专业能力、分析设计能力和合作能力。

一、传统实践教学存在的问题

实施教学改革前,传统的数据结构的课程设计是一般性设计。课设布置题目是针对教学内容的小型练习题,让学生独立完成程序设计与实现。从学生的认知规律以及学生不同个体差异来看,把一些难懂的、晦涩的、抽象的东西原封不动地给出并采取传统的教学模式进行教与学有几点弊端:第一,学生在毫无知识背景的前提下,要完全理解这些抽象概念及抽象数据类型比较困难。第二,课设涉及到的知识点内容单一,不需要学生考虑创新思维方面的设计方案。只要将课堂讲过的内容直接拿来用就可以,对于课设中各种技术参数的要求可以说没有理解,导致设计解决方案不是最合适的。课程设计没有达到预期收获。第三,学生缺乏团队合作过程,自己完成一个小型题目,在设计方案和算法设计过程中锻炼的层次和涉及面都比较窄。没有体现数据结构在处理大规模复杂问题时才能体现出的优势,使学生没有真正认识数据结构存在的意义。对以后学生参加实践类课程活动有很大影响。

二、课程设计的改革措施

《数据结构》课程设计采用了CDIO教学模式,强调知识的综合运用,锻炼学生对复杂问题进行分析与求解的能力,在项目实施过程中始终围绕“构思、设计、实现、运作”。它的指导思想是:以工程设计任务为导向,以培养学生创新能力、团队合作能力为主要目标。通过利用综合性课程设计,培养学生进行复杂程序设计这个主线,将学生在课堂上所学的比较抽象的理论知识具体化,提高了理论和实践相结合的能力。具体做法如下:

(一)课程设计内容改革

第一,从课程设计选题上精心准备:需要介绍题目内容,介绍算法产生的背景。明确数据内在的必然联系,分析数据的逻辑结构;确定解决问题所需要用到的算法及设计参数的要求,设计数据的存储结构;解决该课设到底应该怎么做的问题。题目规模适宜,课程设计题目覆盖的知识点应尽可能避免单一,设计内容要新,具有综合性。第二,扩大知识面:要求学生从需求分析开始,通过查找大量的资料,充分理解设计技术参数的要求及实现方式,根据设计要求对空间复杂度、处理时间、时间复杂度和单位时间的处理量等技术参数,分析数据进行哪些操作,建立数据的存储结构。第三,数据结构课程特点逻辑结构强,概念抽象,学生对于知识点的综合运用能力差。在课设中明确知识点的前后序关系和知识点的归属,解决学生只见树木不见森林的盲目性和随机性。

(二)课程设计实施方法

我们对辽宁工业大学电子与信息学院数据结构课程,以CDIO模式进行了数据结构课程设计教学模式的探索,并且实施如下改革:第一,采用启发式的设计思路,引导学生围绕课程设计目标,通过查找与分析有关参考资料,培养和鼓励学生的学习兴趣,同时提高学生查阅资料的能力。第二,让学生能够按照软件工程的思想进行软件的分析、设计与实现,提高学生实践动手能力和协作开发大型软件项目的能力。第三,在项目实施中,进行探究式的学习,不应该只是“手把手”地教,要给学生留出发挥想象力和创造力的空间,激发学生创造的意识和能力。第四,努力使学生对规范性的软件开发不仅仅是以实现相应的程序为目标,更重要的是培养学生今后从事软件开发所需要的各种能力与素质,包括测试能力和文档写作的能力。因此,在课程设计实施中,我们考察学生程序编写、测试以及实验报告撰写工作。

三、实践情况及效果

CDIO模式在国际高等教育中已有共识,通过实践,根据软件工程专业本科教学的培养目标,解决了传统教学方式存在的问题,提高了实践能力,体会到数据结构课程设计实践教学采用CDIO模式,突出了学生在理论教学与实践教学过程中的主体地位,提高了教学的针对性和实效性。将CDIO教学模式引入到数据结构课程设计教学中,改变了该课程的教学理念,重理论,轻实践;重课堂,轻课外。改变了教师单向的知识传授与学生被动接受之间的教与学模式,实践情况及效果表现在:(1)学生学习方式发生了转变,从被动接受知识,到主动查阅资料,对于题目要求的设计技术参数有了进一步理解,使学生学会分析和研究计算机处理的数据结构的特点,分析数据的逻辑结构及设计存储结构,设计算法的基本思想,提高了理论和实践相结合的能力。对知识有比较全面深刻了解,实际解决问题的能力有了明显的提升。(2)采用CDIO教学模式,对于课程设计题目精心安排,给学生留出发挥想象力和创造力的空间,提高了学生运用知识分析问题和解决问题的能力。培养学生的创新能力和创造性思维。(3)实践中,培养学生充分考虑数据结构特性、响应速度、处理时间、存储空间和单位时间的处理量技术参数,鼓励学生自己去尝试各种设计方案,找出最有效的解决办法。着重培养学生专业能力、分析设计能力和合作能力。

参考文献:

[1]张洪奎,等.国家级实验教学示范中心建设的探索与实践[J].高等理科教育,2009,83(1):22-26.

[2]方恺晴,等.信息技术实验室教学示范中心的建设与改革[J].实验室研究与探索,2009,28(4):93-95,100.

[3]陈春林,等.基于CDIO教育理念的工程学科教育改革与实践[J].教育与现代化,2010(1):30-34.

第3篇

【关键词】数据结构;基本知识;课程实验;方法;改革

中图分类号:G423.07 文献标志码:A 文章编号:1673-8500(2014)01-0068-01

一、数据结构内涵

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。目前,对数据结构研究已经成为世界上一些非数值量的信息结构及其处理方法,它被定为计算机科学与技术相关专的重要课程,同时也是应用数学、管理科学等很多专业的一门基础课程。为了更好有成效的使用计算机、让计算机的性能得到充分发挥,数据结构的有关知识的学习和掌握是非常必要的,大量的很难的算法存在于数据结构中,分解与抽象是它的核心技术,要想让学生掌握这门核心技术,就要认真扎实的通过对课程内容的学习与实践,构造性思维训练的特征得到有效的体现,提高学生的操作能力和实际应用水平。

二、数据结构课程设计改革

通过课程设计来让学生进一步掌握数据结构的整体框架和知识层次,课程设计的内容主要是根据三种逻辑结构(线性、树型和图型)把课程分成三部分贯穿下来,对每一部分又采用层次结构,即逻辑结构、存储结构和在该存储结构上的操作及相应的算法。结合讲过的一个和几个典型的算法给学生留一个实际问题,让学生编程序上计算机去处理。如:讲线性问题的插入和删除这部分时,就留一作业题:把学生成绩按学号录入进计算机中,一涉及到实际问题就会用到许多的相关知识,需要查阅大量的书籍和网站。不过,得到的收获也是可观的。

三、数据结构教学手段和教学方法的改革

实现以教师主导下的以学生为主体的教学模式。在具体的教学手法方面,把学生为教学的主体,坚持实行任务驱动的教学手段,诱导学生主动学习,相互协助学习,共同进行探索与研究,这种教学方式学生很容易接受并受到好评,取得成效很显著。研究算法的具体法则是给学生的算法实现的有关程序和算法实现的思路。每一节课上完后,对讨论过的内容作出总结,对本节极容易出错的状况做好归纳,梳理出具体条款。学生对每一种数据结构的特点和实现都能够牢牢地掌握。除此之外,做好与学生沟通协调工作,重视课后辅导。课下辅导除在课堂中以及学生上机进行辅导之外,还有一种办法是和学生取得联系,利用网上交谈的手段,利用这种手段,掌握学生的思想动态、学习状况,迅速回应学生在自主学习及课后学习时遇到的疑难问题。教师在数据结构教学手段上,要精心设计教学内容,对较困难的算法制作以及收集了大量FIASH演示动画方面的材料。把抽象的概念和空间结构加以具体化、形象化,使所教的数据结构内容直观、生动、提高了学生的学习的积极性,同时提高数据结构教学质量和学生的学习效果。

四、数据结构基本知识部分教学的改革

数据结构的基本知识是这门课程的重点,包括数据的逻辑结构,相应逻辑结构的存储结构,以及在此存储结构上的相关操作及算法等,这些内容必须要讲,也很枯燥,教学时可以根据实际情况做一些调整。

教授学生理解数据结构这门课,同时也是提高学生的学习兴趣的实践过程。通过举例分类、总结学生参与进来的办法来帮助学生理解数据的逻辑结构和存储结构等概念。首先从实际情况入手来引出逻辑结构的概念:学生都知道计算机能进行图书管理,能和人对弈,可是学生要明白计算机之所以能干这些事是靠人工编的程序输入到计算机中来支配计算机工作的,程序怎么编,不同的问题有不同的编程思路,那么实际中的问题基本上就是这么三类;线性问题、树型问题和图型问题。接着通过分析上面图书管理问题,下棋问题,以及修路问题来让学生明白什么是线性、树型和图型问题,接着给一定的时间让学生每人想出一个线性、树型和图型关系的例子,在生动活泼的气氛中把实际问题过渡到这门课中来,实际生活活跃了学生的课堂气氛。反过来,学生也把数据结构的理论知识应用到了实际中去,最后总结到实际问题的线性、树型和图型的逻辑关系是人类对实际问题的逻辑思维。在数据结构这门课中把这种逻辑关系叫做逻辑结构。要让计算机处理实际问题必须把从实际问题中抽象出来的数据和它们之间的逻辑结构存储到计算机中,计算机才能够对实际问题进行处理,那么怎么存储呢?逻辑结构在计算机中的存储方式在数据结构中就叫存储结构。逻辑结构和存储结构这两个概念学生就顺其自然地接受下来。

五、数据结构课程实验部分教学的改革

进行实验教学改革,加强实践教学环节。让学生学以致用是教师传授知识的目的,因此明确教学目标,把培养学生的能力放到重要位置,重视数据结构实践性环节。数据结构课程的让学生上机实习,是对学生极有利全面综合训练,它与课堂上听老师的讲解、自主学习和独立训练是相辅相成的,也是教学中不可或缺的一个教学环节。因此为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,制定了实验大纲,实验指导书,实验手册等设计了系统的有效的实验项目,规范实验报告,提高学生编程能力和专业技术水平。

在学生理解了数据结构的逻辑结构和存储结构这两个概念的基础上,接着让学生学习计算机对数据的操作和算法。算法一般都是用C语言来描述的,要想让学生掌握好每个操作的算法,一定要学生自己编出完整的程序,直接上机训练每个算法。在理论课上把每种逻辑机构联系到的操作进行初步归类后,接着讲每种操作的算法。讲算法时主要采用以下方式帮助学生理解和掌握:

第4篇

关键词:程序设计;教学改革;实践能力

中图分类号: G642文献标识码:A文章编号:1009-3044(2012)02-0366-02

Practice on the Teaching of the Programing Course

YUAN Hui-yong, YANG Si-qing, YI Ye-qing

(Department of Computer, Hunan Institute of Humanities, Science and Technology, Loudi 417000, China)

Abstract: This paper first analyses the problem in teaching of "C Language"," Data Structure" and "Algorithm Design and Analysis", and then propose a reform of teaching by improving teaching method, integrating teaching content and strengthening practice teaching. Results show that the reform of teaching can effectively stimulate students interest in learning, improve the efficiency of learning and the ability of programming.

Key words:programming; reform of teaching; ability of practice

1概述

目前C语言程序设计、数据结构、算法分析与设计是计算机及其相关专业中非常重要的专业课程。在以往教学中,这三门课程采用相对独立、分开授课的方式,导致课程内容脱节与重复,教学效果差,学习完三门课程后却不能编写程序的大有人在。这三门课程都以培养学生解决实际问题的程序设计能力为共同目标,因此,如何将三门课程有机地结合起来,构建程序设计系列课程的新体系,整合教学内容,改进教学方法,切实提升学生的程序设计能力,成了当前计算机专业教学改革中亟待解决的问题。

2教学中存在的问题

在传统的教学中,C语言程序设计、数据结构、算法分析与设计三门课程的分开授课,课程知识没有整合,对课程知识中存在重叠的内容,只是做简单的重复讲解(如C语言和数据结构课程中都有数组这个教学内容),教学深度不够。教学中注重讲授基本理论,忽略了程序设计过程中涉及的方法和技术(如算法分析与设计课程通常是将已有的经典算法在数学模型和数据结构上给学生解释),理论教学与实践教学结合不够紧密(如数据结构在讲授了某种抽象的数据关系和在计算机中的表示与实现后,并没有将这种结构用到解决实际问题中去),造成有些学生虽然具备了一定的理论基础,但由于实践教学薄弱,动手能力差。

3具体改革措施

我们改变了以往C语言程序设计、数据结构、算法分析与设计分开授课的模式,而是将这三门课程作为一个整体,以培养学生解决实际问题的程序设计能力为目标,从组织教学内容、改进教学方法、突出实践教学等方面进行教学改革与实践。

3.1整合教学内容

C语言程序设计是数据结构的前导课程之一,学生对它的掌握程度直接关系到数据结构课程的教学效果。算法分析与设计是计算机专业程序设计类的核心课程,在学习该课程之前,要求学生们掌握了基本的数据结构知识,能熟练运用一门或多门编程语言,并具备一定的编程经验。

我校原来的C语言、数据结构和算法分析与设计三门课程是相对独立、分开授课的,学习效果不理想。我们将这三门课程的知识进行整合,采用同一教师授课,做到了前导课、后续课的有机衔接,并重新制定了三门课程的教学计划,以知识点为单元,将这三 门课程很好地结合起来。在C语言的教学中,以C语言为主线,适当穿插数据结构中的相关内容,使C语言与数据结构有机地结合在一起,如我们将C语言中的数组和数据结构中的直接插入排序、冒泡排序、简单选择排序、顺序查找、折半查找方法放在一个知识单元中。在数据结构教学中,穿插了算法分析与设计的有关知识,如在讲述哈夫曼树和图的最小生成树时,穿插了讲述了贪心算法,在讲述图的最短路径时介绍了动态规划算法。

我们不再把C语言当做一门语言来讲解,加强了数据结构、算法设计、逻辑思维和编程方法的教学。数据结构课程不再只注重讲授抽象的数据关系和存储结构,而要求学生用C语言编程实现各种算法,并结合实际应用,在ACM/ICPC在线评测系统上完成相应的练习题目,学生不再感到枯燥无味,不仅较好地解决了数据结构教学中学生上机困难的问题,也提高了学生的程序设计能力。在算法分析与设计课程教学中,我们选择一些难度适中、能结合实际问题和相关课程的知识来讲解,使学生既能理解,又能拓展创新。

3.2改进教学方法

我校属于应用型本科院校,其教育目标着重于培养具有实际工作能力的技术型和应用型人才。在C语言的教学中我们采用了“案例”教学方法,从日常生活中选择能典型反映教学内容的案例,所选案例难度适中并能反映多个知识点。如选用了“学生的成绩管理”,该案例覆盖了C语言中的循环结构与数组,涉及数据结构中的排序与查找。在该案例中穿插介绍了数据结构课程中的直接插入排序、冒泡排序、简单选择排序和顺序查找;通过介绍C++中的排序函数qsort()激发学生自觉地学习C++标准模版库;并提出如何保存学生信息以避免重复输入数据的问题,引导学生自学C语言中的文件操作,培养学生的再学习能力。在算法分析与设计课程的教学中,我们采用了“任务驱动”教学方法,将具体的算法设计策略融入到一些“任务”中,课堂教学以任务为主,引导学生利用算法设计策略探索解决方案,在课后的实践环节,将结合实际应用且融入了知识点的任务放到ACM/ICPC在线评测系统上,让学生在课后根据任务描述,自主探索问题解决方案,并提交程序代码。

在教学过程中,对典型例题力求讲透彻,并提出问题给学生思考。如斐波拉契数列,讲解了分别使用变量交换的循环结构、使用数组的循环结构和递归三种编程方法,并比较了三种方法的优缺点,使学生深刻体会到了采用递归求解斐波拉契数列的低效,引导学生理解使用数组的高效是基于算法分析与设计课程中的动态规划的思想,并且穿插介绍了数据结构课程中算法的时间复杂度与空间复杂度的度量;再提出大斐波拉契数列的求解问题,介绍使用数组进行高精度计算以及使用矩阵和二分法的求解方法,激发了学生的学习积极性。在例题的讲解过程中,充分利用多媒体教学手段,加强了例题讲解过程中的现场调试与分析,鼓励学生对具体问题进行分析和研究,培养学生的逻辑分析和判断能力,重视上机训练,养成良好的编程习惯。

3.3加强实验教学

这三门课程都是理论与实践并重的课程,在教学中必须将理论教学与实践教学紧密结合。我们从以下几个方面来加强实验教学:

1)重新编写实验指导书。按照教学内容的知识点,综合可操作性、趣味性和适当的难度,编写了适合教学要求的实验指导书,既保证了实验的可完成性,又增强了学生的兴趣。

2)建立在线题库。在ACM/ICPC在线评测系统上开设了C语言程序设计、数据结构、算法分析与设计的专题训练,每个专栏按照教学知识点安排了不同难度的练习题,学生可以根据自身的能力,完成相应等级的题目,在探索与解决问题的过程中获得学习成就感。

3)组织程序设计比赛。ACM/ICPC在线评测系统上安排了与教学知识点相关的竞赛真题,鼓励学生组队、按照比赛规程进行模拟比赛。通过比赛,学生对教学知识点有了更深入的理解,不仅增强了学生的实践动手能力,提高了学习兴趣和积极性,也使学生提前了解ACM比赛的规则和比赛真题,训练了学生的参与意识、竞争意识和团队精神,为以后组织学生参加省程序设计比赛打下良好的基础。

4)开设课程设计。课程设计的题目以典型的问题或实际的工程为主,如数据结构课程选用了“教务计划编制问题”,让学生运用图论中的拓扑排序来求解这个实际问题。通过课程设计,培养了学生综合运用所学知识进行分析和解决实际问题的能力,使学生不仅学到了解决问题的办法,同时加深了理论的理解与掌握,做到了理论教学与实践紧密结合。

3.4改革考核与评分标准

考试作为课程教学的一个重要环节,对学生的学习具有明显的导向作用。这三门课程原来的考核分为平时成绩和期末考试,这样的考核方式很难考察学生的实践能力,导致大部分学生只注重期末考试,而忽略学习过程,很难有效的提高学生的创新能力和实践能力。我们认为这三门课程的考核应着重考核学生的程序设计能力,而不是死记硬背一些基础知识。为此,我们引入了ACM/ ICPC在线评测系统及,对课程的考核进行了大胆改革,评分标准也作了修改,提高实验考核成绩在课程总评成绩中的比重,以此来引导学生认真对待实验和课程设计,切实提高学生的实践动手能力。

4结束语

实践证明,将C语言程序设计、数据结构、算法分析与设计这三门课程有机结合的教学改革,能够很好地激发学生的学习兴趣,学生在掌握基本理论和知识的同时,程序设计能力、数据结构和算法设计的应用能力也得到了很好的培养,我校学生在近二年的湖南省程序设计比赛中均取得了较好的成绩。

参考文献:

[1]谭浩强. C程序设计(第2版) [M].北京:清华大学出版社,2005.

第5篇

关键词:应用转型;算法与数据结构;任务驱动;教学改革

中图分类号:TP312 文献标识码:A

教育部于2013年,提出一项重大的改革,即计划将大约600所地方性高等本科院校转型为应用型本科院校,2014年被列入教育部当年工作要点[1]。在高等院校向应用型本科转型的形势下,高校教学面临着新的机遇和挑战。商洛学院作为陕西省首批应用转型试点高校,实现毕业时与社会、企业零距离对接,完成高等学校为社会输送有用人才的最终目标[2]。

算法与数据结构课程是计算机相关专业的专业基础课程,是设计各种应用软件的重要基础,是我校电子信息科学与技术专业课程体系中的核心专业课程。本文主要针对当前教学过程的问题,进行探讨研究,提出一种新的教学模式,达到教与学的有机结合[3]。

一、课程教学改革的必要性与紧迫性

算法与数据结构课程主要涵盖数据结构的阐述分析、应用以及经典算法的应用,主体内容比较抽象,难以直观描述,掌握相对困难。此外,电子信息科学与技术专业的学生计算机基础知识薄弱,电子和计算机专业之间培养差异,导致电子信息科学与技术专业学生学习更加困难。随着互联网行业的迅猛发展,网络教学资源的日渐丰富以及算法与数据结构课程地位的愈加重要,传统教学模式中的问题日益突出[4]。

(一)数据结构课程自身特点

(1)高度抽象化,需要扎实的数理逻辑、图论、高等数学、拓扑几何、离散数学和数值分析等理论基础;(2)内容涵盖面广泛丰富。(3)隐含的技术方法丰富,各部分问题解决方式种类多样、没有固定解法、灵活性强。

(二)应用转型下发展算法与数据结构课程的教学目标

(1)重视算法与数据结构基础理论知识学习,理解数据逻辑、数据存储及数据运算等基本概念术语;(2)从实际问题出发,培养学生运用算法与数据结构的基本理论知识分析解决实际问题的能力;(3)重视学生实践动手能力和工程项目思想的培养。

二、传统教学过程中现存问题

根据长期从事算法与数据结构的教学过程,发现当前算法与数据结构教学中主要存在以下一些问题。

(一)难理解:本课程需要较高的逻辑思维和抽象思维能力,学生联系实际比较困难这一问题始终萦绕在整个教学过程中。

(二)难把控:电子信息科学与技术专业本科二年级学生,其计算机基础、建模能力、软件工程的思想薄弱。

(三)难实现:体现在遇到问题不知如何数据结构类型;面对具体算法不清楚如何进行优化;书本上的程序不能直接运行,学生自主学习有一定困难[5]。

(四)难应用:数据结构相关实验的课程设计主要采用高级程序语言(如C,C++)等来编写,我校电科专业学生对该程序语言的掌握程度直接影响到数据结构课程的实际应用情况。

三、教学模式改革与探索

针对现有传统教学中存在的问题,为了提高学生算法与数据结构应用能力,需完善并加强实践教学内容。

(一)调整课程体系

当前教学是依据传统的知识理论体系顺序授课:然而当前应用转型环境下这种模式已难以适应。根据学生学习认知一般规律及我校电子信息科学与技术专业自身特点,在传统教学基础上进一步优化课程培养体系,针对每一知识点配备相应实践项目,将理论与实践有机结合。

(二)优化教学手段

传统课堂教学主要以教师粉笔板书讲授为主,不能用动态直观的方式讲解抽象知识,难以激发学生学习热情,无法达到课题教学目的。

1.将微课引入教学中

借助微课这一新兴教学模式,将算法与数据结构课程重点、难点设计开发成网络视频资源,供学生课后自主学习。我们将算法与数据结构中每一个知识点的内容,制作成微教案、微视频、微练习、微点评、微互动等传至课程网络中心。

2.将案例驱动引入教学中

案例驱动的算法与数据结构教学方法,是将教学案例引入到课程教学过程中。教师通过一个完整案例的分析解决,借助板书、多媒体等手段与学生互动,达到培养学生发现问题、分析问题、解决问题的能力。

3.加强课外创新实践活动

算法与数据结构课程需要增加学生的课外创新实践活动。具体通过以下方式开展:(1)组建算法和数据结构学习创新小组,定期举行学习经验研讨交流活动,分享实际设计过程的困难、解决途径和最新成果;(2)定期组织以算法为核心竞赛活动,(3)鼓励学生申报研究学习与科技创新性实验项目,组织参加省市级或国家级各类学科竞赛。

3.改革课程考核模式

传统实验课的课程,实验动手部分只占10%,很多学生把重点放在报告书写上,为适应应用转型发展,加强学生实践能力,课程考核提出以下改革方案:(1)平时(考勤+开卷随堂测试+课堂表现),占学期总成绩的10%;(2)课程上机实验(源程序+实验报告)30%;(3)期末卷面成绩60%;(4)鼓钛生到相关优秀企业进行培训实习

四、结语

针对当前电子信息科学与技术专业算法与数据结构教学模式中培养目标及存在的主要问题,在转向应用型本科院校新形势下,为培养创新型、应用型人才,提高学生逻辑思维、编程运算等能力,本文主要从课程体系调整、教学手段优化、创新实践教学加强、考核模式改革共4个方面都出发,以提高算法和数据结构应用能力为教学目标,结合工程项目与市场实际需求,指导并加强实践教学。

参考文献:

[1]陶影,张斌.数据结构实验教学应重视算法设计与分析能力的培养[J].实验室研究与探索,2008,12:119-122.

[2]张铭,赵海燕,王腾蛟,宋国杰,高军.北京大学“数据结构与算法”教学设计[J].计算机教育,2008,20:5-11.

[3]唐剑梅,谭平.《数据结构与算法设计实训》课程教学研究[J].软件导刊,2016,01:193-194.

[4]李治军,廖明宏,张岩.数据结构与算法课程设计教学模式的探讨[J].计算机教育,2006,02:54-56.

第6篇

关键词:CDIO理念;数据结构教学模式;创新思考;实践

中图分类号:TP311.12-4 文献标识码:A 文章编号:1674-7712 (2014) 04-0000-01

数据结构课程是计算机相关专业核心的基础课程,其主要是研究计算机领域中相关的基本问题。随着计算机技术以及信息化技术的普及,各行各业对计算机软件应用广泛,所以数据结构课程在高校中已经不仅仅是计算机基础课程,更是众多理工科选修的热门课程。然而由于其内容专业性强,不易理解,所以对数据结构教学带来了诸多困难,所以加强教学创新,促进数据结构教学发展具有很大的意义。

一、CDIO理念概述

CDIO是目前国际上高等工程教育中先进的创新模式,这种模式的根本目的就是将个人、社会以及系统的制造原理和技术有机的结合起来,为工程教育提供一个合理的、通用的教学目标,促使这种理念能适用于工程教学学科中各个领域。

CDIO理念的形成灵感来至于对工程中系统以及产品生命周期,在培养学生对工程相关基础知识以及理论方面特别关注,并为工程教育放到具体的工程实践领域中,在教育过程中涉及到团队合作以及创新设计等。这个教育理念下,通过个人或团队参与、构思、设计等体验,可以让学生真正的融入到教学中去,并培养学生对系统构建的能力。

二、基于CDIO理念背景下数据结构教学模式创新的思考

数据结构课程作为计算机相关学科的基础性学科,学习过程中既有抽象的基础理论,还包括具体的计算实践,只有将两者有机的结合,才能真正的培养学生实践的能力。对于计算机以及相关专业的学生来说,团队合作的能力也是在教学过程中需要重点培养的技能之一,其必须从基础学科抓起。这就需要在进行数据结构教学中积极探索创新新颖的教学方法,充分的调动学生学习的积极性,注重教学实践与理论学习相结合的方法。基于CDIO理论给数据结构教学的启示主要包括以下几个方面:

第一,在进行数据结构基础理论教学的过程中,还应该重视计算实践教学相结合,这样才能保证数据结构课程能取得更大的教学效果;第二,数据结构教学中,要运用多种教学方式相结合的模式,加强创新,增强课堂教学的趣味性,这样才能激发学生参与教学活动的热情;第三,在教学过程中,注重培养学生团队合作的能力,在确保个人基础知识掌握的基础上,给予学生充分的时间进行团队合作,发挥团体协作的作用;第四,计算机数据结构课程设计方面,可以说是一个学科内独立的环节,也是对课堂教学的延伸与发展,必须加强教学方式的创新与改革,选择适当的教学方式全面培养学生理论与实践能力。

三、CDIO理念下数据结构教学模式创新的具体措施

根据上图可知,在原有的数据结构理论教学基础上,通过开展一系列的设计实验活动。这样可以发挥学生的主观能动性,并使学生对课堂的理论知识进行了全面的巩固,对培养学生的思考能力、动手能力以及创新能力都有极其重要的意义。这种模式下的数据结构教学具体措施为以下几点:

传统的数据结构理论教学,教师进行刻板的讲授,学生被动的接受,这样学生的学习积极性不高,导致教学效果欠佳。根据这一问题,需要在进行理论教学过程中,以问题为导向,充分的发挥学生讨论、交流的模式优势,增添教学课堂上的趣味性。在引入一个新的概念或理论前,用一个贴近生活的问题引入,这样能引起学生的学习兴趣,促使学生对知识点的掌握。如数据结构中队列理论的学习过程中,可以提出企业客服问题、银行排队问题等用计算机怎样解决?这样就能引发学生进行思考,潜意识就将学生带入教学环境中。

在教学过程中,要应该充分的利用教学实验作为教学的辅助手段,并通过实践教学进行巩固。在数据结构教学中,验证性实验往往恩能够起到很好的教学实验,学生通过自己参与对理论验证实验,增加了其对理论知识点的了解,并进行了相应的实践练习。如让学生利用自己学到的相关理论知识进行树与二叉树实践验证,一般都是运用经典算法进行。

在数据结构教学中,很多理论都可以延伸出许许多多的知识点,所以要充分的培养学生举一反三的能力,并通过大量的练习达到对技能熟练掌握的目的。这就要求教师在完成一个阶段的理论教学后,给予学生足够的时间进行对课堂所学知识进行总结,并独立完胜课程设计。

四、结束语

数据结构教学是计算机以及计算机相关专业最基础但又最核心的课程,并随着计算机技术的普及向着其他学科领域发展。由于数据结构的内容专业性强、生涩难懂,传统的教学方式往往达不到理想的教学效果。在CDIO理论背景下,给数据结构教学带来了很好的启示,并指导数据结构教学向着理论与实践结合、实验与教学结合、传统与创新结合的方向发展,推动了数据结构教学的发展。

参考文献:

[1]肖媚燕,徐东风,周云华.基于CDIO理念的数据结构教学模式创新与实践[J].中国现代教育装备,2012(05):89-90.

[2]历威成.CDIO模式的教育理念以及实践研究[J].四川师范大学硕士论文库,2013(012):26-67.

[3]杨猛召,顺泽元,刘文强. CDIO 理念在数据结构课程中的探索与实践[J].计算机教育,2010(12):125-126.

第7篇

关键词:数据结构;教学改革;教学手段

“数据结构”是计算机科学中的一门综合性专业基础课,是信息科学的核心课程,是研究非数值计算的程序设计问题中计算机操作对象以及它们之间的关系和操作等的一门学科。主要是培养学生分析数据、组织数据的能力。我校的部分专业,如资信、电子以及管理等专业都开设了数据结构课程;部分没有开设本课程的院系学生有时也主动旁听数据结构课程。由于数据结构具有较强的理论性和实践性,不同专业的学生特别是非计算机专业学生在教学过程中,无论是理论课程还是实践过程确实存在一定的困难。笔者作为该课程的主讲教师,结合自己在数据结构教学中的一些体会,谈谈对目前教改的认识。

1数据结构教学中存在的问题

1.1前导课程“欠债”较多

“数据结构”的前导基础课程是“C语言程序设计”和“离散数学”。我校有多个院系开设C语言课程,不同院系所开设的“C语言程序设计”的教学内容和教学要求并不完全一致。许多非计算机专业的学生一般在学习本课程之前并未经过严格的程序设计基础训练,教师为了教学进度采取“填鸭”式的教学方式,导致学生对C语言理解不深,特别是指针、结构体、联合体以及函数等知识点,而这些又传递影响到数据结构的教学。另外“离散数学”是学习“数据结构”的基础课程之一,但是由于课时不足,目前我校非计算机专业均未开设这门课。

1.2教学与专业背景脱节

“数据结构”是一门理论性、抽象性很强的课程,教学中一定要将课程内容与学生专业背景相融合,让学生结合专业知识加深对理论的理解,同时也让学生真正体会到数据结构理论是为专业实践服务的。但在目前的教学实践中,教师只注重学生课堂理论知识的掌握,在面向不同的专业的学生时采用相同的教学案例,这使非计算机专业学生很难产生“共鸣”,教学效果自然达不到理想的目标。

1.3教学重点模糊

在目前的教学过程中,无论是计算机专业还是非计算机专业都没有结合专业着重加强相应的知识点的教学。如我校的地球物理与信息工程学院就包括了测井、勘探、摄影测量与遥感等学科方向,而数据处理在测量工作中是最重要的一个环节。对测量数据处理往往需要解大型的方程组,这涉及到稀疏线性方程的压缩存储问题,可以采用三元组顺序表和十字链表的方式。因此在测井专业的教学内容上,应该将稀疏矩阵作为一个重点内容,为后续专业知识的学习奠定一些基础。

1.4教学内容取舍不当

目前我校数据结构的教学内容基本相同,没有根据专业具体情况注意内容的取舍。计算机专业数据结构为56课时,并有16课时的课程设计;其他非计算机专业的数据结构课时为56课时,其中有8课时实验课,但没有数据结构课程设计。在这种的情况下,让学生系统地掌握数据结构的基本内容,在教学内容的选择上必须注意取舍,一些理论性太强,在专业内应用面不够广泛的内容就可以舍弃,如广义表、动态存储管理以及外部排序等内容。

2 “因专业施教”的教学过程研究

2.1加强以数据结构为核心的课程群建设

目前,国内高校在数据结构课程教学研究中的实验教学方法、教学模式和教学内容优化等方面取得了一些实践性成果,但在课程综合体系建设方面仍然有一些不足[1]。非计算机专业教学时尤其要强调数据结构与其他相关课程的紧密衔接,并将离散数学、数据库、操作系统、图形学、图像处理等课程的主要知识点分散、穿插、融入到数据结构的教学中,从而优化整个课程体系结构。

2.2面向不同专业学生的数据结构教学方法研究

教学是以学生为主体,教师为主导的过程。教学方法是否适当,是否适合教学对象,是影响教学效果的关键部分。现有的主要教学方法包括[2]:启发式教学法、任务驱动教学法、案例教学法以及讨论式教学法等。每种方法只适合应用于某些特定的情形,课题组根据不同的专业的教学内容和教学对象,采取了不同的教学方法。例如,计算机专业、电子专业的学生采用启发教学方法,教学中注意讲解知识点时要尽力去打破学生头脑中的“平静”,激发学生思维活动,引导学生提出问题、分析问题和解决问题,归纳总结出一般规律或概念[3]。这种方法注重培养学生的科学思维方式,激发学生学习的积极性和创新精神。根据多年的教学经验,石油勘探专业适合于任务驱动教学法。勘探专业具有很强的专业背景,教师根据勘探专业教学大纲要求,精心设计地震数据处理实例任务,将教材中每个章节的重点、难点内容专业化、具体化、形象化、采用任务驱动法对数据结构课程展开教学。管理专业以及测井专业采用案例教学法。围绕教师所提供的测井系统软件案例,学生在教师的引导下,积极进行阅读、思考、分析、讨论和实践,从而达到深刻理解问题的原理和本质,提高分析问题和解决问题的能力,养成探究性的学习态度的目的。我校案例教学具体实施地点在多媒体教室,学生每人配备一台机器,能够完成实时网络教学任务。

2.3面向不同专业学生的数据结构教学内容改革

针对不同院系制订合理的数据结构教学内容,评估教学内容的取舍方案,通过突出重点内容,充实数据结构的专业应用环节。例如,测井专业的教学内容除了稀疏矩阵的应用外,由于测井信息通道不断增加,传输的数据量越来越大,必须对采集的数据在传输前后分别进行压缩。哈夫曼编码在测井数据的无损压缩方面发挥着重要作用。另外,在勘探专业地质建模中,通常需要对大规模地震数据进行分析以发现地下潜在可能的油气资源。地震数据的存储,八叉树是一种有效的方法。最短路径在井间地震层析成像开发中发挥着重要作用。因此,在讲解二叉树的基础内容时,有必要扩展一些八叉树的知识;在讲解图的应用时要注意结合井间地震数据层析成像的实际例子。

2.4面向不同专业学生的数据结构实践教学改革

实践教学是课堂理论教学的延伸和补充。培养并提高学生的实践能力是数据结构课程的基本目标。不同专业学生学习的侧重点相同。例如,电子专业在学习计算机语言时侧重硬件方面的应用,缺乏计算机程序设计基础训练,软件工程的概念不强;管理专业、测井专业以及勘探专业学生具有较好的软件编程基础,但逻辑抽象能力特别是面向对象分析与设计能力欠缺。即便是同一专业的不同学生,他们的学习主动性和学习能力各不相同。如果采用“一刀切”式的尺度要求所有同学,往往起不到良好的教学效果。为了达到“因专业施教”的目的,在进行“数据结构”实践教学时,课题组采用层次化设计思想,把实验自下而上分为概念基础层、应用基础层、应用提高层和综合层四个层次[4]。在进行试验教学时,管理、电子专业同学以概念基础层、应用基础层实验为主,适当增加综合层设计题目,以提高学生软件工程的意识。如测井专业学生以应用基础层试验为主,以测井工程中的具体问题为背景,强调理论与实践的结合,使同学们体会到“数据结构”是一门抽象理论与实践紧密联系、非常有趣味的课程,从而激发同学们的学习兴趣;勘探专业学生实践教学围绕理论课的综合层设计任务展开,各任务之间要耦合紧密,形成循序渐进的梯度,组成一个“任务链”。将同学们分为3~4人一组,确定小组成员的角色与任务。在这个过程中教师应该提供必要的与勘探数据处理相关的学习资料、参考方法等,为学生完成任务提供资源支持,使学生透彻理解各种数据对象的特点,学会数据的组织方法和实现方法,选择合适的数据结构,甚至改造基本的数据结构,并进一步培养学生良好的程序设计能力。

3结语

“数据结构”这门课程在计算机科学与技术中的地位举足轻重,也是石油相关专业的一门必修课程。教师在教学过程中,应当积极探讨,寻找有效的教学方法,充分调动学生的学习积极性,提高学生的学习兴趣,才能使学生真正学好“数据结构”。在非计算机专业学时少以及前序课程不足等因素的限制下,完成数据结构课程的教学工作并取得满意的教学效果,是一个具有挑战性的课题。本文综合实际教学经验在教学方法和实验方法上提出了一些方法和原则,从我校多年的数据结构教学实践看,采取了这些措施和方法后,学生明显感到数据结构好学多了,教学效果得到了显著提高。

参考文献:

[1] 张铭,许卓群,杨冬青,等. 数据结构课程的知识体系和教学实践[J]. 计算机教育,2004(2):89-91.

[2] 蔡敏,郑尚志,梁宝华.“数据结构”课程教学改革之我见[J]. 计算机教育,2009(4):50-51.

[3] 刘红梅. 启发式教学法在数据结构教学中的应用[J]. 电脑知识与技术,2009(3):661-662.

[4] 张玉华,周克兰.“数据结构”分层次实验教学的探索与实践[J]. 计算机教育,2009(3):108-110.

Research on Teaching Reform of Data Structure According to Specialty

LIAN Yuanfeng, WANG Xin, LI Li

(Department of Computer Science and Technology, China University of Petroleum, Beijing 102249, China)

第8篇

关键词:数据结构;教学方法;任务驱动;实践教学

中图分类号:TP311.12-4

数据结构是计算机专业中介于数学、计算机硬件和计算机软件三者之间的一门综合性的专业基础课。数据结构的内容不仅是程序设计进行总结和提高,而且是编译原理、操作系统、数据库系统等后续专业课提供基础,具有承上启下的重要作用。本文针对数据结构的课程特点和教学过程中存在的问题,探讨教学实践中如何针对产生的问题进行教学改革与实践,以提高教学质量和学生学习效果。

1 数据结构教学中存在的问题与现状

1.1 缺乏对数据结构认识。正确深刻地理解数据结构的涵义、作用以及数据结构课程内容体系是学习好数据结构的前提和基础。但是,一般情况学生只是大概了解了数据结构的概念,在缺乏正确认识和深刻的理解的情况下,就开始直接学习课程内容了,认为具体的内容才是最重要的。对于为什么需要数据结构,课程中包括哪些内容,从哪些角度和方面对数据结构进行讲解,原因是什么等等,都没有认真研究和体会,导致数据结构的学习效果和教学效果都不甚理想。如果这些问题都理解了,就从整体上认识了数据结构,那么学生学习,教师教授都会有的放矢。

1.2 C语言知识储备与数据结构的要求相脱节。数据结构涉及指针、结构体、类型定义、函数调用等相关知识,所以要求学生对这些内容的掌握程度比较高高。但是在C语言教学中,一方面,这些内容都是在课程的后半部分且学习起来难度较大,学生学习有畏难情绪,往往对这些内容掌握不牢;另一方面,教师在授课过程中,对不同专业区别度不大,很少特别为后续课程的需要专门对相关知识做重点讲授,这样就影响后续课程的学习。最终导致学生掌握的C语言知识不能满足学习数据结构课程的要求。

1.3 缺乏独立分析解决问题的能力。在课堂讲课过程中,一般以教师讲授课程内容为主导,在讲解课程内容时,学生貌似都学会了,和老师的互动也非常积极,对老师提出的启发式问题都能正确回答,认为课堂上老师所讲的实例也都很简单。但是,若在没有老师的引领的情况下,让学生单独分析、解决一个例题,多数学生就很难掌握方向,不知从哪做起,缺乏独立分析问题、解决问题的能力。

1.4 动手编程能力不强。相对于理论知识的学习,学生在上机实践中遇到的问题更大。学生的程序设计基础薄弱,缺乏足够的系统训练,对调试程序的方法不够熟练,程序结构设置不合理,代码编写可读性差。即使一些学生看懂了教材上的算法,将其转换成能运行的C语言程序,也存在一定的难度。这些都对学生的学习效果都有较大的影响,甚至会削减学习的积极性,进而产生畏难和厌学情绪,产生恶性循环,有些学生干脆不学了。数据结构中教学中出现的这些问题,严重影响了数据结构课程的教与学,探讨数据结构课程教学方法,势在必行。

2 教学探讨与实施

2.1 正确认识“数据结构”。认识数据结构课程不仅仅让学生了解其在专业中的地位和重要性,更要理解数据结构课程本身的涵义和作用。所以在课程开始的时候开课之初,对课程绪论部分的讲解不应吝啬时间,要把这部门内容讲清楚讲透彻。数据结构是一门研究非数值计算机的程序设计问题中计算机的操作对象以及他们之间关系的操作等的学科。从这个定义中,我们从中抽取对象、关系、操作等关键词,再以设计实现一个家族家谱这样一个比较形象的例子进行讲解,进而引出如何存储表示数据对象及关系和能对这个家族的族谱做哪些操作,这样就引入了逻辑结构和物理结构的知识以及对数据结构建立相应操作的问题。这样学生就基本能建立数据对象、数据关系、基本操作三元组的概念,并能深刻理解逻辑结构与物理结构的概念和关系。从总体上认识、把握、建立数据结构的整体概念是学习好数据结构的基础。

2.2 针对数据结构课程需要制定C语言课程教学大纲。因为不同专业学习C语言的要求不同,所以根据教学计划制定科学合理的数据结构前导课程的教学大纲、考试大纲能有效解决前导课程储备知识不足的情况。根据教学计划安排有数据结构课程的专业,其C语言课程与其他专业的课程不同,是单独列出的。其教学大纲、考试大纲等教学文件由讲授C语言和数据结构的老师根据专业特点及后续课程的需要共同研究制定,并按学校的规定定期修订。教学中只要按照制定好的教学大纲等相关文件规定执行,就能满足数据结构课程的要求。这样就从源头上解决了C语言储备知识不足的问题,避免了以往数据结构课程教师需要与C语言课程教师沟通重点讲解哪些内容,但因只是个人行为而没有学校相关文件规定的限制,所以不能达到较好的效果。通过制定专门的教学大纲,也无需要求数据结构与C语言课程采用“一师制”,避免了人员变动等其他因素带来的不确定性影响。

2.3 构建整体教学内容体系。数据结构课程内容抽象涉及很多概念和技术,学生在学习的课程过程中总是感到知识没有连贯性与整体性,难以对所学内容融会贯通,对课程的知识缺少一个整体的把握。所以建立整体的知识框架体系对数据结构的教学非常重要。数据结构课程的内容主要围绕数据的逻辑结构、数据在计算机中存储的物理结构以及对数据操作算法的实现及评价展开。数据的逻辑结构根据数据对象之间关系的不同特性,分为线性结构(一对一)、树形结构(一对多)、图结构(多对多);数据的物理存储结构按照数据对象之间关系的表示方法分为顺序存储结构和非顺序存储结构。在教学中引入抽象数据类型(ADT)观点介绍数据结构技术,采用算法时空分析来判断算法的好坏。在讲授每一个数据结构时,以抽象数据类型为主线,按照抽象数据类型的定义—抽象数据类型的设计—抽象数据类型的实现三个层次展开来讨论,渗透并应用模块化的思想,在此基础上介绍数据结构的具体应用。在教学过程中教师会反复强调课程的篇章结构及其关系,数据结构课程的章、节、目,是课程的“骨架”,反应了课程内容的逻辑关系,以此加强学生对课程的内容体系的理解和掌握。

2.4 课堂上适当进行编程示范教学。教学过程中,我们发现,学生能听懂老师所讲授解题的算法思路,但就是不知道如何用编程语言或算法表达出来。为解决这一问题,在教学中会在课堂上对有代表性的算法进行现场编程演示。课堂上教师先带着学生先把算法总体思想写出来,接下来选择合适的物理存储结构利用C语言进行编程调试运行。这种方法可以让学生掌握将解决问题的思路转变成代码的全过程,对学生编写和调试程序起到很好的示范作用。在编程过程中,教师会边写代码边讲解,引导学生积极献计献策一起来解决问题。由于现场编程比较耗费课时,对于比较长的程序,一般教师会在课前完成,留下解决问题的关键步骤在课堂与学生一起编程实现。通过这个过程学生能深刻理解绪论中算法的设计只取决于将要解决问题的数据对象之间的逻辑结构,而算法的实现则依赖于数据对象及其关系的存储结构。同时学生也能认识到用类C语言表示的算法与用C语言编写的程序有哪些不同。有了现场的变成演示,在上机实践中,学生直接将教材上的算法照抄到计算机内运行的情况大大减少,理解了如何将抽象的数据结构理论应用到实际解决问题当中去。

2.5 任务驱动教学方法的应用。所谓“任务驱动”就是在学习信息技术的过程中,学生在教师的帮助下,紧紧围绕一个共同的任务活动中心,在强烈的问题动机的驱动下,通过对学习资源的积极主动应用,进行自主探索和互动协作的学习,并在完成既定任务的同时,引导学生产生一种学习实践活动。“任务驱动”是一种建立在建构主义教学理论基础上的教学法。它要求任务的目标性和教学情境的创建。使学生带着真实的任务在探索中学习。在这个过程中,学生还会不断地获得成就感,可以更大地激发他们的求知欲望,逐步形成一个感知心智活动的良性循环,从而培养出独立探索、勇于开拓进取的自学能力。在教学中,我们应用了任务驱动的教学方法并加以改进,达到了较好的教学效果。我们的做法是根据不同的场景“任务”不仅仅是学生的,也是老师的,或者是由老师和学生共同完成的。比如在讲解第二章线性表的时候,我们就会根据课程内容,设计完成一个共同的任务:一元多项式的相加。为了完成这个任务师生共同找解决的方法,当然任务的完成需要老师的按既定的方向循序渐进地引导,先讲解两个集合合并到一起的算法,再讲解将两个按值非递减有序排列的线性表如何合并,一元多项式相加的问题稍加改进就解决了。在完成一些比较大任务的过程中,我们会将其分解成若干个小任务让学生独立完成。当然,在教学实践中也不是所有的内容都可以通过任务驱动的方法实现,不能执行一刀切。授课教师应根据课程内容,学生的能力多方面考虑设计合适的任务。任务太大完不成,容易打消学生的积极性,任务太小不能起到应有的作用。

2.6 系统化实践教学。为了满足不同层次学生对实验题目难度,提升学生对实践教学的兴趣;我们针对不同学生的特点,制定分层次实践教学的方法。按照实验的难易程度分为验证性实验、设计性实验、综合性实验三个层次。验证性实验根据数据结构基础内容设计,难度较低。目的是让学生掌握基本数据结构的特点和基本概念,同时掌握基本算法及应用。在上机指导中授课教师将验证性实验作为主要的考核内容,只有对基本算法的完全掌握,才能灵活应用。设计性实验是在验证性实验的基础上增加难度和深度。根据特定的数据结构有针性设计题目,必须使用某种数据结构解决。授课教师会和学生一起分析问题,引导学生如何解决,如何设计数据结构,采用什么样的算法,但是具体的数据结构及算法编程实现需要学生独立完成。综合性实验一般要求综合使用多种数据结构解决一个难度较大的现实问题;主要训练学生综合运用知识的能力、协作能力和创新能力。由于问题难度较大,我们采取将综合性实验安排在课程设计阶段。

教学实践证明,这种重点进行验证性实验,适当补充设计性实验,通过课程设计完成综合性实验的分层次的实践教学体系,符合学生的认知规律和特点,在实践教学中也取得了较好的教学效果。

3 总结

数据结构课程在计算机专业的课程体系中具有非常重要的作用。本文通过对数据结构课程教学中存在的问题及现状进行深刻剖析,结合教学经验有针对性地提出了相应的解决方法,从问题的源头上避免了这些问题的发生。教学实践表明,通过在教学中采用以上教学方法,提高了数据结构的教学质量,并取得了良好的教学效果。

参考文献:

[1]严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社,1997.

[2]余建国,刘双红.基于任务驱动的协同教学模式在程序设计类课程中的研究与实践[J].科技信息,2009,27:104,83.

[3]陈红琳.《数据结构》课程建设的探讨与实践[J].现代计算机,2012,10:45-47.

第9篇

论文摘要:在建构式教育理论的指导下,以就业需求为目标,针对数据结构教学中教与学目标不明、学习信心和动力不足、编程基础薄弱等问题,提出建构式的数据结构教学方法,在实际教学中取得较好的教学效果,这些措施也可作为其他计算机专业课程教学的参考。 

近年来,在产业界急需大量软件开发人员的情况下,普通本科院校计算机专业学生的就业率持续走低。网络、报纸等媒体对计算机本科教育现状多有批评,甚至出现了大学不如培训公司的极端观点,严重影响了学生对专业课程的学习兴趣、动力和信心。数据结构是计算机专业的核心基础课程,上承程序设计语言、离散数学,下启操作系统、编译原理等课程,其重要性不言而喻。一方面,数据结构学科具有难度大、抽象层次高、概念繁杂等特点,学生很难掌握,更不要说将抽象理论与就业实践需求相结合。另一方面,国内主流数据结构教材和相应的传统教学模式侧重于培养学生的计算机学科基础理论素养,而将如何通过组织数据结构教学活动积极推动就业的问题留给了任课教师[1]。这造成了学生学习数据结构的目标不明、信心和动力不足。笔者面向就业需要明确了数据结构的两大主要教学目标,并在实际教学过程中实践建构式教育理论,尝试解决学生对专业认识不清、学习兴趣不足、编程基础薄弱等问题。一些做法得到了学生的认可和配合,成功地激发了学生的学习主动性、在一定程度上培育了学生的创新精神。

1面向就业需求的数据结构教学目标

教育要服务于社会生产需求。数据结构教学也必须紧扣这一根本目标。本节从满足就业需要的角度阐明了数据结构教学的两个主要目标:

1) 培养超越具体程序设计语言技巧的编程技术。

现阶段是一个传统的生产生活方式迅速向电子化、信息化转变的时期。人们需要开发和维护更多、规模更大的计算机系统来满足生产和生活的需要[2]。这就决定了具有熟练编程技术的程序员在很长时期内都将受到产业界的青睐。大学对学生编程技术的培养始于程序设计语言的教学,如c语言,java语言等。但是现今编程语言繁多,各种新概念层出不穷,常常出现学生无所适从或者质疑某门语言课程已经过时无用的现象。甚至很多教师也在争论讲授何种编程语言。笔者看来掌握编程技术(而不仅仅是语言),回归编程的本质问题更加重要,无谓地追赶时髦不可取。作为编程语言课程的后续,数据结构教学的重要目标就是帮助学生理解编程的本质、锻炼编程技术以及学习提高编程技术的方法。

2) 培养围绕复用的软件开发方式。

随着软件规模的日益增大,软件开发模式逐渐从“从无到有”的模式过渡到“从有到有”的模式,即复用现有的丰富的软件资产,开发新的应用系统。事实上,复用的思想已经被广泛的用于软件开发实践之中,从各种各样的程序库、软件开发包、软件构件、web服务等各种可复用资产已经简化了软件开发的难度、提高了软件开发的效率也极大地改变了软件开发的模式。数据结构学科本身就是对软件复用思想的一种实践,它通过总结大量软件系统中反复出现的数据结构(如表、树、图、集合等),定义和实现处理这些数据结构的基本操作,最终达到能够在不同项目开发中反复应用的目的。这些基本数据结构和算法已经被实现为可复用的产品随着程序设计语言,如c++ stl、c# collections, java collections等,并得到了广泛的使用。因此,数据结构教学的另一个重要目标就是引导学生习惯围绕复用的软件开发方式,能够使用和定制已有的数据结构和算法库。

其他传统的数据结构教学目标,如培养学生面向实际问题进行算法设计和分析的能力,培养学生计算机学科的基本理论素养和思维方式等也非常重要。但普通本科院校学生对理论内容的接受能力以及将理论和现实就业需求相联系的能力相对较弱且教学时间有限[3],笔者认为重点突破本节给出的两个更具体、更可达的教学目标,并在实现这种具体教学目标的过程中潜移默化地培育学生的计算思维和理论素质,将会取得更佳的效果。

2建构式数据结构教学

教学理论研究以及教学实践反馈均表明,学生主动学习的效果远较被动地接受老师灌输的效果好的多。因此,为实现上述教学目标,在建构式教育理论的指导下,笔者探索并采用了一系列建构式教学措施,激发学生的主动性和兴趣,取得了较好效果。

建构主义认为,学习并非学习者对教师所授知识的被动接受,而是学习者以自身已有知识和经验为基础的主动建构过程[4]。知识不仅是通过教师传授而得到,更是学习者在一定的情境中,利用必要的学习资料,通过同化新知识、顺化自身知识结构的方式而获得。建构主义提倡在教师指导下的、以学习者为中心的学习,也就是说,既强调学习者的认知主体作用,又不忽视教师的指导作用,教师是意义建构的帮助者、促进者,而不仅仅是知识的传授者与灌输者。学生是信息加工的主体、是意义的主动建构者,而不仅仅是外部刺激的被动接受者和被灌输的对象。下面从理论教学和实践教学两个方面介绍我们采用的一些教学措施。

2.1理论教学措施

课堂教学是数据结构教学活动的主要部分,充分利用课堂教学时间,激发学生学习数据结构的兴趣和信心,帮助学生建立学习数据结构的环节非常重要。我们采用了如下措施:

1) 组织小型讨论。

好的开始是成功的一半,好的课堂教学须在上课之初就抓住学生的注意力,让学生带着轻松、愉快的心情听课。我的做法是在课堂的前5分钟,提出一个学生感兴趣的话题,组织若干个有3~5位同学参与的小型讨论。到一个学期结束时,每位同学都有至少一次的发言机会。讨论的主题可以灵活设置,如时事、技术、社会热点等。有时,课堂中间学生比较疲惫、注意力下降的时候,也可以穿插一点讨论,改善课堂环境。大多数学生非常喜欢这种讨论活动,积极参与其中,成为课堂的一部分,从被动上课转变为喜欢上课。

2) 重建理论知识所针对的问题。

国内的经典数据结构教材侧重严谨的理论,较少讨论各种概念、算法出现的背景以及探讨的问题是否仍然具有现实价值。而回答这些问题能够帮助学生重建理论知识所针对的问题原型,重现解决方案的提出、发展乃至最终成熟的整个过程,更有助于培养学生解决实际问题的能力,养成批判性、创新性思考的习惯。众所周知,关于树的存储方法很多,有双亲表示法,孩子表示法和二叉链表表示法[5],其中以树的二叉链表表示法使用最广,但其他存储方法也有其适合的应用。例如,在利用树表示各个集合,求集合中的等价类时,双亲表示法更为合适。每一个集合都用树的双亲表示法存储时,并设树的根结点的值为集合名,集合中的每个成员都对应一个结点,这样很容易找到一个元素所属的子集(顺着双亲指针找树的根结点)。

3) 组织“我来讲”活动。

数据结构涉及很多抽象的概念和算法,初学者很难理解。而教师则对理论内容比较精熟,常常倾向于从理论的角度逐步递进、展开讲解,这就增加了学生的学习难度。教师和学生在教学语言上的鸿沟是影响教学效果的一个重要障碍。教师当然可将抽象的理论概念与生活中更形象的概念进行类比,帮助学生理解,也可以将复杂的算法过程用多媒体动画模拟出来,直观地展示给学生,帮助学生掌握。但一方面,根据建构主义理论,教师和学生的知识背景不同,由教师设计概念类比语境和算法模拟动画实际上仍然是基于教师的知识结构对知识点进行的同化和顺化,而不是对学生知识体系的直接建构。另一方面,教师的经验和智慧有其局限性,未必总能够找到最适合的类比语境和动画模拟。为此,笔者采用了充分发挥学生智慧的方法,组织“我来讲”活动,要求学生通过设计算法的动画模拟,创建概念的类比语境等方式进行学习,并随机选择学生走上讲台对抽象理论概念和复杂算法进行说明。这样不但能够调动学生思考问题,还能帮助那些无法完成自我知识体系建构的同学从学生的视角去理解同一个问题。例如,对于n维数组是元素为n-1维数组构成的线性表这一递归的类型定义,可采用符号推理的方式,培养学生的理论素养,而同时可鼓励学生根据自己的理解将抽象理论具体化,建立帮助理解和记忆的现实语境。

2.2实践教学措施

数据结构是帮助具有基本编程语言基础的学生锤炼编程技术的关键课程。它揭示了程序设计的基本面,即如何处理相互之间存在一种或多种数据关系的数据元素所构成的集合、如何设计算法并分析算法的优劣。若没有相应的配套实验指导学生如何将理论应用于实际问题,只是泛泛而谈、纸上谈兵,学生容易迷失在数据结构的一连串复杂概念和算法之中,而不知道学习数据结构的意义何在。为实现教学目标,笔者锁定实验内容设置和实验考核等两个关键环节,实践了如下措施,取得了较好效果。

2.2.1实验内容设置

实验内容设置是进行实践教学的最重要部分。从覆盖知识点的角度看,实验内容须面向数据结构教学目标,即实验内容须能够锻炼学生的编程技巧,如算法设计、调试、测试以及调优等能力,还能够让学生体会到围绕复用开展软件开发的威力以及思路。从覆盖教育对象的角度来看,实验内容须面向大多数同学并充分考虑优秀同学,即实验内容须划分不同的层次,让大多数学生能够很容易入手,并让有能力、有余力的学生能够不断地深入,直至形成综合型课程设计。

基于以上考虑,并借鉴同行经验,笔者开展三个层次的实验教学活动,一是要求所有学生都完成的实验内容,要求学生采用不同的数据结构实现同一个问题并进行对比分析,例如,分别使用静态数组和动态分配的连续内存区实现顺序表,使用整型、字符型数组或者链表实现长整数的乘法,使用带头结点或不带头结点的循环链表模拟约瑟夫环等;二是组织程序设计竞赛,让部分学有余力的同学能够在算法设计、程序实现和调试、优化等方面得到锻炼和提高;三是设计综合型课程设计锻炼学生解决问题的综合能力,并通过适当分组,培养学生团队协作精神和能力,锻炼学生解决问题的综合能力的目标,最终达到以点带面全面提高学生能力的目的。

2.2.2实验考核手段

考核手段在教学环节中至关重要。考核手段是学生学习和锻炼自身能力的风向标。为保证每位同学都能积极完成实验并有所收获,避免抄袭和敷衍的现象,笔者采取了综合型的考核手段。其一,提交实验成果,即程序及其运行结果;其二,记录实验过程、分析实验结果以及总结实验得失的实验报告,对实验报告进行选优讲评,培养学生撰写科学实验报告的能力;其三,每位同学必须面向教师讲解自己编写的程序,包括主要思路和细节性语法,优秀的同学可走上讲台宣讲自己的实验方案和程序设计技巧。这就基本杜绝了学生相互之间抄袭程序和实验报告的现象,使得学生真正能够思考问题,并尽力动手完成实验。综合上述三种手段的综合型考核方法既能够达到督促大部分同学完成实验、锻炼动手能力目的,又能够达到培养优秀同学的目的。特别地,优秀同学宣讲活动能够使学生观摩到如何从学生的视角从无到有的解决问题的过程,这能够培养学生解决实际问题的信心并激发其学习积极性。

3应用中遇到的问题

建构式教学模式在应用和推广过程中遇到的主要问题来自三个方面。其一,目前学生的课业负担较重,习惯于被动“填鸭”而不习惯于主动“求索”,这是推动和开展建构式教学模式的主要障碍。其二,建构式教学活动,需要师生的密切交流,但现有师资不足难以满足实际需求。一个可能的解决方法是综合多门课程和多个老师,建构整体的知识框架和学习体系,避免课程教学中的重复劳动,提高师资的利用率。另一个可能的解决方法是利用互联网技术,建立在线教学园地。其三,建构式教学模式仍然处于探索阶段,各学科缺乏建构式教学素材。从笔者在实践教学的体验来看,应尽量从学生的学习背景和能力成长规律出发而不仅仅是从学科背景出发,为学生建构知识体系设计更平滑的路线。

4结语

笔者提出将“培养超越具体程序设计语言技巧的编程技术”和“培养围绕复用的软件开发方式”作为普通本科院校的数据结构教学目标,在建构式教育理论的指导下,设计并实践了一系列建构式教学措施,分析了应用建构式教学模式所遇到的一些问题。

未来将开展两个方面的工作。一是通过问卷调查、统计分析等手段定量地分析建构式教学方法的实际效果;二是创造和积累建构式教学素材,如研究数据结构课程设计过程中不同类型学生的知识建构路线,挖掘并推广其中优秀的知识建构方法。

参考文献:

[1] 教育部高等学校计算机科学与技术教学指导委员会. 高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)[m]. 北京:高等教育出版社,2006:8-101.

[2] 蔡敏,郑尚志,梁宝华.“数据结构”课程教学改革之我见[j]. 计算机教育,2009(4):50-51.

[3] 揭安全,李云清,杨庆红,等. 项目教学模式指导的“数据结构与算法”教学改革[j]. 计算机教育,2008(22):21-23.

第10篇

摘要:本文提出了以解决实际问题为目的的立体教学模式,探讨了计算机应用课程的教学模式,研究了激励学生提高应用能力的方法,研究了与教学模式相配套的教材编写模式。

关键词:教学模式;计算机应用;主体化;网络化

中图分类号:G642

文献标识码:B

为了快速提高学生通过计算机解决实际问题的能力,我们提出以解决实际问题为目的的立体教学模式,教学从要解决的实际问题入手,让学生知道本课程要解决的问题,然后将这个问题进行分解,最后围绕解决每个子问题,将要讲的理论和实践知识展开。这样所讲内容由解决实际问题连接到一起,构成一个立体结构,所有子问题解决后,则应用问题也随之解决。这样一门课完成后,学生不仅学会理论知识,更重要的是学会如何解决实验问题。

本课题的研究划分了以下三个层次:应用课程的教学模式;研究激励学生提高应用能力的方法;研究与教学模式相配套的教材编写模式。

1 应用教学模式的探索

这一层次就是探索以“解决实际问题为目标的立体化”教学模式,按照新的计算机应用课程教学模式思想组织教学试验。这就要求老师在讲课开始时对本课程的应用作阐述并布置课程设计题目,鼓励学生带着问题学习,通过不断的探索性学习,逐渐完成课程设计。在期中左右开始规划,期末交设计程序及文档。为此,我们专门印制了《实验报告》、《课程设计》、教学任务书等手册。每门课要求至少完成五个实验报告、一份课程设计。要求每位专业教师上课前制定教学任务书并上报系教学委员会审批,教学任务书含学生学习后达到的能力要求、教学进度、实验报告、课程设计项目、作业次数、参考资料、网站建设计划等,并作为教学检查的依据,纳入教师期末酬金量化。

2 专业计划的目标控制体系建设

专业教学计划以培养应用性人才为目标,制定了目标控制体系的新教学方案,任课教师教学任务、学生的学习目标更加明确化。原来教学计划的原则是最终控制,结果难以达到目标。

体例:(1) **专业总目标;(2) 就业范围;(3) 第一学年目标;基本技能;基本语言;基础知识;(4) 第一学期:达到目标;安排课程;考研主干课;按如此模式编制教学计划,将学生学习最终能力目标分解到每个学期,通过过程控制来达到总目标,使教学计划更科学、更有可操作性。

3 延伸课堂教学,积极探索立体化、网络化的教学模式

启动系级精品课程建设,并予以奖励。要求各专业课基本实现课件上网、作业上传、辅导答疑等功能,并鼓励老师积极申报精品课程。分两个阶段,第一阶段:2006年3月开始以“数据结构”、“C语言”、“网页制作”、“操作系统”、“计算机电路基础”五门专业课为前导制定了课程建设研发团队,并积极申报院级精品课程。第二阶段:2007年1月起所有专业课开始系级精品课程网站建设,取得较好的效果。

2005年“Delphi程序设计”被评为院级精品课程。2006年“数据结构”、“计算机电路基础”被评为院级优质课程。2007年有“数据结构”、“计算机网络实训”、“网页制作技术”、“计算机组装与维护”、“C语言程序设计”、“计算机组成原理”共六门课积极申报院级精品课程。其中“数据结构”被评为院级精品课程,“网页制作技术”被评为院级优质课程。

4进行考试方式的改革探索

加强电子试题库建设,改革应用性课程考试方式。向教务处申请对Flash、Photoshop、网页设计及五笔字型应用等四门技能型课程由原来的期末笔试改为学生自主式全自动网上测试,并要求计算机科学系所有学生(含已经笔试合格的学生)毕业前必须通过该测试。该申请被教务处批准,2006~2007学年度第一学期对网页设计及五笔字型两门课试点,受到学生欢迎,效果较好。针对考试中的问题,投入了更多的精力,考试系统进一步改进,2007~2008学年第一学期有计算机应用等五门课程进行了机考,扩大了考试科目,进一步扩充了题库,提高了防作弊能力。

5学生学习竞赛的组织与发动

为了切实提高学生的动手能力,积极组织学生参加各种竞赛,特成立了计算机科学系竞赛组,系主任任组长,我任副组长,下设五个竞赛小组。2005~2007年,除组织计算机科学系网页设计大赛、计算机应用技能大赛、五笔字型大赛、Flash设计大赛、图像处理大赛等,积极参加枣庄学院组织的各类赛事外,共组织学生参加省/国家竞赛5次,项目如下:ACM/ICPC程序设计竞赛、全国数学建模、齐鲁大学生软件设计大赛、正保教育杯第三届全国ITAT教育工程职业技能大赛、山东省电子产品设计大赛。在这些竞赛中学生均取得较好成绩,极大地鼓舞、带动了学生的学习热情。如下表所示:

6计算机应用课程教材编写模式的探索

按照以解决实际问题为目标教学模式,探索了计算机应用课程教材的编写,提出应用课程教材编写改革的方向为“立体结构知识层次分布式教材模式”。以解决实际问题为目标的立体化教学设计教材章节,教材第一章提出能力要求,并给出总体实现案例设计,每一章设有能力达标要求并围绕整本教材的案例组织教学内容,教学方式不再呈现传统从一个知识点到另一个点的线性结构的教学模式。基于新教改思想,我们正按照此模式编写计算机网络实训、数据结构等教材。

7 结束语

第11篇

关键词:指针;C语言;实验;数据结构

中图分类号:G642 文献标志码:A 文章编号:1674-9324(2014)04-0110-03

一、引言

《数据结构》作为实践性很强的计算机专业的基础课,教学中必然离不开实践。针对《数据结构》的课程设计实践不仅可以帮助学生巩固和加深对课程内容的理解,更重要的是可以进一步锻炼程序设计的技能[1]。C语言是数据结构实验中重要的程序设计语言,指针是C语言中一个非常重要的概念。在C语言中,指针的应用非常灵活,对于程序设计初学者来说比较难掌握,更谈不上灵活合理的应用。《数据结构》中(注:文中的讨论围绕严蔚敏老师的《数据结构》C语言版教材[2]),为了实现数据的存储结构,指针在线性表、树和图的存储中都有重要的应用,可以说,数据结构的实验绕不开指针的应用,如果学生掌握不好指针,是无法进行数据结构实验学习的。

教学中注意到,学生的主要问题是对指针的本质缺乏清晰的理解,知其然不知其所以然,导致在应用时只会依葫芦画瓢,不会灵活应用。针对学生理解和应用中的难点问题,剖析了指针的本质,以此为基础,讨论了指针的使用、指针和数组及指向函数的指针几个问题,希望能够加深学生对指针的理解,并在数据结构的实验中灵活应用。

二、指针

1.变量和数据类型。变量和数据类型是C语言中的基本概念,是否能理解它们的本质,对后续指针概念的理解非常重要。但是,由于它们是最基本的东西,教师和学生都认为很好理解,不是很重视。因此,学生对它们的理解往往流于表面,产生模糊的认识,如:变量是会变化的量;对变量名和变量的关系,变量和数据类型的关系等认识不清。

对变量的理解应该强调变量最本质的意义:内存中的一块存储空间,即所谓变量就是一块存储空间,如图1所示。

围绕对变量本质的理解应该强调几点:①一块空间(变量)具有两个特征,一是这块空间在内存中的起始地址(计算机内部16进制地址表示不便,本文中用3位10进制数示意),表示这块空间的开始,二是从起始地址开始的空间大小,这两个特征一起确定了一个变量;②作为内存的一块存储空间,自然可以存储不同的值,会变化;③变量的声明是提出分配存储空间的要求,没有分配空间,当然不能存值,不能使用;④为了在程序中方便使用变量,变量可以取一个名字,即变量名。

变量都有数据类型,从存储空间分配的角度看,数据类型的本质是对分配空间大小的约定。要给一个变量分配存储空间,涉及两个东西:分在那,分多大。分在那由当前内存情况确定,而分多大则由变量所属的数据类型确定,如int型就分4个字节大小。

2.指针的概念。指针是C语言中的派生数据类型,如int *p,声明了一个由整型派生的指针变量p,如图2所示。学生在为什么要用指针、指针变量和原类型之间是什么关系等问题上往往产生混淆,不能够清晰理解。

对指针概念的理解应该强调几点:①指针变量也是变量,声明了指针变量后同样需要给该变量分配一块存储空间,只是该空间存储的内容有点特殊,是一个地址。②获取数据存储空间的基本方式有两种,一是在程序的数据说明部分进行声明,这样,程序执行时存储空间已经预先分配,并建立了变量名和存储空间之间的映射,可称为静态分配。二是在程序执行的过程中,通过申请(如malloc函数)获得存储空间,可称为动态分配,这样的空间无法给予变量名,存取这样空间的唯一办法只能通过该空间的地址,即指向该地址的指针来存取。如图2中圈1所示,malloc函数申请了一块大小为4个字节的空间,空间起始地址是300,为了在后续程序中使用这块存储空间,该地址赋值给指向整型的指针p,p中存储的内容变为300。③应该强调,作为派生类型,指针变量也是有数据类型的,其数据类型是指针变量所指向的存储空间大小的约定。如图2中定义的p是一个指向整型的指针,强调这一点有助于学生对指针应用的理解。例如,表达式中,出现在指针变量前的*称为指针运算符,如赋值语句*p=21,其意义是给p中地址所指向的存储空间赋值,图2中,p中存有地址300,确定了被赋值空间的起始地址,而p的类型-整型,确定了这块空间的大小,即*p确定了一块从300开始,长度为4的存储空间。变量的本质是一块存储空间,那么反过来说,一块确定的存储空间就是一个变量,*p确定了一块存储空间,它等价于变量,给*p赋值等价于给整型变量赋值。

三、指针的应用

1.指针和数组。C语言中,数组名代表数组的起始地址,是一个常数,可以看做一个指针。《数据结构》中,线性表的顺序映像存储结构是通过动态申请的数组实现的,设线性表为a1,a2,…,an(n=20),数据元素类型为整型,其存储结构的定义如下所示:

#define L_SIZE 20

typedef struct{

int *elem;

int length;?摇?摇?摇 /*已存数据的个数*/

int listsize; ?摇 ?摇 /*数组容量的大小*/

}Sqlist;

上述代码主要定义了结构体数据类型Sqlist,该结构体类型中包含3个域:elem,length和listsize,其中elem是一个整型的指针变量,用来指向申请存储空间的起始地址。类型定义后可以声明该类型的变量,如Sqlist L;线性表的存储空间(数组)需要申请,如图3所示。

malloc函数申请了一块大小为80个字节的存储空间,该空间的起始地址假设为100,函数返回后,地址100被赋值给整型的指针变量L.elem,即指针变量L.elem中存有地址100。

学生对静态数组的使用相对熟练些,但往往不习惯动态申请数组的使用,下面以线性表的遍历为例来说明一下其使用方式。动态申请数组中遍历的实现有两种常用方式:一是把指针当做数组名来使用。数组名是地址,可以看做指针,反之,指针同样能够看做是数组名。遍历的代码可以写为:

for(i=0;i

这里要注意理解中括号[ ]的意义,中括号本质上是运算符,它的意义是执行操作L.elem+i(这里要关注指针的类型,即不同类型的指针加i,计算结果是不同的),找到存储ai+1这个整型数据的4个字节空间的起始地址,随后根据指针的类型(确定大小),存取这4个字节的存储空间。

二是通过指针来进行遍历。遍历的代码可以写为:

for(p=L.elem;p

整型指针p首先被赋值L.elem,图3中是100,这时p指向数组中第0号单元的起始地址,通过指针运算符*p存取从100开始的4个字节空间,即数组中第0号单元。随后,通过p的自加运算,指针p后移4个字节(p是整型指针),依次对数组中所有元素进行遍历。从结果上来看,代码(1)和代码(2)是完全等价的。

2.链表。线性表的非顺序映像存储结构是链表实现的。定义链表结点(结构体),动态申请结点存储空间,线性表每个数据元素存储在一个结点中,通过指针描述数据元数之间的关系,其结点的定义如下所示:

typedef struct LNode{

?摇int data;

?摇struct LNode *next;

} LNode,*LinkList;

上述代码主要定义了结构体数据类型LNode 和指向结构体的指针类型LinkList,该结构体类型中包含2个域:存储数据元素的域data和指针域next,next用来指向本结点数据元数在逻辑结构中的后继,链表如图4所示。

仍以线性表的遍历为例来说明其使用方式,利用指针p来进行遍历,代码可以写为:

p=head->next;

while (p) {

对数据元素p->data进行处理;?摇?摇?摇(3)

p=p->next;}

p被赋值p=head->next,指向首元结点,随后通过循环中p=p->next语句,p依次指向后继结点,直到链表结束。这里要注意对->操作符的理解,当指针p指向一个结构体存储空间时,如果需要存取结构体中的某个域,可以使用“p->域名”的方式,如p->data就是存取该结构体中的data域;另有一种等价的方式“*p.域名”,如*p.data,*p确定一块结构体空间(结构体变量),用“.”操作符存取结构体变量的某个域。

3.指向函数的指针。函数载人内存时,必定占有一块存储空间,可以定义指向函数的指针,通过指针来调用函数,例如:

int (*p)( );?摇?摇?摇/* 定义了一个函数指针,其所指函数的返回值为整型*/

p=fun;?摇?摇?摇?摇?摇?摇?摇/*设int fun(int, int);*/

(*p)(a,b)?圳fun(a,b)

首先定义了一个指向函数的指针p,随后p被赋值函数名,即让p指向函数fun,p指向fun后,可以通过指向函数的指针调用函数,其效果和通过函数名调用是等价的。应该注意到,这样用法毫无价值,能通过函数名调用,何必还要间接用指针调用。因此,指向函数的指针一般用作函数的形式参数,例如:

Status Sub(int e);

Status Add(int e);?摇?摇?摇/*返回值为Status的两个函数*/

void Preorder(BiTree T,status(*visit)(int e)){ ?摇/*遍历二叉树的函数*/

……….

(*visit)(a);?摇?摇/*通过指向函数的指针调用函数*/

………

}

Preorder(T,Sub);

Preorder(T,Add);

假设有数据元素为整型的二叉树T,Preorder是实现二叉树的先序遍历的函数。上述代码中,首先给出了两个函数返回值为Status的函数原型,设Sub是对整数进行减处理的函数,Add是进行加处理的函数。那么,Preorder(T,Sub)调用时,函数名Sub作为实参传递给形参visit(指向函数的指针),则在遍历过程中(*visit)(a)所调用的函数是Sub;同理,Preorder(T,Add)调用时,(*visit)(a)所调用的函数是Add。这里应该强调,为什么要这么做?从上例中看,对二叉树的遍历过程是一样的,通过两次调用中visit所指的函数不同,对二叉树T中数据元素的处理不同,一次是减,一次是加。指向函数的指针带来的好处是,如果对数据元素的处理有新的变化,如增加乘的处理,仅需要编写乘的函数Mul,随后调用Preorder(T,Mul)就可实现对二叉树中数据元素的乘处理,不需要改变Preorder函数。这样的程序结构非常有利于提高程序的可维护性。

四、小结

作为实践性很强的计算机专业核心课程,《数据结构》课程的实验环节非常重要,指针的灵活应用是课程实验中的难点。学生对指针了理解往往流于表面,只会模仿性应用,不能深入理解和灵活应用。文中,我们结合实际的教学经验,总结了指针中的几个学生不容易掌握的问题,并分析讨论了教学中的要点。通过多年的教学实践,对学生《数据结构》课程的学习和提高编程能力是有帮助的。

参考文献:

[1]陈越,何钦铭,冯雁.“数据结构”综合性课程设计教学探索与实践[J].计算机教育,2008,(8):54-55.

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

第12篇

1JDK中的数据结构

数据结构是数据元素之间的关系。从概念和实现两个角度,可将数据结构分为数据的逻辑结构和数据的存储结构。按照数据元素之间前驱和后继关系来分,数据的逻辑结构可分为以下4种:集合(Set)、线性表(List)、树(Tree)和图(Graph)[2]。数据的存储结构主要包括数据元素本身的存储以及数据元素之间关系表示。数据元素之间的关系在计算机中主要有两种不同的表示方法:顺序映像和非顺序映像,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。JavaJDK为常用的数据结构定义了一些接口(Interface)和实现(Implementation)。这些接口、实现类以及常用的排序、查找等算法统称为JavaCollections框架(JavaCollectionsFramework)。Collections框架的设计目的是要满足如下目标:高性能、一致性、扩展性和轻松编程。Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用即可[3]。Java中把一组对象称为Collection,也就是说,Collection是对象的容器。Java对Collection中的对象没有任何前驱、后继以及重复性的约束,只是约束了对象类型E。Collection接口定义了其上的3类操作:针对单个元素的基本操作、迭代器和Collection对象之间的批量操作。基本操作包括增加、删除、判断是否包含某个元素、判断是否为空、容器中当前元素的个数、清空等。批量操作包括:合并两个Collection容器、从一个容器中移走一些元素、保留两个容器中相同的元素、判断一个容器中的元素是否完全包含在另外一个容器中等。接口Collection<E>的子接口有Set<E>和List<E>。集合(Set)在Collection的基础之上增加了“不允许重复元素”的约束;而List则在Collection基础之上增加了“元素之间具有前驱、后继关系”的约束:除了第一个元素外,所有元素具有唯一的前驱;除了最后一个元素外,所有元素具有唯一后继。如果仅关心数据元素是否出现,而不关心数据元素之间的次序,则应使用Set<E>。Java为集合接口提供了两个基本的实现:HashSet<E>和Tree<Set>。HashSet<E>是Set<E>接口的典型实现,大多使用集合的场合就是使用这个实现类。HashSet实现类按哈希算法来存储集合中的元素,因此具有很好的查找性能。HashSet不能记忆元素之间的顺序,包括插入顺序。其子类LinkedHashSet<E>也是根据元素hashCode值来决定元素存储位置,但它同时使用链表维护元素的次序,这样使得能够记忆插入顺序。由于LinkedHashSet需要维护元素的插入顺序,所以性能略低于HashSet,但遍历集合里的全部元素性能较好。实现类TreeSet<E>可以确保集合元素处于排序状态,TreeSet并不是根据元素的插入顺序进行排序,而是根据元素的实际值来进行排序的。TreeSet采用红黑树的数据结构对元素进行排序,并要求添加进TreeSet中的对象必须实现CompareTo<E>接口。List<E>接口作为Collection<E>接口的子接口,可以使用Collection接口中的全部方法。但是List接口中定义了元素位置和元素范围的概念,使得List可以根据元素位置索引(index)来插入、替换、删除集合元素以及查找指定对象的位置。ArrayList<E>实现类基于数组实现了List接口,其内部封装了一个动态再分配的数组。每个ArrayList对象都有一个capacity属性,这个属性表示它们所封装的数组的长度,当添加元素超过长度时,capacity会自动增长,其默认值为10。LinkedList<E>内部以链表来保存集合中的元素,因此随机访问容器时的性能较差,但在插入、删除元素时性能较好。Queue<E>接口用于定义队列这种数据结构,队列是“先进先出”的容器,通常不允许随机访问其中的元素。Java中的队列接口Queue<E>没有继承List接口,而是直接继承了Collection接口。如果使用具有固定容量的队列,则应使用offer()来加入元素,使用poll()来获取并移出元素,因为add()和remove()方法在因容量原因失败时抛出异常。如果只是访问队首而不移出该元素,使用element()或者peek()方法。LinkedList<E>类实现了Queue<E>接口,因此我们可以把LinkedList当成Queue来用。PriorityQueue是一个比较标准的队列实现类,它并不是按加入队列的顺序,而是按队列元素的大小来记忆队列元素的顺序。因此当调用peek方法或者poll方法来取出队列中的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。Stack<E>实现了List<E>接口,提供了push和pop操作限制线性表中元素的插入和删除只能在线性表的同一端进行。JDK1.6引入的ArrayDequ<E>实现类被优先推荐作为栈使用。ArrayDeque<E>实现了Deque<E>接口。Deque<E>接口定义了双端队列,双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。JavaJDK中没有直接提供树和图的接口和实现类,但是可以通过研究TreeMap的源代码学习操作树的一般编写模式。综上,数据结构与Java面向对象程序设计两门课程内容的衔接见表1。

2面向数据结构衔接的Java课程实施方案

Java面向对象程序设计为1学期的课程。总课时为讲授54学时、实验32学时。其中,与数据结构知识点紧密相关的JavaCollections框架部分为讲授6学时、实验4学时。在讲授环节,按照表1列出的顺序进行。在实验环节完成与授课内容相关的验证性实验。在课程设计实践环节,要求学生使用Java设计常见算法,然后阅读JDK提供的源代码进行对照。具体方案如图1所示。比如,在java.util.Collections类中提供了数据结构中学生已经学过的常见算法,如二分查找、计算元素频数、查找最大/最小元素、反转线性表、按照指定距离旋转线性表、随机排列线性表、交换指定位置上的两个元素以及排序等。注意,在Java6中Collections.sort()使用的是MergeSort;而在Java7中,内部实现换成了TimSort。要求学生按照这些API文档说明,首先按照数据结构课程中的知识设计自己的算法实现,然后与API源代码进行比较。由于学生使用C语言版的数据结构教材,所以在面向Collection编程之前,作为过渡,先让学生面向数组编程。哈希表是一种重要的数据结构,也是实现集合的基本途径之一。通过研究HashSet的源代码,可以让学生理解为什么每个对象都要有hashcode()方法,以及哈希表的编码特点。由于HashSet的实现是基于HashMap的,所以研究HashSet就要研究HashMap。Map是一种典型的名值对类型,它提供一种Key-Value对应保存的数据结构。客户程序通过Key值来访问对应的Value,这个接口并没有继承Collection这接口;而其他的类或者接口,不管是List、Set、Stack等都继承或实现了Collection。TreeMap和HashMap算是Java集合类里面比较有难度的数据结构。HashMap元素存取的时间复杂度一般是O(1),而TreeMap内部对元素的操作复杂度为O(logn)。TreeMap记忆了顺序,TreeSet内部的实现使用了TreeMap。

3结语

数据结构与程序类课程的关系问题愈来愈引起关注[4-6],我们提出面向数据结构知识体系的Java课程教学与数据结构课程的衔接方案。这个教学方案已经在河北师范大学本科计算机专业实施三届,取得了较好的效果,学生对算法的理解加深了,解决问题的自信心增强了,也建立了工程意识。

作者:董东 单位:河北师范大学 数学与信息科学学院