“数据结构”课程教学改革的研究与实践

2014-03-29 02:33严小燕夏桂林
巢湖学院学报 2014年3期
关键词:数据结构C语言实验课

严小燕 夏桂林

(巢湖学院计算机与信息工程学院,安徽 巢湖 238000)

《数据结构》作为计算机相关专业的学科基础课程,具有承上启下的重要作用。它既是对先修课程(高级语言)的扩充,又为学生学习《操作系统》、《软件工程》、《编译原理》、《数据库》、《人工智能》等课程提供必要的知识储备。通过本课程的学习,使学生系统地掌握基本数据结构的特点,数据结构与算法的关系,着重培养学生的数据组织、数据存储以及如何处理数据等的基本理论知识和技能,提高学生设计算法、设计合适的数据结构的能力。本课程强调理论和实践的结合,突出对学生的动手能力的培养,使得学生在面对复杂问题时能够提出优化解决方法。由此,如何能使学生更好的学好本课程,达到良好的教学效果显得尤为重要。

1 存在的问题

目前数据结构课程教学中主要存在的主要问题有:

1.1 课程意义不了解,学习目标不明确

数据结构课程是抽象性、理论性较强的一门课,教材中,大都从抽象数据类型的观点来论述数据结构、描述算法,操作性不强,学生看不到立竿见影的运行结果,不重视实验课,学习积极性不如语言类课程[1]。大部分学生不清楚为什么要学习数据结构,学了以后能用在哪?认为不学照样可以完成编程。这样,教学效果不尽人意。

1.2 学生对前驱课程C语言知识掌握不扎实

我校数据结构教学采用的是C语言版本的教材,这就要求学生有一定的C语言基础。但一年级第一学期就开始学习C,让很多还没来及适应大学学习生活的学生措手不及。特别是函数、指针、结构体等相对难度较大的知识点,理解不够透彻,运用有困难,而这三部分恰恰是数据结构中应用最广泛的知识点。C知识的不牢靠,导致上机实验时,类C的算法无法转换成程序调试运行,不能及时巩固所学理论知识,无法通过数据结构课程的学习来提高自己的算法设计和程序编写的能力,影响了学生的学习主动性。

1.3 解决实际问题能力不足

通过课堂的学习,大部分同学都可以理解和掌握算法的思想和描述,但在实验课上,一旦要求学生自己动手设计算法,编写程序,他们就会感到力不从心,这一实际问题到底应该使用哪一种逻辑结构组织、采用哪一种存储结构实现,都是学生可能碰到的难题。随着教学知识的深入,算法转换成程序更加困难,学生便会逐步失去学习本课程的兴趣。

2 改进方法

2.1 实现与C语言的无缝链接

在开始讲授数据结构课程之前,先通过讲解一些简单的具体实例,以达到既能让学生复习C语言的相关知识,又能引出数据结构的一些基本概念的目的。例如:对一张学生成绩表的操作。现在需要处理的数据是批量的,连续的即数据结构中的逻辑结构。可以用数组实现吗?当然可以,但显然,每一位学生的信息(学号、姓名、各科成绩)是不同的数据类型组成,使用普通数组存储数据会导致频繁读取内存。这时,我们自然想到先使用用户自定义类型结构体来保存每一位学生的信息,再用数组保存整张表即数据结构中的存储结构。教学中,可以利用常见的Excel表格帮助学生理解。首先新建一张空表,再输入数据。某一位同学的信息(表格中一行)便是数据结构中的数据元素,表格中的某一个具体的单元格便是数据结构中的数据项。访问、插入或删除一位同学的信息等操作可以写成函数等待调用。而函数体中可以使用指针来访问数据。

并且,教师在给学生梳理相关知识的同时,可以对例题进行现场编写程序,让学生在一开始直观了解解决实际问题的全过程,分析问题、算法设计、算法实现等。特别是,算法如何转换成程序,其中预处理、结构体定义、函数调用、参数传递、指针等知识点的运用。让学生从一开始认识类C算法和程序之间的区别和联系,同时要求学生巩固自己的C语言知识,大部分学生只有看到算法变成程序可以运行出结果才能产生持续的学习主动性,这样才能加大他们学习数据结构的兴趣。

2.2 明确学习目标,加强学生对基本概念的理解

数据结构是研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科[2]。本课程整体围绕抽象数据类型,把数据的逻辑结构、存储结构和相适应的各种运算有机联系在一起[3],并针对实际问题设计出相应的算法并分析算法的效率。

