郑福妍 郑宝民 张 宁
(黑河学院 a.计算机与信息工程学院;b.现代教育技术中心,黑龙江 黑河 164300)
“数据结构”课程是计算机相关专业中具有较强理论性和操作性的一门专业基础课,我国一些高校涉及编程课程的专业计划中——如电子技术专业,也增加了“数据结构”课程,将其作为程序设计开发的入门课程。“数据结构”课程知识点非常繁杂,主要研究的是将实际遇到的问题进行分析,抽象为各种数据模型的过程,并根据实际操作的不同特点选择相应的存储结构进行存储,同一问题可以建立不同的抽象即逻辑结构,即使抽象类型相同,当选择不同的存储结构时,在最终实现的程序思想方面也会有较大的不同,通过数据结构课程的学习,可以培养学生的发散思维能力、逻辑思维能力及编程能力,数据结构课程可以让人们在没有编写程序代码之前,就知道该程序代码的优劣,可以对程序中存在的问题在时间和空间角度进行分析及改进,设计出效率最优的程序代码。都说程序等于七分数据结构加上三分算法,可见,“数据结构”课程对编程相关专业的学习是非常重要的。该课程以提高学生的编程能力为主要培养目标,以程序设计为基础,对学生进行较复杂程序设计的训练。
“数据结构”课程理论知识点较多,涉及的内容有集合、数组、字符串、线性表、广义表、栈、队列、二叉树、图等,操作也非常繁琐,如何在教学中让学生掌握其繁杂的内容,采用传统的教师讲、学生听的方法是远远不够的,各高校教师为提高学生课堂学习效果,提出了很多种创新的教学方法,笔者在实际教学中采用了学生参与式教学方法,该种方法将课堂主体由教师转换成学生,学生由一个被动接受者的角色转换为一个自主、探究学习者的角色。这两种角色的转换实质是学生自主完成学习内容进行创新思维的过程。参与型教学就是以学生的探索尝试为核心来设计各教学环节,引导学生在参与过程中通过自身体验不断思考,以此提出新观点、掌握其知识脉络,使学生成为探索、创新、学习的主体[1]。参与式教学过程中的关键环节是如何调动学生的参与度。
在教学过程中,抓住本门课程的两个核心概念逻辑结构和物理结构来展开,整门课程的讲解以算法实现为轴进行串联,笔者的理论课讲解过程如下。
讲解数据结构的基本概念,介绍本门课程学习的主要内容,需要达到的教学目标,本门课程在本专业中的地位,以及工作中的用途等,让学生学习课程之前就了解本门课程的作用,能够把握学习的主线来展开学习。
简单介绍所使用教材的每章内容及每章之间的关联,从编者角度出发,向学生说明教材的组织结构,让学生在学习之前就知道本门课应该掌握的核心内容是什么,在学习过程中有侧重地学习。
数据结构的逻辑结构大致包括集合、线性结构和非线性结构,从线性结构入手进行讲解,将线性表的相关概念、存储结构的定义、所能进行的操作及算法思想进行详细讲解,对于算法实现,让学生自己试着去写,教师侧重于指导。
对于栈和队列这两种线性结构,重点讲解其与线性表的区别,其他的学习内容全都由学生自己独立完成,教师需要做好引导环节的工作,可以设计不同层次的问题,引导学生一步一步地学习,当学生提出问题时,不是第一时间给予解答,而是让同学之间先进行探讨,学生各抒己见后教师再进行总结,这样能够让学生深入地思考,从而激发学习兴趣。
线性结构讲解完后,简单介绍一下集合类型,本章知识点不用投入太多的时间与精力,在集合部分的代码实现中,查找操作是核心思想,让同学们注意该算法,在后面章节中还会对该算法进行重点讲解。
接下来是非线性结构的学习——树和二叉树,重点是二叉树的概念及应用,二叉树的性质让学生自己进行总结,这些性质涉及的知识点主要是高中阶段所学习的等比序列和排列组合的内容,通过这部分内容可以看出,计算机和数学是不分家的,要想学好计算机,首先要有扎实的数学基础,否则在一些计算机理论知识的理解上会存在问题,将无法顺利地进行后续内容的学习,这也是教师为什么总说,通过计算机的学习能够有效提高数学能力、逻辑思维能力及计算能力的主要原因。二叉树在现实生活中的应用非常多,如人机对弈中每一步棋子如何进行布局,最终胜出;如何利用二叉树对一组数列进行排序;在现代通信技术中如何进行字符编码等,在对这部分知识进行讲解时,多列举一些学生了解并感兴趣的例子,以此激发学生学习的兴趣。
图的存储及算法实现是难点,这部分内容的学习采用的方法是:反复阅读和理解相应算法的计算机语言描述,要注意图和树型结构、线性结构之间的相同点及区别。
每个知识点之间都是有关联的,讲解完一种逻辑结构后,一定要对其进行总结,并与前面学习过的其他类型的逻辑结构进行对比,找到异同及各自应用的场合。
“数据结构”课程学习结束后,能够为人们解决一个问题提供多种不同的解题思路。因此,通过数据结构课程的学习,能够有效锻炼并提高学生的发散思维能力,在解决实际问题时,会使设计者在面对问题时考虑得更加全面,不会造成思维的局限性。通过本门课程的学习,学生掌握了各种数据模型在各种存储结构下算法实现的对比分析,能够做到在程序代码编写之前就明确哪种解决方案是最优的,接下来可以节省大量试错的时间,将全部精力投入到程序代码的编写中,以此设计开发出效率最优的程序代码。
理论知识的理解非常重要,但只有理论知识,不结合实践,也只是纸上谈兵,在具体代码实现时还是无从下手,所以,在教学中还要注重实际环节的练习,因为每名同学编程能力有所不同,每堂课应该布置不同难度的任务,让学生一步一步地进行代码的实现,即使是编程能力较强的同学也建议他们从最简单的任务开始,笔者在实践教学中是如下设置的:每堂课设置一组实验项目,每个任务的难度不同,但都围绕同一问题展开,当一个任务完成后,在此基础上进行些许改动,就完成了下一个任务,依次完成最终的任务,该种方法将一个大的、复杂问题分解为若干个递进问题,一步一步地引导学生完成,该种方法的运用使学生不再感到每堂课的任务量大,无法下手,下面列举两个例子进行说明。
示例一:在线性表的代码实现过程中,采用模块化的设计思想,将每个操作定义为一个函数,然后通过主函数调用各个函数,根据该任务可以设置以下任务:
任务一:将所有的库函数调用、主函数及线性表所有操作函数定义在一个文件中(教材有原代码)。
任务二:将所有的库函数调用、主函数定义在一个文件中,将线性表所有操作函数定义在一个.C文件中。
任务三:将所有的库函数调用、主函数定义在一个文件中,将线性表所有操作函数定义在一个.H文件中。
任务四:对任务三中的主函数进行重新编写,来解决现实生活中的某一具体问题。如银行在办理业务时,用户需要按照先后顺序进行编号,以此确定操作顺序,但VIP用户具有优先权,不需要排队,通过线性表结构来模拟实现这一操作过程,存储结构不限。
示例二:利用栈实现将十进制整数转换为二至九之间的任意进制数的实现,根据此问题可以设置以下一组任务。
任务一:在主函数中定义好要转换的十进制数及要转换后的进制(教材有原代码)。
任务二:在主函数中通过scanf( )函数和printf( )函数输入要转换的十进制数及要转换后的进制数。
任务三:实现将十进制整数转换为二至十六之间的任意进制数。
任务四:计算机不断发展,当计算机中数据不再局限于十六进制,而是产生了三十二进制时,思考三十二进制将如何进行编码,并使用栈来实现,将用户输入的任意十进制转换为二至三十二进制之间的任意进制。
任务五:在任务四的实现中,将栈中所存储的数据类型定义为int型和char型,分别如何实现?
在实践环节即使编程语言功底差的同学,也可以完成任务一,因为这些源代码在大部分教材中都有,虽然其编程能力差,但通过文件的创建、代码的输入、编译、运行在这一过程中也能收获很多,当编译遇到问题时,任课教师可以对其进行指导讲解,以提高其编程能力,学生们就能从只能完成任务一,然后完成任务二,逐渐完成任务三、任务四等所有的任务要求,如果课堂时间有限,同学们可以课下完成,将实践过程中遇到的问题记录下来,在课下询问同学或找老师帮助解决。
在每堂实验课结束前,任课教师都要根据学生实践情况进行总结,并提出下一步要求,为在课堂上完成所有任务的学生布置课下思考、练习、实践内容。在课下练习时,鼓励学生不局限于书本的定义形式,让学生发散思维,自己进行定义并代码实现,当学生定义形式或者实现思想与教材不同时,可以让同学们分析该算法与教材上算法的区别及优劣。
在分层次任务教学中,第一层次的任务是最简单的,一般情况下程序代码已经在教材上给出,或者由任课教师给出,即使基础差只要按照任课教师的要求进行练习还是有收获的。每个问题所设置的任务数不等,每层任务之间差距较小,只要在前一任务基础上进行小小的改动,便可以完成下一级任务,不会让学生感觉太吃力,教师通过一个任务接着一个任务的引导,让学生最终完成所有任务。如果在实践中,直接让学生完成最后一个任务,学生可能会有无从下手的感觉,这样会严重打击学生学习的积极性,特别是编程能力较差的同学,直接放弃,不再尝试程序代码的编写与实现。教学过程本来就是师生之间的一项双边活动,在教学过程中,要求教师以观察、询问、交谈等多种方式来了解学生对知识、能力、情感等方面的信息,通过学生反馈的这些信息,任课教师能够了解学生对知识等方面的掌握情况,任课教师能及时调节教学方法和教学手段,达到预期的教学目标。学生通过该过程应多听、多说、多思考、多提问、多总结,通过这一过程能够锻炼和提高学生的逻辑思维能力、总结能力、语言表达能力、文献检索能力等方面的能力,真正达到教书育人的目的[2]。
综上所述,计算机编程能力对于信息化社会的人们来说非常重要,处理信息能力的强弱决定了在社会中生存能力的高低,在信息处理过程中,计算机编程思维成为人们必须掌握的一项基本技能,本文针对计算机专业的“数据结构”课程,讲解了如何在教学中培养学生的编程能力及计算思维能力,其他任课教师可以将该种方法引入到所授课程中,只有学生学习的参与度提高了,才能主动去学习,去接受知识,在学习过程中做到学习目标明确,达到事半功倍的学习效果。
在“数据结构”课程教学中讲解了大量使用计算机编程来解决现实生活中的实际问题的案列,通过本门课程的学习,对学生以后的工作也有很大帮助;“数据结构”课程中思维能力的锻炼,让学生在自主创业时,思维更加严谨,考虑问题更加全面,使创业的成功率更高。