“数据结构”课程教学体系研究

2018-01-19 10:43凌,
电气电子教学学报 2017年6期
关键词:数据结构课程设计考核

袁 凌, 李 丹

(华中科技大学 计算机学院, 湖北 武汉 430074)

0 引言

“数据结构”是计算机专业的一门综合性专业必修课,主要研究从现实中总结出的数据的逻辑结构、数据在计算机中的存储结构以及在数据结构上能进行的各种处理运算方法[1]。该课程的教学目标是让学生根据实际问题设计出数据的逻辑结构,选用合适存储结构,设计算法并编写出解决应用问题的程序,从而培养学生的实践能力和工程素质。

以往,我院“数据结构”课程教学是以课堂理论教学为主,辅以少量实践教学的模式进行,学生反映学习比较吃力,对如何写出规范而高效的程序感觉困难。这样的教学模式使得最终的教学效果不尽人意,主要表现在以下三个方面:

1)实验学时偏少,所占比重偏低

以往,我院“数据结构”课程设置48个学时的理论教学,只有16个课时的课程实验,课程实验主要是对理论课中的经典算法进行验证,其考评成绩仅占整个课程最终成绩的20%左右。一方面由于实验课学时少,另一方面由于实验成绩在最后总成绩中所占比例小,学生对课程实验不重视,削弱了锻炼自己的动手能力。从而造成课程结束后,学生依然不知道如何合理运用所学的数据结构知识来解决实际问题,错失了培养基本编程动手能力的时机。

2)课程设计项目设置缺乏综合性

实验内容是:采用顺序表作为线性表的物理结构,实现12个基本操作,主要包括: 构造一个空的线性表、销毁线性表、置线性表为空表、判断线性表是否为空表、线性表的长度、线性表第i个元素、查找特定元素在线性表中的位置、特定元素的前驱、特定元素的后继、特定位置插入元素、特定位置删除元素、扫描线性表等。

3) 未从提升程序设计能力的角度组织教学

之前的课堂理论教学主要以知识点串讲的形式展开,48个学时的理论教学需要囊括:① 线性结构:线性表、堆栈和队列、串、数组和广义表;② 非线性结构:树和二叉树、图;③ 两种常用操作:查找和排序[4]。包含的知识点相当多,加之每个典型数据结构都有对应的基本操作算法。特别是逻辑性强的算法很抽象,即使采用类语言描述,算法执行的结果也不能直观地表示出来。因此,在课堂上主要强调的是掌握数据结构的基本知识,很少关注培养学生形成基本的解决具体问题的算法思维。

针对我院“数据结构”教学中出现的问题,并参考其他兄弟院校“数据结构”课程的教学改革现状,我们为了克服以往“数据结构”教学中以理论为主、忽视软件开发能力培养的倾向,从而构建了以实践教学为核心的“数据结构”课程新教学体系[5]。此教学体系主要包括三个方面:培养算法思维的理论教学方法、培养编程素养的实验项目设置以及培养软件工程能力的课程项目设计。该教学体系如图1所示。

图1 以实践为核心的数据结构新教学体系

1 课程新教学体系构建

1.1 培养算法思维的理论教学方法

“数据结构”课程的教学目的是学会分析研究实际问题中数据对象的特性,并能根据问题的需要选择适当的数据结构和存储结构以及相应的算法,并掌握算法的时间分析和空间分析的方法,同时提高算法设计、算法描述和程序设计的能力[6-8]。可见,理论教学中除了讲授数据结构的相关特性之外,应着重培养学生的算法思维。这两年来,我们抛弃了以往满堂灌的理论教学模式,而是以“逻辑结构→存储结构→基本操作的实现→典型应用”这一主线贯穿整个课程教学过程;以“分析算法思想→运用自然语言描述算法→进行算法设计”为思路,引导学生解析和学习各种经典算法。除此之外,在每一章的理论教学中设置算法设计环节,让学生自主地去思考实际问题,有意识地培养学生首先进行问题分析,而后整理算法思想运用自然语言加以描述,最后实现从自然语言向计算机语言的转化过程,从而使学生形成一种良好的解决实际问题的算法思维,打破以往碰到算法设计问题无从下手的僵局。

下面给出在理论教学中每一章设置的算法设计题目,如表1所示:

