数据结构课程改革(精选9篇)
1.数据结构课程改革 篇一
转眼间半学期已经过去了,接触数据结构这门课已经八周了。在这一段时间的学习中,我对这门课从刚开始的一窍不通到现在已经可以运用所学的知识解决一定的问题,大致知道了数据结构的思想和作用。
首先对于数据结构,我的认识一直在发生改变,一开始的时候连逻辑结构和物理结构都分不清,到最后能将总表上的内容熟记于心,并加以运用,这样的进步离不开老师的细心教导和同学们的热心帮助。在我的认识中,计算机技术早已经成为新世纪的必修技能。很庆幸我选的专业可以在计算机上有所进阶,为自己在日后的竞争中多添一份筹码。“数据结构”是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且已经成为其他理工专业的热门选修课。
在这门课程里,我首先认识了什么是数据、什么是数据结构以及抽象数据类型这些基本的概念,然后开始学习数据结构的抽象数据的部分。线性表是学习的第一站,我逐渐发现,每开启一个新的逻辑结构,就会相应的讲它的存储结构以及相应的运算。在学习线性表的过程中,我弄明白了很多东西,发现了数据结构已经比c语言高出一个高度了更加宏观地去用c语言,c语言就像是处理数据结构的其中一种工具一样。学习完线性表之后,就像有了一个模板,之后的栈和队列是进出的方式有所修改各有特色了。学到树的时候,眼前一亮,觉得这样的类比方式很有意思,有点像高中生物遗传学上的系谱图。二叉树的遍历让我觉得就像小时候玩智力游戏一样,还有二叉树中例如求深度这样的高度提炼规律又是需要我去努力思考认真总结的„„这门课让我第一次觉得大学还真的有题要想的这么费脑子。
老师上课的方式也很有效率。刚开始的时候我被一大堆概念搞晕了,但是想着就是一堆概念而已课下也就没再去细细研究。结果上课老师提问的时候果然没有答上来,之后每次课前课后都要争取做到预习复习,巩固课上学的知识。不过学知识当然也不是为了应付老师的提问,既然选择了智能,以后这条路要走的顺畅,还少不了数据结构的知识。
结课的时候老师布置了几道编程的题目,一开始看到书上题目里直接有代码,就赶紧往c语言的软件里敲,结果发现运行不成,和同学们交流了之后才知道,可能是调取数据库的问题,书上的函数编译器无法识别,于是我发现我们的主要任务是集中火力把书上提供的功能函数的功能写出来,换言之,就是构造出这些个函数然后再使用它们去实现功能。在编程的过程中出现了很多的问题,比如指针本来就是c语言中的灵魂,难点中的难点,在数据结构的编程中几乎全部都要用到指针,让我不得不又翻开c语言的教材去复习指针的相关知识。另外,编出来的程序有时候自己看不出来错误但是编译器就是报错,又请教了班里一些已经完成的同学,在他们的意见指导下,改进自己的代码最终运行成功实现功能了。尤其是二叉树的那道题,因为书上没有讲如何输入二叉树,我就在思考无果之后去查资料,才了解c语言是这样和二叉树联系在一起的。当年创造出数据结构的人真的是非常厉害。经过这次的编程,我觉得自己不仅捡起来了上学期学的c语言,也加深了对数据结构和c语言的理解。我们现在掌握的数据结构的知识,就如同我偶然在图书馆看到数据结构的书架一样,只是这个庞大、精深体系中的冰山一角而已,就像老师说的,编程类的知识,老师只是把你带进门,想要真正掌握还是要自己下很多功夫的。
转眼间数据结构这门课已经接近尾声,很多人都说编程是一条孤独的、枯燥的路,其实我感觉编程还挺好玩,每编一个程序都像是一场斗智斗勇的冒险,一头扎进去就是好几个小时,也会经常和同学分享一下自己的思路或者见解,越学越觉得智慧殿堂无穷无尽。有时候我以为我自己设计的已经比较简洁比较巧妙了,听了别人的更是醍醐灌顶,觉得自己傻透了。
在这一段时间的学习里,我们同学之前互相沟通交流,互相帮助过得也很愉快,和刘老师相处的也非常融洽,希望老师在日后的生活教学中多注意身体,老师在教我们之前生了一场病,如果不是这样,老师上课的风采应该更甚。在以后的学习中,我也会继续探究数据结构的奇妙世界,学无止境,争取在数据的道路上更上一层楼!
2.数据结构课程改革 篇二
《数据结构》是计算机、电子以及信息管理类专业的基础必修课,是学习其 它专业课 的基础。该课程理 论性较强,采用传统以课堂教学为主的教学方式,学生学习积极性普遍不高。因此,有必要加强课程教学改革,提高学生学习积极性,实现学以致用[1]。
目前,已有诸多从事数 据结构课 程教学的 教师对该 课程教学改革提出了思路和方法。如“面向应用的”教学方法[2]、“抛锚式”教学方法[3]、基于“思维导图”的教学方法[4]、面向问题解决的教学改革[5]、以实验教学深化理论教学改革[6]、基于引领式 的远程教 学方法[7]等。这些教学方法在教学实践中取得了一定成效。教学方法同样需要与时俱进,需要根据教育教学理论和实践的发展,结合学生实际不断优化。本文在调 研的基础 上,提出教学 改革方案,并运用于实际教学工作中,取得了较好的教学效果。
1《数据结构》课程教学中存在的问题
(1)学生学习积极性不高。由于中学阶段学生学习主要在老师的细致引导下进行,大学阶段教学进度加快,教师不再带着学生对知识点进行反复讲解练习,导致部分学习主动性不强,仅满足于 课堂讲解 的学生跟 不上教学 进度。同时,长期的应试教育,使部分学生养成了不求甚解, 背诵记忆的学习习惯,但《数据结构》课程学习光靠记忆是远远不够的,因而部分学生产生了畏难情绪。《数据结构》 是一门实践性很强的课程,需要通过实践巩固理论知识学习,而教学中主要以作业的方式进行实践性学习,导致学生只能简单掌握重要《数据结构》的原理,不能将其灵活用于实际问题解决中。
(2)授课方式单一。随着计算机多媒体技术的发展和各大高校教学条件的改善,绝大多授课教师主要依赖多媒体进行教学,授课方式单一。同时,在多媒体教学中普遍存在将课本内容加上动画搬到幻灯片上的情况,幻灯片播放速度远远快于老师板书速度,缩减了学生消化和思考的时间。随着各大高校对学生实践能力培养的加强,数据结构课程理论教学学时有所缩减,要在规定学时内讲透所要求的知识点难度较大。可在充分调动学生学习积极性的基础上,借鉴慕课等视频教学形式,构建网络学习平台,对课堂教学提供有效补充。
(3)实践教学缺乏。《数据结构》是一门实践性非常强的课程,毋庸置疑,实验环节取着举足轻重的作用。目前, 大多高校理论课一般采取大班授课,实验课采用小班教学, 往往造成理论教学与实验安排缺乏合理衔接。此外,由于实验学时有限,考虑学生完成实验的难易程度,所布置实验大多为验证性,训练学生创新思维的实验较少。此外,通过查看学生实验结果检验学生实验效果的考核方式,往往导致学生拷贝他人程序来应付。解决上述问题,需要改革实验教学方法,倡导“学以致用”,通过实验调动学生的学习积极性,将现实案例用到学生实验和课程设计等实践环节,让学生真正学会使用数据结构知识解决具体问题。
2数据结构课程教学改革
2.1网络授课与答疑相结合
由于学生接受能力不同,传统课堂教学中,授课老师无法满足所有学生学习进度要求。可以采用网络授课和答疑课相结合的方式进行教学。由任课老师录制授课视频,将视频和电子课件上传教学网站,供学生网络学习。 学生可在网站上给任课老师留言,将未掌握的知识点告诉老师,老师对个别情况进行单独答疑,对共性问题通过答疑课答疑。这样的授课方式,可以兼顾学生学习基础和学习能力的差异。针对网络授课学生不能与老师直接交流的不足,可安排答疑课,老师与学生面对面交流,帮助学生更好地理解知识点。
2.2案例教学与实验课相融合
除网络授课和答疑课外,可开设案例课。学生只掌握数据结构的基本理论是远远不够的,应能运用数据结构知识解决相关问题。实际教学中,可通过案例教学增强教学实践性。在案例教学课堂中,可以选取日常生活中的实际案例,比如医院病人就诊、停车场管理等问题,让学生在解决实际问题的过程中掌握数据结构知识。此外,案例教学可安排在实验室授课,通过案例分析、讨论,引导学生完成设计性实验。
2.3闭卷考试与项目训练相辅相成
目前,《数据结构》课程考试方式主要为闭卷考试,客观题占很大比重,不利于培养学生的创新思维。可加大主观题的比重考察学生对于基础知识的运用,避免学生死记硬背应付考试。此外,在考试环节可加入项目考试,要求学生在规定时间内完成一个小项目的设计与实现。这样两种方式相辅相成,真正检验出学生学习的程度,引导学生全方位学习。
3结语
《数据结构》对于理工科专业而言,是一门非常重要的基础课程,其学习效果直接影响后续课程学习。通过网络授课与答疑课相结合,可兼顾学生学习能力的个体差异; 通过案例学习和实验相结合,可提高学生的学习积极性; 通过闭卷考试与项目相辅相成,促使理论联系实践。将本文教学改革方法运用于教学实践中,取得了较好效果。
摘要:针对数据结构教学中存在的问题,提出课程教学改革方法,使学生不仅掌握课程理论知识,而且能学以致用。通过教学实践,运用网络授课与答疑课相结合、案例教学与实验课相融合、闭卷考试与项目相辅相成等方法提高该课程教学效果。
3.数据结构课程改革 篇三
关键词:数据结构教学方法教学改革
中圖分类号:G642文献标识码:A文章编号:1674-098X(2011)05(a)-0190-01
数据结构是计算机科学与技术专业中的一门重要的专业基础课,它不仅是大学计算机专业的核心课程之一,也是非计算机专业的主要选修课程之一。本课程系统的介绍了软件设计中常用的几种数据结构以及相应的存储结构和算法,旨在培养学生的数据抽象能力和算法设计能力[1]。通过本课程的学习,不仅为学生后继课程提供必要的知识准备,而且更重要的是为提高软件设计和编程水平打下坚实的基础。因此对数据结构教学内容、教学方法等进行深入研究是非常必要的。
1 数据结构教学内容改革
(1)优化课程结构。
数据结构课程的主要内容是“线性表、树、图”三种数据结构和“查找、排序”两大类算法,这些内容不是孤立的,它们之间存在内在的联系。线性表是线性结构,是最简单的一种数据结构,树和图是非线性结构,线性表可以看作是树的特例,树为图的特例。这样在授课过程将三种结构联系起来,由线性到非线性,由简单到复杂,将课程内容形成一条主线,方便学生理解和掌握。查找和排序是建立在线性结构和树型结构上的两类算法,可以将其穿插在线性结构和树型结构两种数据结构中讲解,将数据结构和算法有机的结合起来,理论与实际相结合,更加方便学生对所学知识的应用。
(2)根据学生的层次调整授课内容。
学生入学时层次不同,再加上入学后受到多种因素的影响,学生的程度存在很大的差异,这就要求我们在授课内容上要根据实际情况进行调整。课堂上主要针对程度一般的多数学生的情况组织教学内容,力求学生能够掌握教材中的主要内容;对于程度差的学生要进行个别的辅导,通过补习和细化教学内容帮助其积累知识和提高理解能力,跟上课堂教学进度;对于程度较好的学生,要注重其潜在能力的培养,通过指定课外读物、加大信息量、布置思考题等,让其能力得到充分的发挥。因此,我们要在课程的层次和内容设置上下功夫,充分考虑各种具体情况,有针对性的教学,以期取得良好的教学效果。
(3)根据专业设置授课内容。
在一般的本科院校里,学习数据结构这门课程的学生不只是计算机专业,比如我们学校就有计算机和信管两个专业,还有其他专业的学生选修这门课程。对于不同专业的学生,同一门课的教学也不应当是简简单单的内容上的删减和侧重点的不同,要根据专业的需要设置教学内容,以适应现代高等教育的目标。要因材施教,对于不同专业的学生,学完这门课要让学生真正理解课程的精髓,为什么要学习这门课,它对自己所学专业有什么用处。不能仅仅依靠指定的教材,要根据专业的不同,编写适合自己学生的辅导教材、实验教材等,真正做到培养实用型、创造型人才[2]。
2 数据结构教学方法改革
数据结构这门课理论性较强,学生不容易理解,为了让学生更好的掌握这门课程,提高教学质量,要注意教学方法的正确使用。因此,除了传统的行之有效的教学方法之外,还应该采用一些新的有专业特色的教学方法。
(1)问题驱动式教学。
以问题为驱动,就是在教学过程中利用问题引导学生学习,以激发学生的学习兴趣和主动学习的能力[3]。将传统教学中的以教师为中心转变为以学生为主体,让学生主动地去学习,要有求知的欲望。因此,在教学过程中,通过问题来激发学生的学习兴趣,唤醒其主体意识。例如在学习最小生成树时,可以提问:“如果要建设乡村公路,保证一个乡镇的任意两个村子之间都能有公路相通,如何建设才能使得费用最少?”通过学生对问题的思考然后再讲解具体的实现方法,这样就能增强学生学习的兴趣和主动学习的欲望,同时学生对知识掌握的更加牢固。
(2)实践动力式教学。
实践教学是高等教育中一个重要的环节,尤其对一些工程学科来说更是不可缺少的。实践教学是验证学生对理论知识的掌握程度,同时也是提高学生创新能力的一个手段。在实践中能够让学生体会到学习的艰辛和成功的喜悦,从而增强自信心和学习的动力。
对于上机实验,我们摈弃传统教学中一刀切的传统,针对学生的不同层次设置实验内容。对于基础较差的同学首先让他们完成一些验证性的试验,掌握最基本的教学内容,在有余力的基础上再进行能力的提高;对于基础较好、有一定潜力的同学,可以不去作验证性实验,而是给他们提供一些有一定难度的实验,来充分发挥自身的潜能和创新能力。这样不同的同学都能够在实践过程中充分发挥自身的能力,有所收获,增强他们学习的自信心和学习的动力。
(3)创新导向式教学。
教学不仅仅是将书本上的知识教授给学生,关键是教给学生学习的方法,培养学生学习的能力。因此在授课过程中,在传授知识的同时,注重培养学生提出问题、分析问题和解决问题的能力。在教学中要启发学生去思考问题,并且要注意观察学生的思维动态,对学生不经意的创造,要加以引导和鼓励,培养学生的创新意识,挖掘其潜在的能力,使学生的创新意识和创新能力得到培养和发挥。
3 结语
数据结构是计算机及其相关专业的一门重要的专业基础课,其他许多计算机科学领域都建立在这个基础之上。因此为了能够更好的让学生掌握这门课程,提高学生的综合素质和创新能力,作者针对课程自身的特点,对教学内容和教学方法进行探索和改进,以适应现代教育的培养目标。
参考文献
[1] 严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,1997.
[2] 杨天怡,胡新平,严薇,等.创新教育与实践教学创新[J].中国高等教育,2005(23):28~30.
4.《数据结构》课程教学反思 篇四
(2006-10-02 20:31:34)转载▼
教学反思,是教师以自己的教学活动过程为思考对象,对自己的某种教学行为、决策以及由此产生的结果进行审视和分析的活动。实践证明,由教师本人对教学实践及其成败得失进行反思,有利于教师及时总结自己的教学经验,培养教师学习、研究的意识,促使教师更好地实现教学理论与教学实践的结合,提高教师的教学能力与水平。
以上是一段从网络摘抄的语句,其实对教学反思是怎样一回事认识并不是很深刻,就像学生前些日子询问的说课,懂得说课,但并不知道怎样跟学生解释什么是说课,只记得一句从网络上看到的话“授课主要是怎样讲,说课主要是为什么这样讲”。
要对上一个月的教学进行反思,是上星期就一直想进行的事情,但始终觉得找不到充实的时间或者是找不到很好的思路。要进行教学反思,主要还应该是对《数据结构》课程的反思,毕竟它是一门基础、核心的专业课程,而且也是系里第一次的开课。
对课程的反思:
1、很重要。数据结构是几乎所有软件方向专业课的基础,学C语言让你知道了什么是编程,而数据结构告诉你该怎么去编程。用网上一个例子来说,数据结构让你知道怎样从一个地方到另一个的路,而C语言等让你知道选择什么样的交通工具去走这些路,你不懂得去北京的路,给神六你坐也到达不了。
2、很多点。既然培养数据的处理能力,又要培养算法设计思路,还要培养实际的应用能力。有点兼顾不过来,理解算法思想倒是能达到的要求,但在实际应用能力的培养上,存在难度。
3、很难学。教师艰难的教,学生吃力的学。理解算法的思想,但如何放到实际中始终是难题,教师难找到合适的方法,学生接受能力有限,经验受制,受程序语言不熟练等影响。
对教师的反思:
1、经验不足。毕竟刚从大学毕业回来,教学经验欠缺,且系里也是第一次开这样的课程。对数据结构这门课本身理解不透,特别在实践方面接触较少,进行过的无非是大学时一些作业。因此在教师教学方法和学生接受能力间找一个结合点是一直苦苦探索的问题,直到现在仍是没有一个明确有方向。
2、目标过大。接受这个可以说是苦差的教学任务后,其实我的有埋怨过,但我更多是考虑如何去实现某些目标。让学生理解数据结构的算法思想,培养学生算法设计的思路,加强数据结构的实用性。从一个月的教学情况,目标定得过高了,特别是实践环节上,过高估计自己的教学能力,也过高估计学生的学习能力。但我直到现在,特别是在实践上,我找不到说服自己放弃的理由,毕竟总觉得学习了思想,不能在编程上实现,或者说是学会了例子,不会变通,算不上学会。我怀疑教学目标,但又放不开手。
3、时间欠缺。由于教学任务的限制,上机实践时间比较少,是以对学生把所学的思想转化为算法进而转化为程序的指导不足。一个月才开了一次实践课,本来已经足够,但对学生的实际情况来说,这还是很欠缺的。
对学生的反思:
1、思想重视不够。首先,作为师范生不重视这些难度偏深的课程;其次,作为计算机学生不重视这些偏向理论的课程;再次,在难学面前退却,没有足够的学习兴趣、信心和耐心。特别在对待操作作业上,一个月过去,第一次的作业完成几乎为零。
2、语言能力较差。尽管上学期学习了C语言,不说程序设计能力,且说C语言的基础知识掌握都是较差的。还是那句,把实践当成了死记硬背来考试,把知识当成了例子来学习。欠缺独立思考,欠缺独立编程。
3、自主协作不行。不能自觉的进行学习,什么都要教师在课堂上讲,或者只局限于课本,不懂得利用网络或参考书进行知识的拓展。也没有形成协作学习的氛围,同学间的交流不够,论坛学习的方法不懂。这归于两个原因,一个自觉性问题,一个班级氛围问题。
4、素质起点不好。这是我一直不想谈及的问题,毕竟我反复的强调过,他们大专生和本科生差别不大,在大学里都是一个新的起点,但在突出的个体上可以这样考虑,从整体上差异总还会存在的。尽管我承认这差异,但我依然否定他们说的智商等先天因素,这些只会是借口。我说的差异,首先就是自觉性,这一点在他们过分追求自由中散失;其次是空闲时间的自由度,学校安排课程过多,时间上和精力上有限;再次是学习氛围,那种泡图书馆和学术争论的氛围欠缺;最后是课程的关联大,一些关联课程如C语言掌握得较差。
对教学的展望:
1、能尽量在课堂教学中贯穿操作实践,引导学生把算法结合数据结构形成程序,但受时间限制较大,只能尽量起到牵引作用,一切还看学生课余时间进行。
2、督促完成第一次作业,毕竟数据结构的思想很多都体现在这次线性表实践作业中,能真正独立思考去完成,对以后课程的学习,相对会轻松很多。接着再进行更高一层次的,利用这些算法去解决实际的问题。
3、引导学生形成自主学习能力的自我培养及协作学习的氛围形成。毕竟这两个能力是计算机专业学生培养的重点之一。
4、细化目标,毕竟这门课是难学的,逐步进行目标,首先,让学生了解数据结构的逻辑特点,各种操作的算法思想;其次,让学生运用编程语言编写程序实现这些算法;最后,把这些编程思想和设计思路运用到实际应用中解决问题。
5、加强师生交流,了解学生想法,了解学生遇到的问题,更好的有目的的教学。
5.数据结构课程教学大纲 篇五
一、课程基本概况
课程名称:数据结构
课程名称(英文): Data Structures
课程编号:B09042
课程总学时:60(其中,讲课48,实验12)
课程学分:3
课程分类:专业选修课
开设学期:4
适用专业:计算机网络工程本科
先修课程:集合论,图论,高级语言(结构或记录,指针)
后续课程:数据库,编译原理,操作系统等
二、课程的性质、目的和任务
数据结构是计算机专业的一门核心专业课程,是软件课程中非常重要的一门课程,在整个专业教学中占有十分重要的地位,是一门理论性非常强的课程。通过课堂教学、课外练习和上机实习,使学生了解数据对象的特性,数据组织的基本方法,并初步具备分析和解决现实世界问题在计算机中如何表示和处理的能力以及培养良好的程序设计技能,为后续课程的学习和科研工作的参与打下良好的基础。
三、主要内容、重点及深度
本门课程共60学时,其中理论教学48学时,实验教学12学时。其中,理论教学部分:
第一章
绪论
(一)目的要求
了解数据结构的意义与发展过程、数据结构在计算机科学中的作用、学习本课程的目的、任务及要求。理解数据结构的基本概念;算法设计;掌握算法的时间和空间复杂度。
(二)教学内容 本章知识点:
1.相关的基本概念(掌握);
2.算法五大要素(掌握);
3.计算语句频度和估算算法时间复杂度的方法(掌握)。
(三)重点与难点
重点:数据结构的定义;算法的描述方法。
难点:数据结构的定义;算法与程序的区别;时间复杂度及其计算。
第二章
线性表
(一)目的要求
掌握线性表的逻辑结构;线性表的存储结构及操作的实现;理解一元多项式的表示;
(二)教学内容 本章知识点:
1.线性表的逻辑结构(掌握);2.线性表的存储结构(掌握);
3.线性表在顺序结构和链式结构上实现基本操作的方法(掌握);
4.从时间和空间复杂度的角度比较线性表两种存储结构的不同特点及其适用场合(掌握)。
(三)重点与难点
重点:线性表的概念;线性表的顺序存储结构、链式存储结构及其常用算法。难点:链式存储结构及其常用算法;双向循环链表。
第三章 栈和队列
(一)目的要求
掌握栈的定义,表示及实现;表达式求值;栈与递归过程;队列的定义、表示及实现。
(二)教学内容 本章知识点: 1.栈和队列的特点(掌握);
2.在两种存储结构上栈的基本操作的实现(掌握); 3.循环队列和链队列的基本运算(熟练掌握); 4.递归算法执行过程中栈状态的变化过程(掌握)。
(三)重点与难点
重点:堆栈和队列的概念;递归的定义;循环队列和链队列的基本运算。难点:递归的编程实现;循环队列和链队列的基本运算。
第四章 串
(一)目的要求
了解串的逻辑结构,存储结构;掌握串操作的实现(重点难点BF和KMP算法)串的应用。
(二)教学内容 本章知识点:
1.串的七种基本运算的定义(了解);
2.利用这些基本运算来实现串的其它各种运算的方法(掌握); 3.在顺序存储结构上实现串的各种操作的方法(掌握);
4.KMP算法,熟悉NEXT函数和改进NEXT函数的定义和计算(掌握); 5.串名的存储映象和在堆存储结构实现串操作的方法(理解)。
(三)重点与难点 重点:串定义和存储方法;串的操作 难点:串操作实现方法
第五章 数组和广义表
(一)目的要求
掌握数组的存储结构;稀疏矩阵的表示及操作的实现;广义表的定义和存储结构;广义表的递归算法。
(二)教学内容 本章知识点:1.数组在以行为主的存储结构中的地址计算方法(掌握); 2.矩阵实现压缩存储时的下标变换(掌握);
3.理解稀疏矩阵的两种存储方式的特点和适用范围,领会以三元组表示稀疏矩阵时进行运算采用的处理方法(掌握);
4.广义表的定义及其存储结构,学会广义表的表头,表尾分析方法(掌握); 5.学习编制广义表的递归算法(掌握)。
(三)重点与难点
重点:多维数组元素存储地址的计算;稀疏矩阵的三元组表示;广义表的存储定义、操作。难点:稀疏矩阵的三元组表示;广义表的存储定义、操作。
第六章 树和二叉树
(一)目的要求
了解树的基本概念;理解二叉树的性质和存储结构;遍历二叉树和线索二叉树;理解树的存储结构和遍历;集合的一种表示方法;掌握哈夫曼树及其应用;
(二)教学内容 本章知识点: 1.二叉树的结构特点(理解);
2.二叉树的各种存储结构的特点及适用范围(掌握); 3.按各种次序遍历二叉树的递归和非递归算法(掌握);
4.二叉树的线索化,在中序线索树上找给定结点的前驱和后继的方法(掌握); 5.树的各种存储结构及其特点(掌握); 6.编写树的各种运算的算法(掌握);
7.建立最优二叉树和哈夫曼编码的方法(掌握)。
(三)重点与难点 重点:二叉树的概念、性质;二叉树的遍历方式;构造二叉排序树。难点:二叉树的遍历方式;二叉排序树的构造方法;二叉树的线索化。
第七章 图
(一)目的要求
理解图的基本概念;图的存储结构;掌握图的遍历及应用{最小生成树,最短路径等};拓扑排序和关键路径。
(二)教学内容 本章知识点: 1.熟悉图的各种存储结构;
2.了解实际问题与采用何种存储结构和算法有密切联系(掌握); 3.遍历图的递归和非递归算法(掌握);
4.应用图的遍历算法求各种简单路径问题(比如,最小生成树、最短路径、拓扑排序、关键路径等)(掌握)。
(三)重点与难点
重点:图的存储结构;图的遍历 难点:图遍历的算法;
第八章
动态存储管理
(一)目的要求
了解边界标识法和伙伴系统;无用单元收集和紧缩;
(二)教学内容 本章知识点:
1.存储器分配策略和算法(了解);
2.无用单元收集时的标志算法(了解)。
(三)重点与难点
存储器分配策略和算法、无用单元收集时的标志算法
第九章
查找
(一)目的要求
了解静态查找表(顺序表,有序表,索引顺序表);动态查找表(二叉排序树,平衡二叉树,B-树和B+树)的建立和查找;掌握哈希表的建立,查找及分析;
(二)教学内容 本章知识点:
1.顺序查找、折半查找和索引查找的方法、应用(掌握);
2.二叉排序树的构造方法(掌握);
3.二叉平衡树的建立方法(掌握);
4.B-树,B+树和键树的特点以及它们的建立过程(理解);
5.哈希表的构造方法(掌握);
6.按定义计算各种查找方法在等概率情况下查找成功时和失败时的平均查找长度;
7.哈希表在查找不成功时的平均查找长度的计算方法(掌握)。
(三)重点与难点
重点:二叉排序树的构造方法、二叉平衡树的建立方法;哈希表的构造、应用;
难点:二叉排序树的构造及应用;哈希表的构造方法;查找的平均长度。
第十章
内部排序
(一)目的要求
掌握插入排序、交换排序(起泡排序,快速排序)、选择排序(简单选择,树形选择,堆)、归并排序、基数排序等算法。
(二)教学内容 本章知识点:
1.各种排序方法的特点并能灵活应用(掌握); 2.各种方法的排序过程(掌握);
3.各种排序方法的时间复杂度分析(掌握)。
(三)重点与难点
重点:各种排序方法的特点及其应用;实现排序的各种算法。难点:各种排序算法的时间复杂度分析。
十一章
外部排序
(一)目的要求
理解外部排序的基本方法;掌握败者树和多路平衡归并的实现;置换--选择排序;最佳归并树。
(二)教学内容 本章知识点:
1.外部排序的两个过程(理解);
2.外排过程中所需进行外存读/写次数的计算方法(掌握);
3.败者树的建立过程(掌握);
4.实现多路归并的算法(掌握);
5.置换-选择排序的过程(掌握);
6.最佳归并树的构造方法(熟悉);
7.按最佳归并树的归并方案进行平衡归并时,外存读/写次数的计算方法(掌握)。
(三)重点与难点
重点:外部排序过程和实现方法;多路并归算法及其实现; 难点:最佳并归树的构造方法及其应用。
实践教学部分:上机实验分4个专题,每个专题可提供2~4个难度不等的题目供选。
实验一
停车场管理系统
(一)实验内容 以栈模拟车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。栈以顺序结构实现,队列以链表结构实现。
(二)实验过程 编程实现实验内容。
(三)实验教学基本要求
通过实例,使学生掌握栈和队列两种特殊的线性结构,掌握栈和队列的特点。实验后学生提交实验报告。
(四)实验设备和材料 计算机。
(五)实验学时 4学时
实验二
教学计划编制问题
(一)实验内容
假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。编制一个教学计划程序。
(二)实验过程编程实现实验内容。
(三)实验教学基本要求
通过实例,使学生熟悉图的各种存储结构的特性,掌握如何应用图结构解决具体问题。实验后学生提交实验报告。
(四)实验设备和材料 计算机。
(五)实验学时 2学时
实验三
最小生成树问题
(一)实验内容
利用克鲁斯卡尔算法求最小生成树。以文本形式输出树中各条边以及他们的权值。
(二)实验过程 编程实现实验内容
(三)实验教学基本要求
通过实例,使学生熟悉图的各种存储结构的特性,掌握如何应用图结构解决具体问题。实验后学生提交实验报告。
(四)实验设备和材料 计算机。
(五)实验学时 2学时
实验四
哈希表设计
(一)实验内容
假设人名为中国人的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用伪随机探测再散列法处理冲突。
(二)实验过程 编程实现实验内容
(三)实验教学基本要求 掌握索引技术的使用。
(四)实验设备和材料 计算机
(五)实验学时 4学时
五、课程教学的基本要求和主要环节
本课程可采用课堂讲授、课堂讨论、习题课等进行课堂教学;条件允许可采用CAI、电子教案、幻灯片、参观等进行辅助教学;每章布置3~6道习题以巩固教学;在课程后半程,安排3~4个上机实验,让学生应用数据结构的理论、方法,分组设计几个较大的软件,使理论与实际相结合。
考试采用闭卷方式。总成绩由平时成绩和考试成绩组成。平时成绩占30%,考试成绩占70%。
六、本课程与其它课程的联系与分工
先修课包括:集合论,图论,高级语言(结构或记录,指针);
后续课包括:数据库,编译原理,操作系统等。
七、建议教材与参考教材
《数据结构》(C语言版)
严蔚敏等
清华大学出版社
1997 《数据结构题集》
严蔚敏等
清华大学出版社
1999
《数据结构习题与解析》
李春葆
清华大学出版社
2004
八、负责人
撰稿人:刘景汇、李玉香
审稿人:
6.数据结构课程设计 飞机订票系统 篇六
1.需求分析
描述要求编程解决的问题。以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:
(a)输入的形式和输入值的范围;
(b)输出的形式;
(c)程序所能达到的功能;
(d)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
2.概要设计
给出程序要达到的具体的要求。描述解决相应问题算法的设计思想。描述所设计程序的各个模块(即函数)功能。说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
3.详细设计
实现概要设计中定义的所有数据类型,对每个操作只需要写出流程或伪码算法;对主程序和其他模块也都需要写出流程或伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。给出所使用的基本抽象数据类型,所定义的具体问题的数据类型,以及新定义的抽象数据类型。设计出良好的输入输出界面(清晰易懂)。
4.调试分析 内容包括:
(a)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;
(b)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;
(c)经验和体会等。
5.用户使用说明
说明如何使用你编写的程序,详细列出每一步的操作步骤。
6.测试结果
设计测试数据,或具体给出测试数据。要求测试数据能全面地测试所设计程序的功能。列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。
7.测试情况:给出程序的测试情况,并分析运行结果
附录(非必须,按照需要添加)
带注释的源程序。可以只列出程序文件名的清单。
需求分析
任务:通过此系统可以实现如下功能: 录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况;
订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
概要设计
详细设计
详列函数 void list(){
struct airline *info;
int i=0;
info=start;
printf(“起点城市t终点城市t航班号t起飞时间t降落时间t总票数t余票数n”);
while(i { display(info); info++; i++; } printf(“nn”);} 查询函数 void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“请输入要起飞城市的名称:”); scanf(“%s”,qiname); printf(“请输入要抵达城市的名称:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“没有这条航线!n”); } else { printf(“起飞城市t降落城市t航班号t起飞时间t降落时间t总票数t余票数n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“请输入航班号:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“没有这条航线!n”); return NULL;} 订票函数 void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“请输入您的起飞城市:”); scanf(“%s”,qiname); printf(“请输入您的降落城市:”); scanf(“%s”,jiangname); printf(“请输入您需要的票数:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“请输入您的姓名:”); scanf(“%s”,name); printf(“请输入您的身份证号:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息为:n”); display(info); for(i=0;i { printf(“%s的座位号是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“订票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } 退票函数 void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“请输入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您没有订过票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} 存储结构 typedef struct passenger { char name[10]; int tickets; char id[30]; struct passenger *next;} linklist;typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo;调试分析 查看航线信息 查询航线 ① 输入起飞城市 ② 输入抵达城市 ③ 输出航班信息 办理订票业务 ① 查询符合的航班 ② 查询余票量 ③ 输出航班信息 办理退票业务 源代码 #include char name[10]; int tickets; char id[30]; struct passenger *next;} linklist; typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo; struct airline *start; void display(struct airline *info){ printf(“%st %10st %10st %10st %10st %5dt %5dn”,info->qi_name,info->jiang_name,info->air_num,info->qi_time,info->jiang_time,info->ticket_all,info->ticket_left);} void list(){ struct airline *info; int i=0; info=start; printf(“起点城市t终点城市t航班号t起飞时间t降落时间t总票数t余票数n”); while(i { display(info); info++; i++; } printf(“nn”);} void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“请输入要起飞城市的名称:”); scanf(“%s”,qiname); printf(“请输入要抵达城市的名称:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“没有这条航线!n”); } else { printf(“起飞城市t降落城市t航班号t起飞时间t降落时间t总票数t余票数n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“请输入航班号:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“没有这条航线!n”); return NULL;} linklist *insertlink(linklist *head,int amount,char name[],char id[]){ linklist *p1,*new1; p1=head; new1=(linklist*)malloc(sizeof(linklist)); strcpy(new1->name,name); new1->tickets=amount; new1->next=NULL; strcpy(new1->id,id); if(head==NULL) { head=new1; new1->next=NULL; } else { while(p1->next!=NULL) p1=p1->next; p1->next=new1; } return head;} void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“请输入您的起飞城市:”); scanf(“%s”,qiname); printf(“请输入您的降落城市:”); scanf(“%s”,jiangname); printf(“请输入您需要的票数:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“请输入您的姓名:”); scanf(“%s”,name); printf(“请输入您的身份证号:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息为:n”); display(info); for(i=0;i { printf(“%s的座位号是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“订票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“请输入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您没有订过票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} int menu_select(){ int c; char s[20]; printf(“ 订票系统n”); printf(“-------------n”); printf(“ 1.查看航线信息 printf(” 2.查询航线 printf(“ 3.办理订票业务 printf(” 4.办理退票业务 printf(“ 5.退出系统 printf(”-------------n“); do { printf(”请选择(1-5):“); scanf(”%s“,s); c=atoi(s); } while(c<1||c>6); return c; n”);n“);n”);n“); n”); } int main(){ struct airline air[MAXSIZE]= { {“harbin”,“beijing”,“1”,“12:00”,“14:00”,30,30},{“harbin”,“shanghai”,“2”,“10:00”,“13:00”,20,20},{“harbin”,“beijing”,“3”,“13:30”,“10:00”,50,50},{“harbin”,“guangzhou”,“4”,“17:00”,“21:00”,50,50},{“harbin”,“dalian”,“5”,“14:00”,“17:00”,40,40} }; start=air; while(1) { system(“cls”); switch(menu_select()) { case 1: list(); break; case 2: search(); break; case 3: order(); break; case 4: returnticket(); break; case 5: exit(0); } getch(); } } 经验体会 1、通过设计飞机订票系统,加深了对链表的运用和理解。 《数据结构》课程是计算机程序设计的重要基础课程, 它不仅是计算机专业的核心课程, 而且已成为许多高校信息类相关专业的重要课程, 是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础, 研究数据结构的目的是为了编写更高效的程序。同时它也是计算机专业研究生考试、大专学生专升本的首选考试课程[1,2]。学生虽然认识到该课程的重要性, 但学生在学习这门课程时, 在课程中涉及到大量的概念、数据的存储结构以及各种各样的算法, 这些对于刚学过一门编程语言的新生来说, 是非常抽象的。在教学过程中学生普遍反映学习起来非常困难, 教师也反映教学效果不尽如人意。因此, 如何学好、怎样教好《数据结构》成为学生和教师普遍关注的一个问题。 1《数据结构》课程教学中存在的问题 1.1 学生的学习兴趣不足 在教学中, 学生刚接触到《数据结构》课程时, 总认为《数据结构》是一门理论课, 感到枯燥、乏味, 学习兴趣不浓, 甚至有学生认为不学数据结构照样能编出程序。数据结构是门理论性与实践性并重的课程, 注重培养学生利用理论知识解决具体问题的能力的培养。如果仅仅满足于讲解清楚, 而不注意教学的生动性, 学生的学习行为只能是种被动行为, 为了考试而学习。最后导致学生死记硬背课堂讲解的知识点, 把一门实践性很强的课程变成了一门内容枯燥、乏味, 需要大量记忆知识点, 与实践完全脱钩的课程。 1.2 对前导课程掌握不够扎实, 程序设计能力不足 学生在学习《数据结构》课程时, 由于其前导课程掌握不好或没能熟练掌握 (高级程序设计语言或面向对象程序设计) , 导致学习《数据结构》课程时感觉很困难。数据结构中的算法多数由类C/C++实现, 在学数据结构之前, 已经系统的学习过C语言的相关知识, 但由于学生刚刚开始接触程序设计语言, 对其中的很多知识的掌握只停留在纸面上, 没有能够融会贯通, 导致用计算机解决问题不可能得心应手。同时对C语言描述的高度抽象的算法理解困难, 算法思路有, 但编制程序又无从下手, 特别是C语言中的指针和结构体部分, 在数据结构用得较多, 在设计算法以及上机调试时有困难, 学生对程序语言的掌握程度直接影响算法设计的质量。 1.3 教学模式陈旧, 教学手段单一 在《数据结构》课程的教学过程中, 长期以来, 我们遵循以教师为主体, 学生被动学习的传统教学模式, 仅局限教师“满堂灌”、“填鸭式”。对于数据结构这样一门概念、算法繁多, 需要较强逻辑思维能力的课程仍采取传统教学模式, 就很难取得良好的教学效果和达到预期的教学目的[3]。数据结构中有些算法的演示利用传统的粉笔加黑板的教学方式, 缺乏直观性效果, 难以充分展示算法的动态变化过程, 学生难以想象数据之间的复杂关系。近年来, 数据结构的教学已经大量采用多媒体教学, 但是采用简单的PPT, 仍然不能很好的解决这样的问题, 且存在多媒体授课信息量大, 学生听课时强度大, 理解困难, 严重影响了教学效果。 1.4 理论教学与实际应用脱节 《数据结构》课程本是一门实用性很强的课程, 但内容抽象、琐碎、庞杂, 涉及很多概念和技术。所有这此内容均自成体系, 相互之间的衔接线索很少, 总体感觉内容零散, 没有个整体的知识框架体系。这些内容在实际应用中又都很重要, 而现行的教学计划实践课时普遍不足, 实验课安排的实验项目很难含盖课程的所有知识点。同时实验内容的设置上, 往往都是大量的验证性实验内容, 缺乏对实际问题的解决, 学生在实验之后仍然不知道学习数据结构在解决实际问题的。因而在具体应用上并没有教会学生解决问题的思路、算法思想和数据结构的使用, 在实验中只能停留在完成课本内容, 而对实际问题则是无从下手, 这些都是教学脱离实际的最现实写照。 1.5《数据结构》课程中的结构比较抽象 《数据结构》课程本身是一门抽象程度较高的课程, 对于缺乏实际应用经验的学生来说, 理解起来具有一定的难度。我们通常所说的数据结构, 指的是数据间的逻辑结构, 如线性表、二叉树和图结构[4]。尽管很多教材为了使理论更加直观和易于理解, 在编写时配了很多图示, 但在实现这些结构的操作时, 学生还是感到不知如何下手。不少同学反映学完该课程之后不知道能用在什么地方、能够解决什么问题, 即使教材上所讲内容都完全掌握, 仍然无法应用到实际问题当中, 除了课堂上讲的例子外, 找不出该知识点的其他应用, 同时遇到实际问题时, 也想不出该问题的抽象数据类型。 2《数据结构》课程教学改革措施 2.1 注重培养学生的学习兴趣 俗话说, “兴趣是最好的老师”, 如果要学生学得好, 首先就要让学生对该门课程产生兴趣。教好《数据结构》这门课, 一定要从培养学生的学习兴趣开始, 因此在进行数据结构课的第一次授课中, 并不急于介绍理论, 而是强调应用, 通过介绍数据结构在实践中的应用来激发学生的学习兴趣。如多岔路口交通灯管理问题;1997年轰动一时的国际象棋“人机”大战, 由国际象棋大师与IBM公司的计算机进行国际象棋比赛, 为什么最终计算机能够取得胜利问题;图书馆的书目检索系统, 如何组织图书的登录号、书名、分类号等数据才能快速实现查找、插入、删除操作;旅游路线设计问题, 如想去上海、南京、杭州、苏州等地旅游, 怎么样安排线路以求花费最少等等。以上应用都是贴近生活, 学生比较熟悉, 通过实际问题的分析, 明确数据结构课程的重要性与实用性, 激发学生学习学习兴趣。此外, 如果教师在讲授该门课程过程中, 同时, 能够引入一些生活中的实例, 引导学生巧妙处理生活中的日常问题, 让学生感受到《数据结构》这门课程与现实生活中的关系, 就更加能够提高学生的学习兴趣。 2.2 教学中补充前导课程的教学内容, 加强编程训练 《数据结构》课程是在学生有一定的程序设计基础的前提开设的, C语言程序设计是数据结构的前导课程之一, 学生对它的熟悉掌握程度, 直接关系到数据结构课程的教学效果。C语言本身的灵活性, 对于刚刚学完C语言程序设计的学生而言, 运用不一定很自如。另外, C语言难点就是指针、函数、数组作为函数参数以及结构体类型等, 而数据结构课程教学过程中主要运用这些知识点来分析、解决问题的。对于大部分学生来说, C语言运用能力不是很强, 如果上课时直接切入主题, 他们就会有“云山雾罩”的感觉。如何来解决这个问题呢?我们可以利用一、两次课的时间 (2-4学时) 来复习C语言的相关知识, 即数组、指针、函数和结构体等。可以将这些学时纳入到教学进度表中, 教师在复习并不是面面俱到, 而是将与本课相关的内容做以归纳总结, 这样既可以复习以前的知识, 加深印象, 强化理解, 又可以为数据结构课程的教学做铺垫。 基于C语言的数据结构, 一个算法对应一个函数, 这样做的目的是为了摆脱源程序的繁琐, 以便将精力集中在算法思想上。所以在大部分教材中, 几乎看不到一个完整的程序, 也正是这个原因, 给初学者带来了很大的不便。对刚进入本课程学习的前几个算法给出完整的程序, 并加以详细讲解, 使学生理解算法和源程序之间的关系。 当然, 进行一定的编程训练也是必不可少的。可以通过课堂练习、实验和大作业训练, 可以让学生对C语言各方面知识作一个整体掌握, 对比较重要的内容更要加强练习。同时, 还可以将所学的“数据结构”的知识具体化, 与实际问题相结合, 提高综合解决实际问题的能力。 2.3 搭建整体知识框架 “数据结构”内容繁复, 高度抽象, 广泛涉及软、硬件的各种知识, 应给学生理出清晰的几条主线, 在他们头脑中搭建课程的整体框架。在教学过程中, 首先, 要分析教材各个章节的关系, 从课程要求的大局出发, 由浅入深把握主线, 采用纵横对比的方法, 详细介绍《数据结构》课程体系。《数据结构》是研究非数值计算的程序设计问题中所出现的计算机操作对象 (数据) 、数据之间的关系 (数据的逻辑结构) 、对数据的操作 (各种不同算法) 、算法复杂性分析等内容的一门学科。每一种数据结构, 都要搞清其逻辑结构、存储结构、常用操作、算法性能分析、实际应用五个方面。其次, 要吃透教材、突出重点[5]。对于数据结构课程, 其基础的且为重点的内容应该是“表、树、图”三大数据结构和“查找、排序”两大类算法。还有很重要的是讲好课程介绍即第一堂课, 使得学生能够理解该课程在整个计算机专业体系中所处的位置和该课程的重要性, 为学好课程打好基础。 2.4 采用多种教学手段 在教学过程中要始终贯彻以学生为主体, 教师为主导的教学模式。教学方式要力求多样化, 对不同章节的不同内容可采用不同教学方法。 采用问题驱动教学法。问题驱动是指学生在教师创设的情景下, 应用已学知识提出相关问题, 继而解决问题的过程。在《数据结构》课程的教学过程中, 教学除了讲解基本的理论知识外, 还要注意引导学生去分析问题、抓住本质、组织数据、设计算法、解决问题, 并且要求学生能举一反三, 触类旁通, 从而培养学生的综合能力。 实例教学法。《数据结构》课程理论性和逻辑性较强, 学生理解起来有一定难度, 在讲授的时候, 结合生活中常见的实例进行讲解并与学生互动, 会有利于学生的理解。在教授过程中可以提出一些模拟现实的课题, 分组来组织学生对课题展开讨论, 在讨论的过程中发现问题, 提出问题, 老师参与学生的讨论, 并针对问题讲述解决问题所需要的数据结构的知识。这样既增强了师生之间的交流, 也让学生由被动的“听课”变主动地学习课程, 可充分调动学生学习的主观能动性;同时, 学生的分析问题、解决问题的能力也可得到很大提高。 为了让学生在有限的时间内更好的掌握知识, 可以采用融合了多媒体技术的计算机辅助教学 (CAI) 。还可以采用现有的DSDEMO数据结构课件演示系统, 进行演示, 这样可以使教学内容变得更直观、形象、生动和有趣, 从而取得良好的教学效果。 同时利用计算机网络构建教学支持平台。充分发挥校园网的作用, 利用计算机网络辅助教学, 将《数据结构》课程的教学大纲、电子教案、电子课件、程序案例以及相应的教学资料, 进行汇集整理, 逐步积累, 最终集成一个资料丰富的网站, 放在校园网上师生共享, 形成一种全新的教学模式, 因材施教, 以便充分发挥学生的学习积极性和主观能动性。另外也可以设立辅导答疑时间, 利用网络进行答疑, 解决同学们在课余时间遇到的问题。 2.5 加强实践环节, 培养学生实践能力 《数据结构》课程有很强的实践性, 应注重培养学生利用理论知识解决具体问题的能力培养。为使学生真正学好“数据结构”, 除了在课堂上要采用行之有效的教学方法外, 还要让学生勤动手, 多实践。上机实践是对学生综合素质进行训练的一种最基本方法, 是与课堂听课、课余自学和练习相辅相成的、必不可少的一个教学环节。在实践中遇到的问题往往比平时的习题要复杂得多, 也更接近于实际。在安排实训项目时, 从简单程序起步, 逐步加大难度, 使学生的编程能力得到锻炼。在授课过程中重点从以下几个方面进行了探索实践:第一, 合理设置实训内容, 力争与理论课的重点、难点及实用知识联系起来, 选择有具体应用背景的实训题目, 充分发挥学生的主动性;第二, 注重实践过程, 注重学生综合能力的培养;第三, 为了培养学生的创新意识和团队协作精神, 促进学生之间的交流和协作, 使不同水平的学生都能在大型实验项目中担负起相应的工作, 特别设计了一套针对综合型实验和探索创新型实验考核方法。 根据不同的实验项目采取不同的考核方式, 基础型和设计型实验项目安排在平时每周的上机实验课进行, 根据学生提交的实验报告进行考核。综合型和创新型实验项目较大, 需要学生分工合作, 共同完成, 一般对学生进行分组, 每组完成一个实验项目, 在课程设计环节完成, 一般有两周时间, 教师根据每个学生在组内的表现给出一个考核成绩, 项目完成后, 再根据各组提交的项目报告和项目的质量给出合理考核成绩。这样既激发了学生的创新能力, 又提高了学生的团队合作精神。 3 结束语 数据结构是计算机专业及相关专业的核心课程, 是计算机程序设计的重要理论基础。对该课程的教学改革是一项长期而艰巨的任务, 既要重视基础理论知识的学习, 又要重视实践教学环节。针对在数据结构教学过程中所发现的问题进行讨论和改革, 实践证明该措施取得了良好的教学效果, 对进一步的改革提出了一些建议, 希望能够更好地提高教学效果。 摘要:数据结构课程是计算机程序设计的一门核心课程, 学生通过这门课程的学习, 可以促进软件设计和编程能力的提高。针对现在教学过程中存在的问题, 从教学实践出发, 提出了相应的教学改革措施。 关键词:数据结构,教学改革,措施 参考文献 [1]严蔚敏, 吴伟民.数据结构 (C语言版) [M].北京:清华大学出版社, 2002. [2]彭波.数据结构[M].北京:清华大学出版社, 2006. [3]孙岐峰.“数据结构”课程教学反思与改革[J].计算机教育, 2009 (11) :66-68. [4]张敬芝.数据结构课程教学改革研究[J].长春师范学院学报:自然科学版, 2005, 2:147-148. 摘要:针对西部高校学生英语基础较为薄弱的特点,分析了《数据结构》双语教学课程的发展历程、教材选用、理论教学、实验教学中存在的典型问题,在教学内容、教学手段和考核方式等方面进行了研究与探索,为西部高校计算机类双语课程的学习提供了参考。 关键词:数据结构;双语教学;实验教学; TP311.12-4 《数据结构》课程是电子信息类专业课程体系中一门核心专业基础课。桂林电子科技大学是工业和信息化部与广西壮族自治区共建高校,是广西壮族自治区重点建设高校。学校电子信息类相关专业开设了《数据结构》课。该课与C语言程序设计、数据库原理、计算机网络等几门课程,形成软件技术基础课程体系,使得非计算机专业的电子信息类学生毕业后不但能从事硬件制版、设计与调试的工作,也可以从事软硬件结合的系统开发或从事软件类开发测试工作。 一、《数据结构》双语教学课程发展历程及现状 教育部2001年发布了《关于加强高等学校本科教学提高教学质量的若干意见》[1],提出要求各高校在三年内开设5%~10%的双语课程。我校各个本科专业均设置了2-3门的双语教学课程。针对西部学生英语基础相对薄弱的情况,考虑《数据结构》课程以算法和数据结构描述为主,算法代码的描述是英文,与其它专业课程相比学生更助于理解和学习,且计算机类专业在国内外的发展较为迅猛,易选到较为合适的英文教材,因此将其设置为第一批双语教学课程。 《数据结构》课程采用理论教学与实验教学相结合的方式开展。实验的内容涵盖了基本的数据结构应用和基本的算法应用。教学过程中为注重引导学生运用数据结构和算法,以头文件的方式将基础数据结构的实现代码提供给学生,实验内容专注于数据结构的具体使用及算法的具体设计和实现。课程选用的教材的为英文原版教材的影印版《数据结构与算法分析-C语言描述》(作者Mark Allen Weiss)。该教材英文表达简洁易懂,内容知识点覆盖全面,风格严谨,为图灵原版计算机科学系列丛书。 二、《数据结构》双语教学存在问题分析 十余年的数据结构双语教学积累了较为丰富的经验,课程教学过程中出现的典型问题可从理论教学、实验教学、教学考核几方面进行概括。 1、理论教学 西部高校学生因为生源大都来自于本省,学生英文基础相对薄弱,我校在2013年对测控技术及仪器专业进行国际工程认证时,专家组对我校学生的综合素质尤其是动手实践能力评价较高,但对于学生的英语能力和英文水平,提出了很多意见和建议。我校双语教学理论教学存在的最大问题是学生对英文教材的排斥。编程类课程选用英文教材,学习难度和接受度比其他专业课程更为合适,但学生因为生源质量不高,缺乏学习自律性,生活中过于依赖网络和手机,学习态度相对较为浮躁,钻研能力欠缺。英文教材的阅读和授课内容的理解更需要学生深度投入,学生学习的积极主动性欠缺,导致不能及时理解教材的知识点,影响了教学的效果。 双语课程在讲授时采用英文教案英文板书,中文辅助讲授知识点,作业和考试全部都是英文,许多学生因为对汉语教学过于依赖,上课时仍选择汉语教材学习,导致教学过程中出现能理解掌握知识点,但看不懂英文题目的描述,导致考核无法通过。 2、实验教学 桂林电子科技大学是以工为主、电子信息类学科优势突出的多科性大学,学校一直重视学生创新精神和实践能力的培养,坚持理论基础与工程实践并重的教育理念[2],在实验教学设置上颇有特色。数据结构和算法的掌握,须靠算法的设计与验证来展开,为此实验课单独设课、独立考核。数据结构的实验课共16个学时,单独开课,实验内容涵盖基础的数据结构和算法应用(包括线性表、栈、队列、树、图、散列表、排序、查找等内容),所有的实验均为设计型实验。针对学生动手能力和自学能力良莠不齊的情况,实验题目为设置为必做题目和选做题目,分层次的实验教学,可以让学业上追求不同的学生能力上得到不同的扩展。与其他兄弟学院的数据结构实验相比,课程对应的实验更注重算法的设计与应用,将基本的数据结构(如线性表、栈、队列)的实现代码以头文件的方式供学生使用,让学生将这些基本的数据结构应用于实际的算法设计和实现中,增强学生的实际工程实践能力。 多年实验教学经验显示,学生在该课程中的学习效果依赖于C语言的掌握程度和学生学习的主动性,对C有兴趣且掌握较好的同学,能够在实验前对算法进行初步的设计和伪代码实现,能够提交合格的预习报告和实验报告。而对编程基础薄弱的同学,面对设计性实验,学生动手能力欠缺,较难完成实验要求。自律性缺乏的学生比例较多,学生学习的主动性有所欠缺,需要有一定的课堂改革措施来提高学生参与课程的积极性。 3、教学考核 《数据结构》课程的考核中有这样一种典型现象,学生看不懂英文题目导致无法通过课程。若把同样题目翻译成汉语,学生则能完成相应的算法设计和实现,英文基础差、过于依赖翻译版英文教材导致了这种情况。实验是独立开课独立考试的课程,学生在实验中的表现差异较大,能预习好并能在实验前写出实验内容伪代码的同学,完成实验编程的比例较高。预习不充分的同学,在实验中完成情况不理想,能完成实验考核要求的比例较低。 三、 问题解决研究探索 针对《数据结构》双语课程中存在的问题,软件课题组的老师曾经多次进行过探讨。并和实验老师进行交流,探讨如何进行教学效果改进。结合参阅同行的对策方案[3-5],课题组实施的改进措施概括如下。 1、减弱学生对双语课程的抗拒感 以读书笔记的方式辅助课程进行学习;学生除英语课外,第一次接触英文教材。英文基础薄弱的学生心理对英文教材有排斥,采用读书笔记的方式开展课外辅助教学;以作业形式,要求学生课余增加教材阅读时间,完成翻译指定章节的概要内容;遇到教材中的算法内容,要求学生给出算法的流程图。这种方式,不但可以提高学生的英文阅读能力,还可以提高学生的总结能力和算法实践能力,利于后序课程的学习。endprint 2、注重理论教学和实验教学内容互相嵌入 采用理论内容与实践内容相结合的方式授课;对典型的数据结构和算法,多讲算法的具体编程应用。讲解时注重板书教学和PPT教学相结合的方式开展。因为双语教学要求授课板书为英文,多年的教学经验表明纯粹的PPT教学的方式,大篇幅的英文界面不利于学生对英文知识点的理解和掌握,遏制学生的学习积极性。通过电脑演示算法的实现过程与黑板板书教学相结合的方式,利于学生对双语课程的掌握。 3、提升学生编程兴趣,增加学生学习的成就感 适当组织课程内动手能力较强的学生参加各种软件程序设计大赛;学生可以通过程序设计竞赛,增加对软件类课程的兴趣。面向所有选课学生,通过开设算法应用的编程项目,通过增加结合知识点的编程习题,结合数据结构课程设计题目,将项目分为必做和选做部分,以2-3个同学为一组的方式开展。为了提高学生的英文阅读和理解能力,实验项目用英文描述题目并下发给学生。项目验收以答辩的方式开展,项目答辩的成绩计入期末考核。这种方式,能提高学生的学习参与性,同时提高了学生的编程能力和交流能力以及团队合作能力。 四、结语 双语教学有助于培养学生的英语阅读、英语翻译等应用能力,为后期专业英语的学习和专业新技术的掌握打下基础。本文对桂林电子科技大学的《数据结构》课双语教学的发展过程和教学中存在的问题做了相应的介绍。针对课程中可以开展的改进教学效果、提高学生学习兴趣的方法进行了探讨,针对英文基础较为薄弱的学生如何学习双语课程提供了较为详细的解决策略。为双语教学的开展提供一定的参考,尤其对计算机类课程双语教学的开展,具有较为重要的参考意义。 参考文獻: [1] 教育部. 关于加强高等学校本科教学工作提高教学质量的若干意见[Z]. 教高E2OO1-4号. [2] 古天龙,景新幸,郭庆,等. 本科院校工程应用型人才培养模式改革探索—基于桂林电子科技大学电子信息类工程应用型人才培养实验区的思考[J]. 中国高教研究,2012(1):107-110. [3] 黄敏,陈天.“数据结构”双语教学中的问题与对策[J].合肥工业大学学报(社科版),2008(2):122-125. [4] 王玉锋,刘宝旨,厉群,等.“数据结构"课程双语教学的研究与实践[J].计算机教育,2009(10):122-124. [5] 戴波,周世杰,林劼,等.“数据结构”课程改革探索[J].实验科学与技术,2013(6):281-284. 设计题目:最小生成树 专业:xxxxxx 院系:计算机学院 姓名:xxxxxxxxx 学号:xxxxxx 时间:2013年10月7日 数据结构课程设计报告 最小生成树 目 录 一、设计目的……………………………………………………………….-2- 二、算法思想分析………………………………………………………-2-1.算法思想………………………………………………………………..-3-1)普里姆(Prim)算法思想……………………………………………………….-3-2)克鲁斯卡尔(Kruskal)算法思想..........................................-3-2.系统采用的数据结构和算法………………………………-3- 三、算法的描述与实现……………………………………………….-4- 四、用户手册………………………………………………………………-7- 五、总结…………………………………………………………………….-10- 六、参考文献…………………………………………………………….-10- 七、附录(源代码)………………………………………………...-10- 数据结构课程设计报告 最小生成树 1.算法思想 1)普里姆(Prim)算法思想 a)选择从0节点开始,并选择0节点相关联的最小权值边,将与这条边相关联的另一顶点出列; b)在出列的节点中相关联的所有边中选择一条不与另一个已出列的节点相关联的权值最小的边,并将该边相关联的节点出列; c)重复b)直到所有的节点出列。2)克鲁斯卡尔(Kruskal)算法思想 为了使生成树上总的权值之和最小,应该使每一条边上的权值尽可能的小,所以应从权值最小的边选起,直至选出n-1条不能构成回路的权值最小的边位置。 具体做法如下:首先构造一个含n个顶点的森林,然后按权值从小到大从连通图中选择不使森林中产生回路的边加入到森林中去,直至该森林变成一棵树为止,这棵树便是连通图的最小生成树。 由于生成树上不允许有回路,因此并非每一条居当前最小的边都可选。从生成树的构造过程可见,初始态为n个顶点分属n棵树,互不连通,每加入一条边,就将两棵树合并为一棵树,在同一棵树上的两个顶点之间自然相连通,由此判别当前权值最小边是否可取只要判别它的两个顶点是否在同一棵树上即可。 2.系统采用的数据结构和算法 1)数据结构 Typedef int Vertextype;Typedef int adimatrix[MaxVertexNum][MaxVertexNum];Typedef int Vertextype vexlist[MaxVertexNum];Typedef int VexType; 数据结构课程设计报告 最小生成树 1.Great_adjmatrix()和Great_adjmatrix2()是两种建立图的方法; 2.克鲁斯卡尔算法(Kruskal): Void kruskal(GraphMatrix * pgraph,Edge mst[]){int i,j,min,vx,vy;int weight,minweight;Edge edge;for(i=0;i n-1;i++){mst[i].start_vex = 0;Mst[i].stop_vex = i+1;Mst[i].weight = pgraph->arcs[0][i+1];} for(i=0;i n-1;i++)//共n-1条边 {minweight = MAX;min = i;for(j=i;j n-1;j++)//从所有(vx,vy)(vx∈U,vy∈V-U)中选出最短的边 if(mst[j].weight for(j=i+1;j n-1;j++) 数据结构课程设计报告 最小生成树 j=MST[k-1].endvex;//定位于权值最小边的尾顶点 for(i=k;i 4.out_edgeset()功能为显示最小生成树。 四、用户手册 1.运行程序,得到如下窗口: 2.输入顶点数,选择算法: 1)当输入的顶点数小于10时,选择Kruskal算法,如下图 数据结构课程设计报告 最小生成树 五、总结 该程序实现了在n个城市之间建设网络,既保证了连通性,也成为了最经济的架设方法。程序中应用了普里姆算法和克鲁斯卡尔算法,实现了矩阵的输出以及最小生成树的输出。不过,该程序仍有不足之处,图的输入数据过大,易出错,不易返回,仍需完善。 六、参考文献 [1]《数据结构程序设计题典》 李春葆编 清华大学出版社 [2]《数据结构(C语言版)》 严蔚敏 吴伟民编 清华大学出版社 [3]《数据结构课程设计》 苏仕华编 机械工业出版社 七、附录:(源代码) #include 数据结构课程设计报告 最小生成树 { scanf(“%d%d%d”,&i,&j,&w);GA[i][j]=GA[j][i]=w;//对称 } } void Creat_adjmatrix2(vexlist GV,adjmatrix GA,int m,int e,GraphMatrix &graph){ int i,j,k,w,x,y; printf(“输入%d个顶点序号(0-m-1),序号从0开始。”,m);for(i=0;i GA[i][j]=MaxValue;printf(“请输入有多少条边。n”);scanf(“%d”,&e);printf(“输入%d条无向带权边(序号 序号 权值):n”,e);for(k=0;k 数据结构课程设计报告 最小生成树 /* mst[min]是最短的边(vx,vy)(vx∈U, vy∈V-U),将mst[min]加入最小生成树 */ edge = mst[min];mst[min] = mst[i];mst[i] = edge;vx = mst[i].stop_vex;/* vx为刚加入最小生成树的顶点的下标 */ for(j = i+1;j < pgraph->n-1;j++){ /* 调整mst[i+1]到mst[n-1] */ vy=mst[j].stop_vex;weight = pgraph->arcs[vx][vy];if(weight < mst[j].weight){ mst[j].weight = weight;mst[j].start_vex = vx;} } } } void out_edgeset(edgeset MST,int e)//显示最小生成树 { int k;printf(“最小的消耗路线为n”);for(k=0;k printf(“(%d %d %d)n”,MST[k].fromvex,MST[k].endvex,MST[k].weight);} void prim(adjmatrix GA,edgeset MST,int n)//利用prim算法从0点出发求图的最小生成树 数据结构课程设计报告 最小生成树 int a;system(“color 71”);//改变屏幕颜色 printf(“ ┏━━━━━━━━━━━━━━━━━━━━━━━━━┓n”);printf(“ ┃㊣ 必做题:最小生成树 ㊣┃n”);printf(“ ┃ 姓名:xxxx ┃n”);printf(“ ┃ 学号:xxxxxxxxx ┃n”);printf(“ ┗━━━━━━━━━━━━━━━━━━━━━━━━━┛n”);vexlist GV;//顶点表 adjmatrix GA;//边表 edgeset MST;//最小生成树 do{ printf(“输入图的顶点数n,我们将根据您输入的数据大小选择合适的算法。n”);scanf(“%d”,&n);if(n>=10)//大于10用prim算法来实现,否则kruskal算法来实现 { printf(“用prim算法从0点出发求图的最小生成树为:n”);printf(“请输入图的边数。n”);canf(“%d”,&e);Creat_adjmatrix(GV, GA, n, e);//创建图 prim(GA,MST,n);//生成最小生成树 【数据结构课程改革】推荐阅读: 数据结构课程标准10-06 数据结构课程设计新版10-05 数据结构课程设计教学大纲计科09-27 数据结构实验六11-08 数据结构实验111-10 数据结构上机作业答案07-21 课设报告数据结构08-28 数据结构实验顺序表09-17 数据结构习题八答案09-277.《数据结构》课程教学改革与实践 篇七
8.数据结构课程改革 篇八
9.数据结构课程设计-最小生成树 篇九