张蕾 花奇芹 荣静
摘 要: 分析归纳了数据结构课程实际教学中存在的问题,并根据这些问题对传统的教学方法进行了一定的改进,提出了课前复习、注重引导教学、图文并茂地讲解算法、强化实践教学等教学方法。实践证明,改进的教学方法调动了学生积极性,提高了学生的学习效率和实践动手能力。
关键词: 数据结构课程; 引导教学; 实验教学; 教学改革
中图分类号:G642 文献标志码:A 文章编号:1006-8228(2019)02-72-04
Exploration on teaching method of data structure course
Zhang Lei, Hua Qiqin, Rong Jing
(Guangling College, Yangzhou University, Yangzhou, Jiangsu 225000, China)
Abstract: The problems existing in the actual teaching of data structure course are analyzed and summarized. According to these problems, the traditional teaching method is improved in this paper, with the teaching methods such as reviewing before class, paying attention to guiding teaching, explaining algorithm with graphics, and strengthening practical teaching etc. The practice proves that the improved teaching method mobilizes students' enthusiasm, and improves students' learning efficiency and practical ability.
Key words: data structure course; guiding teaching; experimental teaching; reform in education
0 引言
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科[1]。数据结构是指相互之间存在一定关系的数据元素的集合。数据结构课程主要探讨了各种经典数据结构的逻辑特性、物理存储特性以及数据的各种运算操作。经典的数据结构包括线性结构、树型结构及图型结构。数据结构课程是计算机专业一门综合性的专业基础课和专业核心课,是计算机专业学生考研的必备课程,为学生今后的科学研究、软件开发、技术管理等工作奠定了坚实的理论基础。该课程内容范围广、知识点多、概念抽象难懂,大部分学生反映学习起来比较吃力,能够理解书本上的算法,但上机操作时没有头绪无法用C语言将相应的算法实现。
本文归纳了在实际课程教学中常遇到的问题,并针对这些问题,从理论教学和实践教学两方面进行了改进,以提高学生的理论、实践动手能力。
1 课程教学中存在的问题
目前,高校的数据结构课程的教学仍以课堂理论授课为主、实践教学为辅。学生在学习的过程中缺乏主动性和积极性,学习兴趣不高,导致教学效果不理想,主要有以下几个方面的问题。
1.1 课程内容繁多且难懂
数据结构课程的内容范围广、知识点多。数据结构课程探讨了线性结构、树型结构和图型结构的逻辑结构、存储结构和基本操作运算的实现以及各种查找算法和排序算法的实现[2]。该课程理论性强、内容抽象难懂,要求学生有一定的数学逻辑思维和计算分析能力。课程内容繁多并且难懂,学生很容易产生畏难情绪,自暴自弃。
1.2 学生的基础薄弱
计算机程序类课程是数据结构课程的先导课程。想学好数据结构课程,必须牢固地掌握C语言的知识并能够灵活地运用。C语言程序设计课程是在大一第一学期开设的课程,数据结构课程是在大二第二学期开设的课程。很多学生在学习数据结构课程时,已经不太记得C语言的基本知识了。数据结构课程中会大量地运用到指针、结构体和函数。然而这部分知识是在C语言课程的最后几个章节,很多学生只为了应付考试去记忆C语言的基础语法了,而没有深刻地理解并掌握指针、结构体和函数这部分知识。大部分学生的编程基础比较薄弱,无法将书本上类C语言描述的算法转化为C语言程序。
1.3 学生实践动手能力差
目前,大部分高校“数据结构”课程的实践环节课时较少。以扬州大学计算机科学与技术专业教学大纲为例,数据結构课程的总课时为64课时,理论学时为48课时,上机实践课时为16课时。高校的数据结构课程更偏重于理论教学,重理论轻实践,实践的考评主要依赖实验报告。很多学生在学完数据结构课程后,仍然不能用程序设计语言编写基本的查找、排序算法,更何况是运用数据结构的知识解决生活中的实际问题。
2 教学方法的改进
2.1 对C语言的知识进行复习
C语言程序设计课程是数据结构课程的基础,C语言程序设计课程学习的好坏将直接影响数据结构课程学习的效果。在数据结构课程开课的第一周的课上,任课教师会对C语言课程中指针、结构体、函数部分的知识进行适当的复习,对这部分内容进行梳理和强化,为数据结构课程的讲解奠定基础。
2.2 注重引导教学
数据结构课程内容繁杂、晦涩难懂。任课教师需要在教学过程中注重引导教学,采用灵活多样的教学方式激发学生对课程的兴趣[3]。
任课教师在教学过程可以多引入一些有趣的例子、故事或者电影的情节来讲解知识点。将晦涩难懂的知识点融入到鲜活有趣的情境中,增强学生的学习兴趣。比如:讲解链表逻辑结构时,可以引入警匪片中每个卧底都有一个单线联系的上司;讲解栈的特性时,可以引入物流装车,先装入车的物品后出,后装入车的物品先出,形象生动地表现出了栈的先进后出的特性;讲解队列先进先出的特性时,可以引入学生在食堂排队就餐的实例和去银行排队叫号的实例;讲解树的知识时,可以引入家族的家谱的案例,每个家族都有一个祖先,祖先有多个孩子,孩子又继续生养孩子,不断递归,直至最年轻的一代成员,形象生动地表现出树的一对多的特性;讲解图的时候,可以引入高速公路网和铁路网。通过实际生活中案例的讲解,将抽象的概念转变为一个直观形象的问题,活跃了课堂气氛,调动了学生的学习积极性,增强了学生的学习兴趣。
同时,任课教师需要注重启发式教学,通过问题的抛出引导学生自主学习,将学生从知识的被动接收者转变为主动学习者。当代著名學者波尔普说过“正是问题激发我们去学习,去发展知识,去实践,去观察”。一位好的教师不仅仅是传道解惑者,更应该是学生的引导者,引领学生自主地发现问题、提出问题、分析问题和解决问题。例如:在讲解完顺序表和单链表的特性之后,引导学生自己分析在什么样的情况下选择顺序表合适、在什么样的情况下选择单链表为宜;在介绍单链表需要设置头结点时,先让学生自己思考在单链表中途插入结点指针的变化以及在第一个结点前插入结点指针的变化有什么不同,从而引出在单链表中设置头结点,来将插入的指针操作统一起来。通过启发式教学,激发了学生主动去思考问题,加深了学生对知识的理解,提高了课堂教学效果。
2.3 图文并茂地讲解算法
数据结构课程中包含很多的算法,并且算法内容抽象难懂。任课教师在讲解算法时需要采用多种教学手段,将板书、ppt与微课相结合。在教学过程中,多引入图像、动画,生动形象地演绎算法运行的动态过程,增强算法的理解性[4]。例如,在学习链表时,指针的操作比较多,学生对这部分知识混淆不清。如果采用图文并茂的讲解方式,立刻就会产生不一样的效果。
图1展示了在单链表中指针p所指向的结点后插入一个新结点的过程,图2展示了在单链表中删除指针p所指向的结点。通过图像、公式、算法伪代码的讲解,学生就很容易理解单链表的插入和删除的过程。
在指针p所指向的结点后插入一个新结点,指针变化为:
s->next=p->next;
p->next=s;
单链表的插入代码为:
Status ListInsert_L(LNode *L, int i, ElemType e) {
//在以L为头结点的单链表的第i个位置插入值为e的结点
LNode *p=L; j=0;
while(p&&j<i-1)
{ p=p->next; ++j; } //寻找第i-1个结点
if(!p||j>i-1)
return ERROR; //j大于表长或者小于1
s=(LNode*)malloc(sizeof(LNode)); //生成新结点
s->data=e; s->next=p->next; //插入L中
p->next=s;
return OK;
}
在指针p所指向的结点后删除一个结点,指针变化为:
p->next=q->next;
free(q);
单链表的删除代码为:
Status ListDelete_L(LNode *L, int i, ElemType &e) {
//删除以L为头指针(带头结点)单链表中第i个结点
LNode *p=L, *q; int j=0;
while(p->next&&j<i-1) { p=p->next; ++j; }
q=p->next; p->next=q->next; //删除并释放结点
e=q->data; free(q);
return OK;
}
2.4 强化实践教学
数据结构课程是一门理论与实践综合的课程,实践教学的重要程度不亚于理论传授[5]。为了帮助学生更好地理解数据结构的知识、锻炼学生的实践动手能力,在实践环节,分别在实践内容和实践考评方法两方面进行探讨和改进。
⑴ 实践内容的设置
数据结构课程的实验分为两个部分:基础性实验和拓展性实验,实验内容的布置由浅入深[6]。
基础性实验的内容为常用数据结构的基本操作、各种查找和排序算法。基础性要求学生将书本上类C语言描述的算法转化为C语言程序。基础性实验是实验环节的关键。通过基础性实验,学生能够更深刻地理解数据结构课程的基础知识,能够发现自己在知识和技能上的漏洞,及时进行查漏补缺。基础性实验的内容安排如表1所示。基础性实验的成功,增强了学生的自信心,调动了学生的积极性。
拓展性实验是让学生运用数据结构知识完成实际生活中问题的一些题目,比如电子通信簿的实现,约瑟夫环问题,表达式求值问题,行编辑程序等。拓展性实验是在基础性实验后开设的,拓展性实验需要学生利用大量的课外时间去完成。学生可以自行组织团队一起完成拓展性实验,团队成员数一般为3-5人。通过拓展性实验的完成,不仅加强了学生的实践动手能力,更加强了学生的表达能力和团队合作能力。
⑵ 实践考评方法的改进
首先,在课程考核的过程中,课程实验的成绩将占据到总成绩20%的比例。其中,实验成绩=70%基础实验成绩+30%的拓展性实验成绩。比例的调整会让学生更加重视数据结构课程的实验环节,从而强化实践教学。
实践的考评环节包括程序验收、程序改进和实验报告三个环节。程序验收环节中,任课教师让学生演示自己的程序,根据学生的程序提出一些问题让学生口头回答,并对学生的程序提出一定的建议,让学生去做相应的改进。任课教师根据学生改进的程序以及程序验收环节的表现给出一定的分数。实验的成绩主要由程序验收环节的表现和实验报告共同决定,实验报告的成绩只占实验成绩的30%。实践考评环节的改进,便于教师发现抄袭他人代码蒙混过关的学生,对积极投入实验的学生更加公平,调动了学生的学习积极性。
3 结束语
实践证明,数据结构课程的教学改革,激发了学生的学习兴趣,调动了学生的学习积极性。学生的到课率、理论试卷成绩以及实际动手能力都得到了提高。在以后的教学工作中,仍需研究如何根据学生的个性及差异来教学,真正达到因材施教,从而提高教学效果。
参考文献(References):
[1] 严蔚敏,吴伟明.数据结构(C语言版)[M].清华大学出版社,1997.
[2] 徐薇,王志海.数据结构课程研究性教学理论及方法探索[J].计算机教育,2012.1:35-38
[3] 张惠珍,马淑娇.“数据结构”课程的教学方法改进探讨[J].上海理工大学学报(社会科学版),2018.2:174-178
[4] 霍玲玲,王智,孙江.数据结构教学方法的研究[J].计算机教育,2015.2:73-76
[5] 周海岩,陈宏明,殷路.“数据结构”课程教学的思考[J].教育理论与实践,2010.30(6):62
[6] 余艳,刘燕丽,李琳娜.数据结构实践教学内容设置的分析与思考[J].实验技术与管理,2014.4:171-173