表1 理论课算法思维培训设置

在这里,以第一章中所设置的冒泡排序优化来说明培养学生算法思维的过程。这一章主要是让学生理解算法的基本特性以及如何计算算法的时间复杂度和空间复杂度,是后面章节学习算法的基础。为提高学生的学习兴趣,首先用一组数据,引导学生思考如何进行排序,用自然语言描述出排序的主要思想,一般学生思考的都是最直观的比较大小的排序方法。然后,引入冒泡排序算法,用这组例子来说明冒泡排序的过程,让学生深入理解冒泡排序的思想,并与自己所想的排序方法进行对比。在此基础上,给出冒泡排序的C语言表述,并逐行地解释程序,引导学生理解如何从自然语言描述转化为程序语言的表述。在理解此冒泡排序程序的基础上,再让学生思考:如何能提高此冒泡程序的效率?可能会有不少学生能够思考出:增加一个标志量来辅助判断比较冒泡的过程是否应该终止,从而提高冒泡排序的效率。

螺虫乙酯分别按照2000倍和3000倍稀释液喷施2次和3次,距末次施药后7 d、14 d、21 d和28 d采样测定,螺虫乙酯在猕猴桃中的含量为 0.06~0.52 mg/kg。

(2)选择适当的物理存储结构实现优先级队列ADT;

1.2 培养编程素养的实验基项目设置

针对以往实验课时少,占据“数据结构”课程成绩比例小,造成学生不重视实验课,实际动手能力没有得到充分锻炼的现状,我们对“数据结构”课程的实验教学进行了深化改革。目前,实验教学已从理论课程中剥离出来,成为了一门单独的课程:数据结构实验,增加到32个学时,单独考核,从而大大提高了实验教学在学生心目中的重要性。由于学时比以往充足,课程组设计了典型而完备的实验项目,充分锻炼学生使用指针、复杂数据结构和处理问题的能力。

推荐理由:教育部新编初中语文教材指定阅读。特色专有版权选品,领跑学生阅读,以部编教材已选文本及作家为核心,特邀作家顾问团队,精选典范文本,同步实现“精华阅读”+“延伸阅读”。

表2 实验项目设置

实验目的为:① 加深对顺序表的概念、基本运算的理解;② 熟练掌握顺序表的逻辑结构与物理结构的关系;③熟练掌握顺序表的基本运算的实现。

以第一个实验项目:“顺序表”为例来具体说明其实验目的、实验内容以及实验任务。顺序表和第二个实验项目“链式表”是属于线性表的两种存储结构。

不过,社会上接受过急救培训的人数太少。中国接受心肺复苏基本生命支持培训的人口,占总人口比率不足1%,普通百姓也缺乏急救知识。

课程设计是课程实验的深化和延伸。课程设计内容相对于课程实验而言,所涵盖知识点更综合,难度更大,实用性更强[2,3]。以往,我院“数据结构”课程设计通常设置类似于哈夫曼编码、串的相似度检测这样的题目。主要考核学生是否能将相关算法实现出来,并没有涉及到问题的理解描述、需求分析、数据结构选择、详细算法设计以及代码实现、测试维护等软件项目设计与开发的整个过程。学生经过课程设计后,依旧缺乏软件工程项目的相关概念以及针对实际需求进行分析问题、描述问题、解决问题的能力。

实验任务是采用顺序表作为线性表的物理结构,实现上述12个基本操作,并构造成具有功能菜单的系统,线性表采用文件形式保存,并实现多个数据元素类型相同的线性表管理。由于顺序表是整个数据结构课程的基础,设置了“顺序表”和“链式表”两个实验项目来锻炼学生对线性表的数据结构、基本运算的编程能力,为更复杂的算法设计与实现打下良好的基础。

学生在完成“顺序表”的实验项目后,在实验报告中进行了相应的技术小结,这里引用其中一名学生的技术小结如下:“在实验过程中,我加深了对线性表概念和基本运算的理解,更加熟练地掌握了线性表的逻辑结构和物理结构之间的关系。通过这次实验,我明白了顺序表的销毁和清除的区别,销毁要将相应的顺序表所占用的空间释放,而清除只需要将顺序表的长度置为0。也懂得了充分利用顺序表的数据结构特点,在判断是否为空和求长度的时候可直接访问length,而不用对顺序表中的元素进行操作。同时一定要注意在实现插入操作时,要判断顺序表是否已经存满,如果满了要再申请一段空间,在实现删除操作时,要判断顺序表是否为空。”由此可见,实验项目的设置充分培养了学生的编程素养,为学生将理论知识转化为实际的程序运行提供了良好的平台。