非数值计算问题中的操作对象通常在高级语言中找不到现有的数据类型与之匹配,如上例中的学生成绩表等。这时,要求我们运用用户自定义类型来完成操作对象的描述,它包括数据对象集合,数据关系集合以及数据在关系上所允许的操作集合。这便是抽象数据类型,它实现了封装、代码重用等,类似C++中类的概念。

逻辑结构是只抽象反映数据元素的逻辑关系。存储结构是数据的逻辑结构在计算机中存储映象,即在计算机存储器中的实现,它包括数据元素的表示和关系的表示。在讲解这两个概念时,要抓住“在算法设计时只取决于数据的逻辑结构,在算法实现的时候只依赖数据的存储结构”这句话,可以用具体实例来加深学生的理解。例如:对一个序列进行排序操作。采用哪种排序方法不依赖于存储结构,可以选择学生最为熟悉的起泡排序算法,再分别用顺序和链式结构加以实现。

2.3 多维实践教学

培养学生创新精神、提高学生实践能力,加强实验课教学的同时,突出课程设计对教学的延伸和补充。

实验课一直是数据结构教学中的软肋,通过理论课上C语言知识的梳理复习,类C算法向程序的转换演示,基本概念的加强理解,相信会在一定程度上提高学生自己动手编程的积极性,但实验课辅导要和理论课相辅相成,才能达到更好的教学效果。

首先,在实验课内容安排上,尽量选择和学生日常生活联系较大的题目,让学生产生共鸣。例如:队列一节的实验题目,设置成“模拟病人到医院排队看病”[4]。由于医院看病是先到先看,所以可以使用队列来实现排队过程。模拟病人的排队看病主要完成以下几个操作:(1)病人把病历本交到护士手中,相当于进队;(2)排在最前面的病人先看,同时取走病历,这一步相当于出队;(3)查看排队,从队头到队尾依次显示队列中所有的病历号;(4)停止排队,医生看病结束,退出程序。

其次,加强实验课辅导,克服学生人数过多问题。对学生进行分组,编程能力强的和基础偏弱的同学搭配组合。课上,随机从每组抽取学生解释程序部分代码,激励学生主动学习。同时,要求学生养成良好的编程习惯,鼓励学生程序出现错误是正常现象,没有什么可怕,但要学会利用编译器工具自己调试程序,总结常见错误,降低出错频率。课下,通过网络及时回答解决学生遇到的问题。

最后,通过案例驱动式教学,丰富课程设计教学内容。学生在学习数据结构之前只学过C语言,对软件开发的过程并不熟悉,独立完成课程设计有一定的难度。教师可先完整的给学生讲解一个案例,让学生了解如何用软件工程的思想来开发设计软件。例如:图书馆管理系统。(1)图书入库:新购一种书,确定书号后,登记到图书目录表中,如果表中已有,则只将库存量增加;图书数据包括图书书号,书名,作者,数量,单价等;(2)排序:以书号按升序进行排序(可以任选一种排序方法);(3)查找:能按书名、书号进行查找(分别用顺序查找和折半查找方法);(4)删除:从表中删除指定的图书;(5)借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;(6)归还:注销对借阅者的登记,改变该书的现存量。

通过实验课和课程设计的多维实践,培养学生综合运用所学数据结构相关知识,切实促进学生实践能力的提高。

3 结束语

通过对传统教学中存在的几个问题的改进,提高了学生的学习主动性,教学效果得到了一定的改善,让学生可以更好的学习后续课程。今后,我们将进一步探索与实践数据结构课程教学改革,突出数据结构在计算机专业的核心课程的地位,以期为培养出合格的计算机专业人才打下夯实基础。

[1] 王丽丽.探讨《数据结构》教学中的几个关键问题[J].科技信息,2012,(7):6-7.

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

[3] 张铭,耿国华,陈卫卫,等.数据结构与算法课程教学实施方案[J].中国大学教学,2011,(3):56-60.

[4] 江家宝,程勇.数据结构[M].北京:科学出版社,2011:98.

猜你喜欢
数据结构C语言实验课
数据结构线上线下混合教学模式探讨
密林深处——“从写生到创作”的水墨实验课
基于Visual Studio Code的C语言程序设计实践教学探索
51单片机C语言入门方法
有趣的实验
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
高职高专数据结构教学改革探讨
CDIO模式在民办院校数据结构课程实践教学中的应用