《数据结构》程序教学模式探索_数据结构与算法 python
摘要:对《数据结构》的教学现状进行了分析,提出在理解的基础上侧重于程序编写的教学模式。在课程导入、使用“引用”的对比、数据结构体系结构、实验题目设置、提供学习辅助系统、课程设计及验收方面作了一定探索。教学效果表明这些措施可以效的提高学生程序设计和编写能力。
关键词:数据结构;程序;教学模式;探索
中图分类号:G642文献标识码:A文章编号:1009-3044(2007)18-31759-02
The Research of Program Teaching Patterm on Data Strucure
MO Jia-qing
(Dept. of Computer Science, Zhaoqing University, Zhaoqing 526061, China)
Abstract:The current teaching status of Data Structure is analysed and the teaching pattern which emphasizes on ability of programming based on comprehension is presented. Some research has been carried on ,such as curriculum introduction, systematic structure of Data Structure, setting of experiment subject,providing aid-studying system, curriculum design and approval. The teaching effect shows these methodes can improve the the student abilities on computer program designing effectively.
Key words:data structure; program; teaching patterm; research
1 引言
《数据结构》是信息技术专业的核心课程,它的内容主要是介绍如何根据具体情况合理地选择逻辑结构(表、树、图等)去组织数据,并设计一定的物理存储结构(顺序、链式等)有效地存储这些数据,同时设计正确的算法并对算法作出分析和评价。它在培养计算机专业学生严谨的逻辑思维能力和培养良好的编程开发能力方面有着不可替代的作用,因此成为高校计算机专业研究生招生入学考试和软件设计师认证考试的首选课程。
《数据结构》内容广泛,涉及到的知识点众多,而且逻辑性和抽象性和动态性都很强,理论和实践紧密结合,因此对学生而言学习难度大,对教师而言授课难度高。教学过程出现众多问题,具体表现如下:
(1)学生由于没有编制过大程序和项目开发的经验,虽然知道《数据结构》的重要性,但是对于学习目的不明确。
(2)学生未能将所学内容融会贯通,没能将各大知识点的区别与联系弄清楚。
(3)学生由于C语言基础不扎实,对结构、指针、参数传递等概念掌握不好,在做作业或实验时如果题目要求与教材内容相差较大,无法入手,导致信心受到打击、畏难情绪增加。此后,为应付作业,出现抄袭别人作业,或直接上网搜索现成程序的情况。
(4)虽然教师自己对教材内容很熟悉,能够将各知识点讲得很透彻,但是没考虑到学生的实际学习状况和接收能力,出现学生越学越难,理论与实践越脱节,越学越不想学的情况。
(5)目前高校扩招,入学的学生素质有所下降,逻辑思维能力和自学能力不强,也是造成教学效果不理想的原因之一。
《数据结构》的教学目标之一是提高学生的软件编制能力,而上述问题的出现使得这个目标大打折扣,因此迫切需要运用新的有针对性的教学模式。
2 《数据结构》程序教学模式
2.1 加强技能,克服程序语言造成的困难
《数据结构》中大量运用了指针、地址、结构体、函数参数传递等知识,而这些知识又是C语言中的重点和难点。如果学生对这些内容掌握不好的话,学习《数据结构》将受到很大制约。因此在开学时,教师先帮助学生重点复习C语言中与数据结构相关的知识点,实现从C语言到数据结构的平滑衔接。复习的题目形式可以是选择、填空、编程题等。
目前高校普遍采用清华大学严蔚敏编著《数据结构》(C语言版)作为教材,该教材侧重于用类C语言描述各种数据结构和算法,从头到尾并没有一个完整的C语言程序,并且该教材为使学生能方便地调用教材中的算法函数,教材中的算法函数均采用了C++的“引用”作为参数,这种“引用”参数貌似C语言中的地址,而教材并没有着重强调。作者的初衷是好的,但此举对于接触过C++的初学者造成极大困惑。学习几周后,学生发现程序调试困难,实验过程障碍重重,导致信心受到打击、畏难情绪不断增加。因而有必要让学生熟悉C++中的“引用”。
以教材上的构造空链表算法函数为例,函数参数使用“引用”调用和不使用“引用”的比较,帮助学生掌握“引用”并明白使用“引用”的好处。
typedef struct
{ElemType *elem;
int length;
int listsize;
} SqList;
使用“引用”传递参数定义函数:
Status InitList_SqA(SqList &L) {//构造空链表
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L.elem) return ERROR; // 存储分配失败
L.length = 0; // 空表长度为0
L.listsize = LIST_INIT_SIZE; // 初始存储容量
return OK;
}
调用方式如下:
SqList LA;
InitList_SqA(LA);
使用指针传递参数定义函数:
Status InitList_SqB(SqList *L) { //构造空链表
L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L->elem) return ERROR;// 存储分配失败
L->length = 0;// 空表长度为0
L->listsize = LIST_INIT_SIZE; // 初始存储容量
return OK;
}
调用方式如下:
SqList LB;
InitList_SqB(&LB),
可以看到,运用“引用”作为参数,教材上的函数基本上可以原封不动地使用,而使用指针传递参数,则需要对教材上的函数作大量修改。
另外教材为使算法描述更为简洁,算法函数内部一律省略了变量定义,这对学生的学习也造成了很大困难。因此还需要作一些针对性的训练,如通过填空题等形式补充完整函数,并适当评讲。
2.2 理解课程体系结构,融会贯通
《数据结构》课程的内容由简单到复杂,循序渐进。从一般的线性表开始,到后面的非线性的树和更复杂的图,都是讨论各种数据结构的逻辑结构和保存这种逻辑结构所采用的物理结构,以及在这种存储结构上的相关运算。理解这个体系结构,有助于学生从整体上更深入地掌握数据结构。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 2.3 完善框架程序,培养自信
自信心是激发学生创新能力的积极情感和重要前提。为培养学生克服困难的自信心,笔者针对各种数据结构类型设计了不同的框架程序,让学生在实验过程中逐步完善,添加新功能,最终形式一个大的系统。例如针对线性表,笔者设计了线性表功能框架文本界面,其中的菜单功能分别为链表创建、链表插入、链表删除、链表合并,其中链表合并又为一个链表合并至另一链表尾部、合并过程相同元素保留和不保留三个功能,让学生逐步将单独的小功能添加至该界面中。又例如,在学习二叉树这一章内容时,笔者设计了二叉树功能框架菜单,菜单包括二叉树创建、先序遍历、中序遍历、后序遍历、左右子树交换、计算树高度和叶子数量等,让学生逐步完善。通过这种不断添加小功能,最终形成一个大的系统的实验方法,使学生具有一定的成就感,自信心不断增强。
2.4 提供学习辅助系统,减轻实验负担
《数据结构》的不少实验是验证性实验,为完成实验,学生需要大量调用教材上的算法函数或对这些函数作一定的修改。为了让学生提高实验效率,将主要精力集中于程序调试而不是文字录入,笔者设计了《数据结构》学习辅助系统。该系统把各章的算法函数分门别类,供学生做实验时复制至其程序中,以减轻实验负担。另外该系统还给出了一些调用这些算法函数的完整程序,供学生参考。
2.5 分组课程设计,培养团队合作精神
课程设计是体现《数据结构》理论和实践紧密结合的重要环节。通过课程设计,不但锻练学生描述概念、构建数据结构、设计算法的能力,而且锻练学生运用自己所学知识通过高级程序语言解决实际问题的能力。
课程设计的题目一般选择综合设计类型,如风景区景点路径查询、简单114查号台等。要求学生首先进行需要分析,明确目标如何,需要实现那些功能;其次是进行概要设计和数据结构设计,定义各功能模块和其内部流程、抽象数据结构,最后编码调试并写成小论文。
由于单个学生完成任务存在较大困难,课程设计还需要分组。分组时要考虑学生的实际情况,要考虑各个小组实力均衡,具体做法是把学习成绩较好的学生和成绩靠后的学生安排在同一组。课程设计完成后,还安排答辩。答辩的形式是随机抽查小组内的一个成员,由该成员代表小组进行答辩,该成员的成绩就是该小组的成绩。要求学生回答系统设计思想、总体架构、开发过程碰到什么困难、整个系统有何优缺点等。通过这种形式,可防止出现课程设计只是由小组内水平高的学生单独完成,而其他成员基本不参与的情况。这种答辩形式可以极大地调动了学生的积极性。为了不让自己拖小组的后腿,学生们相互学习,热烈讨论,表现出极大的参与热情。最后的结果是小组所有成员水平有了很大提高,培养了团队合作精神。
3 结束语
运用高级语言进行程序设计是一个创造性的过程。《数据结构》课程的教学目标之一就是要提高计算机专业学生的程序设计语言能力。笔者在《数据结构》教学过程中的上述措施,目的就是要解决学生在学习过程中由语言所造成的困难,最终提高其程序设计能力。教学实践也证明,上述措施提高了学生C语言技能,降低由程序语言造成的难度;而且针对性的训练可让学生很快地掌握调用教材上的算法函数,理解了教材的知识体系结构。程序功能整合使学生有成就感和增强自信,需要答辩的课程设计使锻练了学生运用所学理论解决实际问题的能力,也培养了团队合作精神。这种侧重程序的教学模式取得良好的教学效果。
参考文献:
[1]严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2006.
[2]严蔚敏,吴伟民. 数据结构题集(C语言版)[M]. 北京:清华大学出版社,2004.
[3]黄扬铭. 数据结构[M]. 北京:科学出版社,2005.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文