1.3 培养工程能力的课程项目设计

上节实验教学所设置的实验项目培养了学生的编程能力,这些实验项目主要以基础算法为主,各个实验项目相对独立,学生依旧缺乏工程项目的概念,因此,进一步设置更为复杂且兼具综合性的课程设计项目必不可少。课程设计项目的设置让学生涉足软件项目的设计,体会一个软件项目的开发过程包括问题描述、需求分析、数据结构、详细算法设计以及代码实现、测试维护等,从而进一步全面训练学生分析问题、描述问题、解决问题的能力。

近两年来,我们设置的课程设计项目如表3所示,主要包括题目、主要任务以及权值。权值代表项目的难度,难度越高权值越高,与课程设计的最终打分挂钩。权值的设置充分考虑了不同学生的能力差异,让所有的学生都有机会完成适合自己能力的课程设计项目,提升软件设计与开发的兴趣。

所有数据为各重复实测值的平均值,数据的统计、分析及制图采用Microsoft Excel(2013)进行,方差分析采用SPSS(19.0)进行,显著性水平设定为0.05。

表3 课程设计项目设置

他打开包袱,第一件事就是数数他的火柴。一共六十六根。为了弄清楚,他数了三遍。他把它们分成几份,用油纸包起来,一份放在他的空烟草袋里,一份放在他的破帽子的帽圈里,最后一份放在贴胸的衬衫里面。做完以后,他忽然感到一阵恐慌,于是把它们完全拿出来打开,重新数过。

(1)基于堆的概念设计优先级队列(Priority Queue)抽象数据类型,至少包含初始化、销毁、清除、插入、删除、判空以及判满等基本操作;

由于串线的每一步都是沿着正六边形的一条边进行运动,所以将每一条边赋值为(见图6).假设每圈运动起点坐标为,则有上行线和下行线在第圈运动到第步的坐标表达式,即当时,有;当时,有;当时,有;当时,有;当时,有;当时,有.

通过这样的启发式教学方法,学生在思考中学习,学习中思考,发挥他们的主观能动性,在“数据结构”课程的初期形成算法设计的思想,为后面培养算法思维打下良好基础。

(3) 应用优先级队列ADT设计与实现一个医院门诊病人就诊事件的仿真程序,使医师服务效率尽量高。

凡有意襄赞盛举者,烦请提供清晰图像发送至联系邮箱或将作品图片邮寄至浙江人民美术出版社,经编纂鉴定委员会审议后确定是否收录。

设计要求是:① 仿真事件(如病人到达、病情复杂度/就诊时间、病人离开等)可根据某种概率分布或随机模型生成;② 要求对各种算法进行理论分析,同时也对实测结果进行统计分析。测试数据要求有一定规模;③ 界面要求整洁、美观,操作方便。

此项目有一定的难度,因此权值设置为1.05,选择这个项目的学生评分会上浮5%。

2 考核标准和实施效果

2.1 考核标准

新的“数据结构”课程教学体系中,理论教学、实验教学和课程设计是三个独立的相关课程,需要分别进行考核评价,这就改变了以往“数据结构”课程偏重于期末闭卷考试的方式,实施更多元化的考核方式。考核不仅考核学生对理论知识的掌握,而且还重点考核学生运用所掌握的知识解决实际问题的能力。下面就这三个课程的考核方式进行说明:

(1)理论教学。由于在理论教学设置中加强了对学生算法思维的培养,鼓励学生积极思考如何设计更有效率的算法来解决问题,在理论教学的考核中加重了算法思维方面的比重。由于理论教学还是以考核学生掌握理论知识为主,因此,考核方式还是以期末闭卷考试为主,考试成绩占总成绩的70%,每章针对性的作业练习评分占20%,课堂上针对算法思维培训思考题的回答情况占10%。在期末考试试卷中,主要题型有:选择题和判断题等客观题占30%,主要考核数据结构课程中相关的基础知识;求解题等主观题占40%,主要考核对数据结构中逻辑结构、存储结构以及基础算法的理解与运用;完善程序、编写程序、优化程序等算法设计相关的题目占30%,考核学生是否已经具备基本的编程素养,与以往相比,加大了算法设计相关的题目比重;

以往的数据结构实验只设置了针对线性表和二叉树的算法实验,现在的数据结构实验针对线性表、队列、栈、数组、二叉树以及图都设置了相应的实验,完备性和实用性都大大提高。表2列出了典型的数据结构设置的实验项目。

(2)实验教学。由于实验教学中设置了6个实验项目,每个实验项目分别进行考核打分,最终成绩取平均分。考核由专职教师现场检查和实验报告两方面组成,在现场检查中,主要考核学生的程序功能完备性、程序规范性以及口头表达能力,占每项实验成绩的50%。每项实验均要撰写相应的实验报告,实验报告主要包括问题描述、系统总体设计、有关常量和类型定义、算法设计以及系统实现与测试,占每次实验成绩的50%。学生当面讲解自己所实现的算法,加深了其对算法的理解,撰写规范的实验报告,为学生今后撰写项目报告打下了良好的基础;

(3)课程设计。通常在理论课和实验课结束后,就会公布如表3所示的课程设计的题目设置,一个小班(一般30人以内)会配备一个专职指导教师。指导教师通过沟通平台进行前期指导,帮助学生理解题目的意义以及需完成的主要功能。再安排一周的时间进行课程设计,专职指导教师与学生开展面对面讨论,并通过学生演示与讲解对学生的项目完成情况进行考核评价,此项占总成绩的50%。在该项考核结束后两周之内,学生根据课程项目设计的要求撰写课程项目设计报告,报告内容包括问题描述、需求分析、数据结构、功能设计、详细设计以及测试等方面,根据报告内容和报告规范进行评价,此项占总成绩的50%。这种考核方式,进一步训练学生掌握软件工程的过程和方法。

2.2 实施效果

我院在2014级计算机专业、物联网专业和卓越工程师班的“数据结构”课程教学中开始采用了新的课程教学体系。下面分别就2014年、2015年、2016年在新的课程教学体系实施后,对三门课程(理论、实验和课程设计)成绩进行对比,以此证明采用新的教学体系后学生在成绩上的提高。需说明的是,由于之前未将实验作为一门单独的课程开设,无法列出成绩对比图,只做2016年的考核情况说明。

现在以第1个项目为例详细地说明课程设计项目设置的目的、内容及要求。第1个项目“基于堆的优先级队列ADT实现及其应用”的设计目的是使学生掌握堆作为优先级队列的数据表示方法、物理存储结构与相关算法。设计内容主要包括:

1)理论考试考核情况对比

将2014年、2015年、2016年“数据结构”理论考试中的及格率、优秀率、算法题得分比例进行了对比,如图2所示。可以发现,在这三项指标上,2016年的考核成绩都有提高,其中及格率达到92%,优秀率达到8%,算法题得分比例达到80%。学生普遍反映遇到算法设计的题目不再出现无从下手的情况,可见理论教学课堂中针对算法思维的培养卓有成效。

图2 数据结构理论课成绩对比图

2)实验课程教学考核情况

在2016年单独开设的实验教学课程考核情况中,90%以上的学生都能达到80分以上,编写的程序功能完备,形式规范,实验报告详实并包括多个测试案例,充分锻炼了学生的编程能力,很多学生在实验报告中反映“在‘数据结构’实验课中学会了规范的编程方法以及程序调试技巧。”

3)课程设计考核情况对比

将2014年、2015年、2016年“数据结构”课程设计考核中的优秀率和良好率的得分比例进行了对比,如图3所示。可见,2016年的考核中优秀率比以往有较大提高,可以达到13%,良好率也达到82%。学生在经过实验教学打下良好的编程基础后,把重心放在了如何更好地设计出更符合用户需求的软件上面,所实现的系统不仅功能完备,而且具备友好的用户界面,方便用户使用。可见,学生通过课程项目设计,学会了从用户角度出发考虑软件的设计与开发,具备了软件工程所强调的全局观,而不局限于编写程序,为今后从事软件设计与开发专业打下了良好基础。

将农村生活垃圾纳入城镇垃圾处理体系,推动了城乡垃圾一体化处理。每户配备小型垃圾桶和手推车对垃圾进行分类收集,每村要配置一处垃圾收集站。收集站的垃圾定时由乡镇政府清运,根据距离处理场的远近不同,分批运往中转站或垃圾填埋场。强化畜禽养殖污染治理,提高畜禽粪污收集和处理机械化水平。

3 结语

“数据结构”是培养学生程序设计能力的基础课程,理论性和实践性都很强。课程的学习需要理论教学的成果来指导实践教学,更需要实践教学来强化理论教学的成果。本文所提出的以实践为核心的新教学体系,在理论教学中贯彻启发式教学方法,通过设置算法思维培训,培养了学生良好的算法思维;在实验教学中,通过系统、科学地设置实验项目,充分锻炼了学生的编程能力,培养了学生动手解决实际问题的能力;在课程设计教学中,通过提高课程项目设置的综合性和趣味性,激发学生的学习兴趣,实现了“加强学生实践和动手能力的培养”的软件工程专业人才培养目标。

确实,由于成长背景不同,不同的时代有不同的审美倾向,不能强求一致,但任何一个社会都有主流审美,如果主流审美出现了问题,那么这个社会就很可能出现各种问题。审美还存在引导问题,即便一些非主流审美无伤大雅,但社会还是有责任指出什么才是主流,应该追求什么样的主流,在导向上不能出现偏差。

湿孔作业适用范围大,可广泛用于各种地层钻孔施工,由于泥浆作用,具有钻孔深度大,钻具磨损小,孔内壁稳定性高,灌桩混凝土密实度高等特点,但同时钻孔泥浆对环境的污染一直以来也是工程建设的难题[1]。目前,实践中主要运用正反回旋钻、旋挖钻和冲击钻等,经过数十年的经验积累,施工方法较为成熟。

图3 数据结构课程设计成绩对比图

(1)同质化倾向严重,民宿识别度低。庐山现有民宿多为原景区内居民自用房改造,规模较小,客房数量不多,且装修简单,外形上缺乏特色,千篇一律。多数民宿主题设置为“家庭旅馆”,名称及风格都十分雷同,大多以“XX家庭旅馆”为名,缺乏创意。庐山民宿经营者年龄层次也较大,为游客提供的基本是普通的“长辈式”温馨服务,但是目前游客年龄结构越来越年轻化,更追求有个性、多元化的住宿体验,这些民宿就不能够满足年轻游客群体的消费需求,出现了无特色、无创意、低识别度的现象。

[1] 严蔚敏, 吴伟民. 数据结构(C语言版)[M]. 北京: 清华大学出版社, 2013: 20-55.

[2] 王晓明. 基于学生自主和协作学习的数据结构实验教学模式探索与实践[J]. 北京:高教学刊,2015(22):229-230.

[3] 吕亚荣,缪相林. 数据结构与算法实验教学的改革与探索[J]. 北京:教育教学论坛, 2014(18): 28-29.

[4] 孙笑微.“算法与数据结构”课程的知识体系和教学改革实践[J]. 沈阳:沈阳师范大学学报:自然科学版, 2010, 28(3): 446-448.

[5] 揭安全,李云清,杨庆红,等. 数据结构实践教学体系的设计与实施[J]. 北京:计算机教育, 2010(17): 85-87.

[6] 陈红琳. 《数据结构》课程教学改革与实践[J]. 北京:现代计算机(专业版), 2015(20):25-28.

[7] 牟永敏,刘梦婷. 浅谈算法与数据结构的关系[J]. 北京:数据通信, 2013(4): 37-38.

[8] 喻飞. 电子信息专业“数据结构”课程教学探索[J]. 南京:电气电子教学学报, 2009, 31(3):17-18.

猜你喜欢
数据结构课程设计考核
内部考核
龙凤元素系列课程设计
中秋明月
创新完善机制 做实做优考核
公立医院 如何考核?
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
高职高专数据结构教学改革探讨
基于Articulate Storyline的微课程设计与开发
TRIZ理论在“数据结构”多媒体教学中的应用
开放大学课程设计与资源开发