数据结构范文

时间:2023-03-08 14:29:26

数据结构

数据结构范文第1篇

【关键词】数据结构;知识体系;教学设计

1 课程的地位与作用

《数据结构》是计算机科学与技术专业的核心专业基础课程,是计算机程序设计的重要理论和实践基础,是计算机理论与技术的重要基石。《数据结构》上承高级语言程序设计,下启算法分析与设计,是计算机科学与技术人才素质框架中的脊梁骨,对学生能力培养至关重要,向来是计算机本科教学的重中之重。调查表明已毕业的学生通过他们的工作实践认为《数据结构》是最有用的课程之一,这也从另一方面说明了该课程的重要性。

计算机科学与技术专业的培养目标之一是掌握计算机科学与技术的基本理论、计算机软/硬件基本知识及应用技术,《数据结构》在培养目标的实现中具有举足轻重的作用,是理解计算机科学与程序开发技术的关键课程。作为一门重要的专业必修课程,《数据结构》课程既是对以往课程的深入和扩展,也是为将来更加深入地学习其他专业课程打下基础。课程中所学习的排序问题的算法,以及基本的树、图等数据结构,是计算机科学的基本功。B+树等高级数据结构,也是数据库、操作系统、编译原理、计算机网络等后续课程的基础。《数据结构》是计算机专业考研的统考课程,也是很多大赛(“蓝桥杯”、ACM等)必涉及的知识。

《数据结构》与其它课程关系如图1所示。

图1 《数据结构》与其它课程关系

《数据结构》在培养目标中的作用如图2所示。

图2 《数据结构》在培养目标中的作用

2 课程的教学目标与主要内容

2.1 课程的教学目标

学习本课程后,应达到下列基本要求:

(1)理解数据结构的基本概念;

(2)熟练掌握线性表、栈、队列、树、图等常用数据结构的基本运算的实现及应用;

(3)熟练掌握排序和查找的常用算法及应用;

(4)能够对算法进行时间复杂度度、空间复杂度的分析;

(5)培养学生分析数据、组织数据的能力,能够根据实际问题来选择合适的数据结构,设计有效的算法。

2.2 教材与主要参考资料

教材

耿国华《数据结构(用C语言描述)》,高等教育出版社,2011年

教材选择的依据:

(1)该教材跟踪技术发展需要,体系科学,是“十一五”部级规划教材。

(2)该教材理论的阐述由浅入深、通俗易懂。

(3)该教材理论结合实际,配有大量的例题、习题与实习题。

主要参考资料

[1]严蔚敏,吴伟民《数据结构(C语言版)》,清华大学出版社,2006年

[2]张铭,王腾蛟,赵海燕《数据结构与算法》,高等教育出版社,2008年

[3]朱战立《数据结构――使用C语言(第4版)》,电子工业出版社,2009年

[4]王晓东《数据结构(C语言版).》电子工业出版社,2007年

[5]西北大学数据结构精品课程网站

http//:/datastr

[6]北大数据结构与算法课程网站

http:///pkujpk/course/sjjg/

[7]洛阳理工学院数据结构精品课程网站

http//:/sjjg

[8]洛阳理工学院数据结构精品资源共享课程网站

http//:/ds

2.3 知识体系

《数据结构》知识体系可分为分为三大块,如图3所示。

图3 《数据结构》知识体系

数据结构课程的基本知识模块是以数据的逻辑结构为主线,顺序介绍线性结构(线性表、栈、队列、串、数组、广义表)、树形结构、图结构。在介绍每种数据结构时,再讨论其存储结构以及相关的算法。在介绍完基本的数据结构及其存储结构和相关的算法后,介绍了两种常用技术:查找和排序。

3 课程教学内容安排

3.1 课程重点、难点

重点:线性表、栈、队列、二叉树、图典型数据结构的逻辑结构、存储结构和操作的实现方法,各种典型的排序和查找算法思想。

难点:各种数据结构的操作实现和应用

第1章是对数据结构课程的认识,基本概念比较多,概念要讲清楚、准确,第一章要通过丰富的例子讲解如何分析算法时间复杂度,这是贯穿整门课程的内容,也是本课程的一个难点,第2章是整个课程的重要基础,要讲得十分详细,为后面的章节打下良好的基础,第3章的栈与递归的实现是本书的一个难点,要通过例子讲透,并且在第6章还要进一步地讲递归到非递归的转换。第四章内容较简单,而且学生在高级语言程序设计中学习过字符串,因此留给学生自学,也可以培养学生的自学能力。第五章数组和广义表一般讲解即可。第6章的二叉树要详细讲解,第7章的几个关于图的算法较难,要结合例子讲解,第8章中的难点是平衡二叉树的调整和B树,要通过例子把算法的思想讲清楚,使学生能实际操作。第9章要把各种排序的思想、特点讲清楚,特别是较难的希尔排序、快速排序、堆排序、基数排序一定要结合实例讲解。

3.2 课时分配

表1 总课时:72;理论授课:58,实验:14

4 课程实践环节

数据结构是与实践紧密结合的课程,学生学习的理论必须经过大量的实践才能更好的掌握,因此必须强化实践教学。数据结构实践分两部分:一部分是随课程进行的实验,另一部分是课程结束后为期一周的课程设计。通过合理、有效地设计上机题目,改进实验考核方式,调动学生的积极性,启发引导学生掌握基础理论并能创新应用,增强学生综合运用有关知识的能力。

实验内容包括六个实验项目,分别为:线性表的基本操作(2学时),栈的基本操作(2学时),队列的基本操作(2学时),二叉树的建立及遍历(2学时),图的遍历的实现(2学时),宿舍管理查询系统(4学时)。其中宿舍管理查询系统实验为三性实验。

课程设计是课程结束后进行的很重要的实践环节,本课程课程设计给出14个题目,这些题目都是综合性的,学生可任选一题,完成后要写出课程设计报告。通过课程设计,使学生进一步理解和掌握所学各种基本知识,培养学生综合运用所学的理论知识和方法独立分析和解决问题的能力;训练学生用系统的观点和软件开发一般规范进行软件开发,使学生具备软件工作者所应具备的科学的工作方法和作风。

学生完成实验后,不仅要求学生提交高质量的规范的实验报告,还要引导学生互相交流,开阔视野。好的实验作业要放到班级公共邮箱里和所有学生共享。

5 课程的建设情况

5.1 课程资源情况

该课程教学文件完备。通过多年的教学,积累了必要的一些辅助教学资料(包括教学参考书、参考课件、声像、影像等),并且使用效果良好。补充的学习资料有:

(1)教学网站:http:///sjjg/

http:///ds/

(2)搜集了大量探讨数据结构理论与算法、介绍学科前沿动态的中、英文学术论文和硕、博论文,对其分类整理后在课程教学网站上提供下载链接,以供学生深入研究、学习;

(3)自编《数据结构实验指导书》;

(4)多媒体电子教案的纸制版和网络版;

(5)数据结构与课程实验指导书的纸制版和网络版;

(6)自编的算法演示器;

(7)Flash课件和Flash算法演示;

(8)图书馆内,国外优秀的经典教材。

5.2 实验实习条件

所有实验在计算机系机房进行,机房现有的实验平台功能齐全,课程中所涉及的实验项目均可在平台上完成。目前课程实验大纲中所列的实验开出率达到100%,实验教学效果良好。

5.3 课程成果

该课程2010年被评为河南省级精品课程,2012河南省级精品资源课程。

6 教学设计

《数据结构》是一门理论与实践相结合的课程。由于理论的抽象性,学生难以建立起数据结构的相应算法概念,容易产生畏惧和茫然的情绪。因此教学中在积极引导学生、启发学生,激发学生学习的积极性。教学以课堂讲授为主,同时借助网络教学平台,拓展课堂讲授的相关知识,便于同学自主学习、巩固课堂所学内容。另外,组织独立习题课,针对学生作业中出现的典型问题进行深入探讨。

在教学中要贯彻“以理论学习为主线,以课程实验、课程设计为补充”的教学思想。

6.1 精心组织教学内容

分析学生的需求和现实,同时紧紧抓住教学目的,参考相关院校的教材和教学计划,取长补短,参考考研大纲、软考大纲,对课程的内容进行严格的筛选,删除一些较深且应用不是很广泛的内容,对于重点的内容要精讲、细讲,而对于有些较简单且与先修课程交叉的内容(如字符串与数组),就粗讲,甚至可以留给学生去自学。这样重点突出,简洁明了。在课程内容的安排上由浅入深,循序渐进。对每种数据结构都按三个层次来组织教学内容,并且把这三个层次的思想贯穿于数据结构教学的各个环节。第一个层次,基本概念、方法,这是最基本的内容,学生必须掌握,在学生很好地掌握了这个层次的内容后,可进入第二个层次,基本概念、知识的简单应用,这一层次是对基本概念、知识加深理解,这个层次学生必须达到。第三个层次就是基本概念、方法的深入应用,把所学的知识、方法串起来灵活运用。要达到这个层次,需经过大量的训练才行。

6.2 实现数据结构课程与其先修和后续课程的无缝衔接

程序设计语言(如C语言)是本课程的一门非常重要的先修课程,数据库原理、编译原理、操作系统是该课程的后续课程,这些课程不能各自为政,而要无缝衔接,教这些课程的老师要互相交流,这样在讲程序设计语言时可以有的放矢的把和数据结构联系紧密的内容预先告知学生,这样学生就会对相关知识印象深刻,到数据结构课中就很容易用的得心应手。在数据结构课中讲到各种后续课程中用到的数据结构时也告诉学生,并且在后续课程中用到相关数据结构时提醒学生这是这种数据结构在本课程中的应用。这样使学生的知识一脉相承,使学生在学习各门课程时把知识融会贯通。

6.3 精讲多练,加强实践环节,培养学生分析问题解决问题的能力

数据结构既有大量的理论又是实践性很强的课程,学生要很好地掌握这门课,必须要有一定的理论知识,又要经过大量的上机实践。因此,针对应用型本科的特点,在教学过程中,即注重理论,又重视实践,加大上机实践的力度。实践由与理论课同时进行的上机实验和理论课讲授完毕后的课程设计两部分组成。对所学的每一部分内容都要要求学生完成相应的实验习题。整个实践过程要结合教学进度与学生的实际情况,制定实践的内容。每部分的实验习题必须精心挑选,和上述三个层次对应,分为基础与验证型实验、设计与综合型实验,开发与创新型实验。既要把基本知识掌握好,又要会灵活运用。基础与验证型实验是基本的、较简单的题目,主要结合课堂理论教学内容展开,学生可以对在课堂上学到的基本算法进行验证;设计与综合型实验是具有挑战性的较难的新颖有趣的题目,让学生充分利用所学的理论知识进行相对较复杂的应用设计,培养学生综合能力;开发与创新型实验培养学生的创新意识,提高综合能力和创新实践能力。

6.4 多样化的教学方法

6.4.1 启发式教学

教师主要起引导的作用,激发学生的学习兴趣,发挥学生的学习积极性,与学生进行互动,鼓励学生对教学内容提出问题,师生共同讨论,提高教学和学习水平。鼓励学生多动脑子进行思考,在学习过程中不拘于以往的解法,对同一个问题可以提出不同的解法,深化对问题的理解。另外还要强调学生自己学会对知识的总结、梳理、推演和挖掘。总结是教学中一个非常重要的环节,不可忽视。通过对所学内容的总结、梳理、推演和挖掘,理清内容的内在联系,使知识条理化、系统化,加强对知识的理解和掌握,培养学生的归纳总结能力和思维创造能力,对所学内容提炼出精华的东西。(下转第260页)

(上接第167页)6.4.2 对比式教学

对同一问题,引导学生从不同的角度去思考,找出多种方法来解决。比如,在解决约瑟夫环问题时,可以采用循环链表作存储结构,或采用线性表的顺序存储结构,也可以采用数组作存储结构。这种对同一问题寻找不同算法实现的教学方式,有效地开阔了学生的思路,同时通过对不同算法的比较,加深了学生对算法的理解和掌握。

6.4.3案例教学

通过实例引入知识点。比如讲最小生成树可以通过城市间建立通信联络网为例引入最小生成树及其求解算法,再比如讲最短路径可以通过去旅游选择最短路径为例引入最短路径及其求解方法。

6.5 把课程与考研、软考、相关竞赛有机的结合起来

数据结构是计算机专业考研和软考的必考科目,在教学过程中有意识地把考研和软考引入教学中,使学生学完本课程后能够从容应对考研和软考中的数据结构题目。组织和鼓励学生参加程序员,高级程序员证书考试,辅导学生参加各种编程竞赛比如ACM大赛。

7 考核方法

要加强平时的学习过程管理,不定时地进行一些随堂的小测试,课堂提问等。考试以学生完成日常作业和实验环节为必要条件,期末考试采用笔试方式。成绩评定由三部分组成:期末考试占总成绩的60%,平时成绩占总成绩的20%,实验占总成绩的20%,综合考核学生该科成绩。

8 结语

《数据结构》对计算机科学与技术专业的学生来说是非常重要的课程,组织好教学,使学生通过该课程的教学,很好地掌握数据结构的相关知识,为今后的学习奠定良好的基础是非常重要的。

【参考文献】

[1]耿国华.数据结构――用C语言描述[M].北京:高等教育出版社,2011.

数据结构范文第2篇

关键词:MOOC;在线教育;DIY;实践教学;PAT

一、引言

随着人类社会进入网络时代,以大规模开放在线课程(MOOC)为代表的基于互联网的在线教育模式正迅速形成对传统教育的冲击。如李晓明在《慕课》一书中所定义:MOOC应该是“主讲教师负责的,通过互联网开放支持大规模人群参与的,以讲课短视频、作业练习、论坛活动、通告邮件、测试考试等要素交织的,有一定时长的教学过程”[1]。虽然其中提到的各个要素看似在传统教育特别是传统远程教育中都有包含,但由于“对参与者学习过程无监督”这一特性,使得MOOC的教学方式与传统方式相比,面临着更大的挑战。本文是两位笔者根据自己在爱课程网“中国大学MOOC”和网易云课堂这两个平台开设MOOC课程一年多时间的亲身实践,总结分析互联网环境下在线教育课程的实施经验,包括:教学内容设计、短视频制作、互动与实践指导等方面的内容。

“数据结构”是计算机科学与技术专业、软件工程专业甚至于其他电气信息类专业的重要专业基础课程。它所讨论的知识内容和提倡的技术方法,无论对进一步学习计算机领域的其他课程,还是对从事大型信息工程的开发,都是重要而必备的基础。“数据结构”课程所应该培养的高级程序设计与算法分析能力不仅是学生进一步深造的潜力体现,也是用人单位选拔优秀毕业生的重要指标。

课程要求学员在掌握数据结构基本概念和基本方法的基础上,能够针对具体求解问题设计合适的数据结构和算法,并具有采用程序设计语言实现的能力。其中,一个重要目的是,帮助学员明白一些经典的数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。针对课程教学目标和在线课程的对象特点和学习特点,我们在MOOC课程设计和实施时,重点考虑:(1)内容如何组织,以满足不同对象的学习需求和碎片化的学习特征;(2)视频制作如何更有吸引力,能突出问题求解思路以及不同方法的特点;(3)教学过程如何实施,特别是如何加强实践能力培养和协作式学习,不断激发学习者的热情和动力。

为了促进学员自己动手编程实践、解决问题,一个功能强大的实践教学平台就是必不可少的支撑。另一方面,由于MOOC的教学实施与考核都是在无监督的状态下进行,目前尚无有效技术手段保证考核结果和证书获得者与课程完成人具有可信的对应关系,所以MOOC的学习结果很难得到用人单位(包括高校与企业)的充分重视。美国的MOOC组织者(如Coursera、edX等)是通过线下有监督的考试来颁发更有参考价值的证书,但其规模受到人力资源(阅卷教师)的限制。一个有监督的、由自动判题系统支持的线上考试将可以部分解决上述问题。本文也将介绍笔者在平台建设方面所做的部分工作。

二、碎片化的教学设计

MOOC与传统教育的一个很大的不同在于,传统教育中学生是被组织在一起学习的,各种教学环节的“有组织性”非常强,形成了强大的外在驱动力。在这种前提下,即使教学方式枯燥呆板,即使学生的内在动力不被激发,也可以在一定程度上用外力“推”着学生们向前走。而且同一教学环境中学生的年龄和基础背景相似,也使得教学内容的组织较容易统一。

而MOOC的学员来自社会各界,具有跨度很大的年龄层、截然不同的基础背景、五花八门的学习目的,在各自内在动因的驱使下,聚集到同一门课程中学习。这种组织方式下形成的内聚力比学校中专业的内聚力弱很多,所以教师必须努力让自己的课程产生足够大的吸引力,“吸”着学员们向前走。而吸引力最主要的基础,就是课程内容的组织。

由于互联网让各种信息的获取变得越来越容易,各种针对人类注意力的心理学研究表明,过多信息消耗了接受者的注意力,导致信息碎片化成为不可避免的趋势。MOOC课程教学设计面临的首要问题就是,如何利用碎片化的信息为学员提供系统化的知识。传统课堂要求的按45~50分钟组织的教学内容,在MOOC中必须被更细致地梳理、切分,成为每个6~10分钟的短小视频――这使得学员可以随时随地充分利用自己业余时间的零星碎片,在注意力最能有效集中的时间区间里进行学习。同时,碎片化的教学内容组织也容易满足不同学习者的学习目标。

例如:在“数据结构”的第一次课上,我们需要讲清楚两个基本概念,即“什么是数据结构”以及“什么是算法”。在传统课堂上,我们大约分别需要花32分钟和23分钟完成讲授,并且最后花20分钟通过讲解一个具体的应用实例来帮助学生更感性地认识理解这两个抽象的概念。而在MOOC上,一段长达32分钟的理论讲授视频足以令绝大多数学员关闭视频窗口,因为他们比传统课堂里趴在教室后排呼呼大睡的学生多了随时拔电源的自由。为了适应学员碎片化的学习习惯,我们必须把这三大块内容进行更细致的切分,如表1所示。

这种碎片化设计的要点是围绕课程的教学目标进行“自顶向下”的内容设计:整个课程需要划分哪些专题(相当于“章”),每个专题下又需要划分哪些主题(相当于“节”),每个主题又是如何引入问题、如何展开、如何通过例子强化以及如何收敛等等。每个主题下具体的内容就可以由一系列相对独立的短视频来实现。

注意到我们强调应该设计6~10分钟的短视频,是因为有不少心理学研究表明,成年人的“倒U型注意力曲线”在峰值附近持续的时间长度大约为6~10分钟[2]。但这并不是说我们必须把一段复杂的、不可能在10分钟内讲清楚的内容硬性压缩成10分钟,或者不惜破坏内容的完整性也要切分。这个“6~10分钟”的规律只是提醒我们,应该知道学员在这样一个时间段附近会出现注意力不集中现象。教师可以通过产生额外的刺激――比如突然变换语调,或者在视频中插入一个提问(“中国大学MOOC”和网易云课堂都提供在视频中插入提问的功能,视频播放会在提问后暂停,学员必须回答了问题后才能继续播放),哪怕是开一句玩笑,达到将学员的注意力拉回到峰值水平的目的。例如表1中列出的10段短视频中就插入了6处提问。

碎片化内容设计的另一个关注点,是为基础不同、学习能力不同的学员提供不同层次的帮助。例如我们在课程中除了有常规的授课内容,还设计了“小白专场”,针对基础比较薄弱的学员,详细讲解部分练习题的C语言程序实现细节。而这一部分又细分为三个步骤,即:问题的理解和算法思路、程序框架的搭建、关键细节的实现。学员在这个逐步细节化的过程中,有可能根据自己的理解能力在任何一个环节恍然大悟,退出视频开始自己动手实践。而这种教学效果却是传统的课堂难以达到的。

三、重实效的朴素制作

MOOC的制作方法多种多样,有豪华的,也有朴素的。根据我们的理解,决定学员去留的关键因素,是课程内容的组织和教师讲授的技巧,至于视频制作的专业技巧、声音和画面的质量等等,则属于锦上添花。不过,从实践情况看,与画面相比,声音的作用更大,因此一个好的话筒是MOOC视频制作的要素。

在个人有限的精力和教学效果之间权衡之下,我们选择了注重实效的DIY朴素制作方案,即采用简单的“居家”制作设备,完全自己动手,甚至没有动用任何助教,就完成了全部138段视频的录制与后期制作。

我们制作视频的主要工具有:具有录制短视频功能的相机(配三脚架和遥控器)、麦克风(配三脚架、调音台)、补光灯、视频编辑软件。事实上,真正重要的工具就是相机、麦克风和视频编辑软件。当室内自然光线充足时,适当调大相机ISO可以基本达到专业补光灯的效果。

由于后期制作是自己动手,所以录制过程可以比较自然,不必强记台词。缺点是后期制作如果精益求精,则需要花费较多时间剪辑。剪辑的要点,并不在于制作出多么炫目的视觉效果,而在于牢牢把握住对学员视线以及思路的引导。

视线引导是刺激听众注意力的一种方法。在传统课堂上,教师可以通过在讲台上移动以及丰富的肢体语言引导学生的视线变化,用教鞭等工具指引学生跟随自己的思路。在MOOC视频中,可以通过人像的动作、课件放映中鼠标箭头的移动以及视频编辑软件提供的高亮、笔画等功能达到同样的效果。至于人像和课件出现的比例、频率到底应该多少为宜,其实并无一定之规,关键点是:尽可能在屏幕上保持变化。切忌让一个充满了文字的、完全静止的画面持续若干秒钟。

思路引导较视觉引导更为重要。我们的课件设计是极简风格的,对所有课件中动画的设计,原则上是对思考过程的展示;而所有无助于此的元素,都不必出现,以节省学员下载课件的时间。例如,在展示一个复杂算法的伪代码时,并不是一次性将全部伪代码放映出来,再逐行讲解其功能――这是计算机执行的过程,并不是人类思考的过程。我们会从整体思路入手,先根据算法流程展示出代码框架,再逐步演示框架内各个模块的细化过程,必要时辅以实例的动画演示。

四、教学过程中的互动与实践

对于习惯于在课堂上与学生频繁互动的教师而言,MOOC在师生互动方面具有明显的弱点。不过,各大平台都提供了多种弥补的方法,如:视频内插入提问、视频间插入测验、学员讨论区等。充分利用这些工具,也可以在一定程度上达到较好的互动效果。

视频内插入提问在第二节已经提到,等价于教师在传统课堂上抛出一个较为简单的问题,期待学生在短时间内给出反馈。这样做的目的并不是考查学生对知识的掌握,而主要是刺激学生的注意力,将可能开始懈怠的思维拉回到主题。MOOC在这方面甚至可能达到比传统课堂更好的效果,因为课堂上总有懈怠的学生根本不理会教师的问题,往往只有少数积极的学生回答;而MOOC中所有在看视频的学员都会被打断,必须进行一些思考才能继续。

视频间插入测验则是有传统课堂无法达到的良好效果。当一个知识点讲解完成,及时的小测验可以非常有效地帮助学生检验自己的听课效果。而在传统课堂中,频繁的测验不仅对教学进度造成负担,而且增加教师课后批改的工作量,结果反馈也不能做到十分及时。MOOC支持在任何一段视频结束后,插入一个小测验,由系统自动判题,即时给出结果。学员通过这样的测验,可以检查自己对前一段视频中关键内容的理解程度,及时发现问题,还可以反复观看学习。

讨论区是课堂的延伸。我们充分利用讨论区功能,在每次课后布置了一些讨论话题,这些话题多为视频讲解内容的深入延伸,供学生课后思考讨论。例如在介绍完平衡二叉树之后,提出“是否可以用左右子树结点数差来衡量二叉树是否平衡”;在介绍了图的两种遍历方法后,要求学生“试比较DFS和BFS的优点和缺点”等。论题一般在一个主题结束后,最好为生生互动留一段时间教师再介入,可以点评学生的回答,1~2周后参考答案。

对于“数据结构”这种实践性比较强的课程而言,还有一个非常重要的环节,就是动手实践。目前各个MOOC平台对于程序设计类课程的实践支持较弱,而遍布各大高校的在线裁判系统(Online Judge,简称“OJ”),其初衷是为参加ACM大学生程序设计竞赛的学生而建立,普遍存在几个问题:

(1)题目类型单一。一般OJ只支持竞赛类型的编程题。

(2)题目难度偏大。因为面向的用户是各校顶尖的参赛选手,所以题目多为竞赛型,即涉及知识点的综合性很强,但缺乏针对单一知识点的基础训练题目,也无显性的知识点关联。

(3)判题过程为黑盒测试,很难强制学生必须使用某种指定的数据结构解决问题。例如最常见的问题是,企图考察链表处理基本功的题目,基本上都可以用数组解决。

(4)判题方式严苛。一般为0/1式,即通过全部测试用例可得到满分,否则零分。这种方式对初学者打击较大,并且从教学的角度考虑,区分度也较差。

(5)教学管理功能欠缺。OJ的风格是直接面向自我训练的学生,并不考虑教师的参与,因此绝大多数OJ不具有教学组织功能。

针对上述问题,我们联合网易公司开发了“程序设计类实验辅助教学平台”(英文名“Programming Teaching Assistant”,简称“PTA”,网址:http:///),作为基础程序设计类课程、数据结构、算法分析等课程的实验平台,免费向全国高校教师开放。目前平台中有判断题、选择题、程序填空题、函数题、编程题共千余道,并具有以下特点:

(1)面向教师,提供出题、布置作业/考试、成绩一键导出等基本教学组织功能。

(2)题目具有灵活的课程知识点关联,方便教师根据教学进度布置针对单一知识点的强化训练,也可以关联多个知识点设计综合性题目。

(3)题目有难度标记,方便教师组织不同强度层次的训练。

(4)函数题、编程题按测试用例评分,具有良好的区分度。

(5)测试用例提供“要点提示”,当教师注意到大多数学生都不能正确通过某些测试用例时,可以开放针对该用例的提示,对保持初学者的信心会有帮助。

这里特别值得一提的是“函数题”的设计。函数题要求学生严格按照题目给定的接口描述,完成具有指定功能的函数代码。这类题目的优点是训练重点突出,可以让学生关注复杂算法的核心流程,而不必纠结于输入输出的格式处理或是以前已经训练过的简单函数的重复实现。例如要实现“最小生成树”的Kruskal算法,我们需要用到最小堆和并查集。这两个结构都已经在学习“树”的过程中训练过,且编程量较大,但只是Kruskal算法的辅助工具。如果不想让学生在辅助工具的实现上花费太多时间,教师就可以将这个训练出成函数题的形式,由教师准备好最小堆和并查集的功能函数,学生只要在建立最小生成树的过程中调用即可。另一方面,函数题由教师规定接口,就使得指定数据结构成为可能。例如要训练处理链表的能力,只要规定链表结点的结构,并规定函数传入的参数为链表头指针即可。

五、课程实施数据及思考

迄今我们已经先后在爱课程网“中国大学MOOC”和网易云课堂两个平台上分别开设了一个完整学期的课程,表2列出了部分统计数据。

总体上看,如大多数MOOC课程一样,对证书有兴趣的学生占比很低,这与我们在讨论区与学员互动得到的印象是基本一致的。部分学员表示,注册课程只为看其中某一章节,作为课堂学习的补充;另外也有学员表示自己的目的是应对IT业求职的笔试和面试等等。一个重要的原因,可能是MOOC的教学实施与考核都是在无监督的状态下进行的,所以证书尚未得到用人单位的充分重视,考取证书的必要性不大。

我们自2011年8月起创办了计算机程序设计能力考试(Programming Ability Test,简称PAT),采用分级式在线考试及自动评测方法,客观地考核考生的算法设计与程序设计实现能力。目前在全国18个省/直辖市设置了考点,有包括谷歌、微软等“世界500强”企业以及百度、网易、阿里、腾讯等96家知名企业签署合作联盟协议,接受将PAT测试成绩作为衡量应聘人员程序设计能力的标准(划定分数线、提供介绍信),受到考生和企业的欢迎。我们也将达到PAT甲级考试浙江大学计算机专业学生平均分的成绩作为MOOC课程优秀证书的标准,目前有2位学员确认得到了优秀证书。

另一方面,从开课阶段和结课阶段的参与人数比较来看,也体现了MOOC学员的特点:大多数人在没有足够外力驱使的情况下,非常容易放弃。在此我们不断检讨自己的教学方法,还有很大的提升空间。两次开课之间,我们所做的比较重要的调整主要是两方面:一是将课时从10周延长到12周;二是补充了部分程序实现的源代码。做这样的调整,主要是根据第一次开课得到的反馈,发现学员的学习能力差异巨大,我们需要补充更多细节帮助不同层次的人跟上进度。从数据比较来看,第二次开课虽然选课总人数下降,但坚持的人数百分比略有上升。这使得我们继续增加了“小白专场”系列以及讨论题参考答案系列,以加大对基础薄弱学员的帮助力度。笔者著此文时,本课程正在“中国大学MOOC”平台上再次开课,并且已经吸引了2.4万余名学员注册学习。后期努力的效果尚有待检验。

参考文献:

[1] 李晓明. 慕课[M]. 北京:高等教育出版社,2015.

数据结构范文第3篇

关键词:数据结构;实践教学;指针;结构体;C语言

中图分类号:TP311.12

1 指针和结构体的概念

在程序中定义一个变量,如int x;在编译时系统就根据定义的变量类型,给这个变量分配相应的内存单元。内存中每个字节都有一个编号,称为“地址”,在地址所标识的内存单元中存放数据。在程序中,一般通过变量名对内存单元进行存取操作,称为“直接访问”,如x=7;printf(“%d”,x);假设定义一个变量p,用于存放整型变量x的地址,int*p=&x;则变量p称为“指针变量”,我们称指针p指向x。通过指针p访问x,称为“间接访问”,如*p。

因此定义指针变量的格式是:基类型 *指针变量名;

引用指针变量的格式是:*指针变量名。

结构体将不同类型的数据组合成一个有机的整体,定义一个新的数据类型,格式:typedef struct

{成员列表}结构体名;

结构体变量的引用格式:结构体变量名.成员名。

2 线性结构中指针和结构体的使用

线性结构中数据元素之间是1:1的线性关系,线性表是最基本的线性结构,有顺序存储结构和链式存储结构两种存储方法。顺序存储结构是在内存中用一段连续的存储单元来依次存储线性表的数据元素,用元素在机内的物理位置相邻表示逻辑相邻关系,常借助于数组来表示数据存储区域。因此顺序表类型定义如下:

#define MaxSize 100 // MaxSize是数组的容量,便于后期进行插入运算

typedef char DataType; //程序中的DataType设定为char型,便于统一修改

typedef struct{

DataType data[MaxSize];//data数组用于存放数据元素

int Last;//整型变量last存放当前顺序表中最后一个数据元素的下标值

}SeqList;//SeqList为顺序表的数据类型

SeqList*L;//定义一个指针变量L

L=new SeqList;//new用来申请顺序表的存储空间,L指向此顺序表

顺序表表长:L->Last+1

顺序表中的数据元素:L->data[0]~L->data[L->Last]

比如顺序表的插入运算Insert_SeqList(SeqList *L,int i,DataType x)基本语句如下:

for(j=L->last;j>=i-1;j--)

L->data[j+1]=L->data[j];//从最后一个元素到第i个元素逐一后移

L->data[i-1]=x; //在i位置处插入元素x

L->last++; //表长加1

链式存储结构是用一组任意的存储单元存放线性表的数据元素,逻辑次序和物理次序不一定相同,元素之间的逻辑关系用指针表示。单链表的类型定义如下:

typedef struct Node{

DataType data;//数据域,存储数据元素

struct Node * next;//指针域,存储后继结点的地址

}Lnode,*LinkList;

LNode*p;//定义一个LNode类型的指针变量p

p->data //p所指结点的数据域

p->next //p所指结点的指针域,即后继结点的存储地址

LinkList:指向LNode类型的指针变量,通常用于定义头指针的数据类型,如

LinkList head; //定义了一个头指针head

比如在p所指向的数据元素之后插入新结点,基本语句为:

LNode*s;//定义一个LNode类型的指针变量s

s=new LNode;//申请结点空间

s->data=x;

s->next=p->next;

p->next=s;//注意:两个语句的操作顺序不能交换。

3 树形结构中指针和结构体的使用

树形结构中数据元素之间是一对多的关系,以二叉树为例,一般采用链式存储结构,便于进行插入、删除运算。二叉树类型定义如下:

typedef struct node{

DataType data; //数据域

struct node *lchild,*rchild; //左右指针域

}BiTNode;

typedef BiTNode *BiTree; //指向二叉树结点的指针类型

如构造二叉树算法如下:

void CreateBiTree( BiTree*t) //构造二叉链表

{ char ch;

scanf("\n%c",&ch);

if(ch=='0') *t=NULL; //读入0时,将相应结点置空

else{*t=new BiTNode; //申请结点空间

(*t)->data=ch;

CreateBiTree(&(*t)->lchild); //构造二叉树的左子树

CreateBiTree(&(*t)->rchild); //构造二叉树的右子树

} }

4 图形结构中指针和结构体的使用

图形结构中数据元素之间是多对多的关系,一般采用邻接矩阵进行存储,存储顶点和边(或者弧)的信息。以邻接矩阵存储图的类型定义:

typedef struct{

int visited[MaxV]; //顶点表

int edges[MaxV][MaxV]; //边表

int vertexN,edgeN; //顶点数和边数

}Graph;

比如图的深度优先遍历算法如下:

void DFS (Graph*G,int v){

int w;

G->visited[v]=1;

for(w=0;wvertexN;w++){

if(G->edges[v][w] && !G->visited[w]) { DFS(G, w); }

} }

5 结束语

指针和结构体在数据结构中频繁使用,希望通过本文的讲解,帮助学生理解结构体定义数据类型的方法,掌握利用指针完成操作的方法,学好《数据结构》这门课程,为后续专业课奠定良好的基础。

参考文献:

[1]谭浩强.C程序设计(第二版)[M].北京:清华大学出版社,2002.

[2]刘振鹏.数据结构(第六版)[M].北京:中国铁道出版社,2010.

[3]杨丽萍.数据结构中指针的应用及分析[J].计算机时代,2012(02).

[4]孔兵.数据结构实验中指针相关问题[J].教育教学论坛,2014(01).

作者简介:崔敏(1981.06-),女,山东济南人,助教,教师,本科,研究方向:计算机软件技术及应用。

数据结构范文第4篇

关键词:链式存储结构;数据结构;存储结构;教学方法

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)14-0110-02

在数据结构中,无论是栈、队列、数组等线性结构还是广义表、树和图等非线性结构都可以使用链式存储结构来实现数据元素和关系的存储,如何让学生掌握各种数据结构的链式表示和实现,并能在实际应用中灵活使用是数据结构课程教学中的重点和难点。下面分别从概念、特点、定义和操作四个方面来探讨讲授链式存储结构的方法,以供教学参考。

1链式存储结构的概念

掌握链式存储结构的概念是学习各种不同数据结构的链式表示和实现的前提。因此,教学中首先要让学生明白什么是链式存储结构。相对于可使用数组实现的顺序存储结构来说,学生在学习数据结构之前不仅对链式存储结构的概念是陌生的,而且大多对实现链式结构的基础知识如结构体、指针等也不熟练。因此,在教学中深入浅出地将链式存储结构概念讲解清楚很重要。讲授时可按数据的结构、存储结构再到链式存储结构的顺序从外到内逐层深入地方式讲解,以帮助学生理解概念。

1.1结构

结构指数据元素之间的一种或多种关系,关系可能是线性的,也可能是非线性的。常见的基本结构分为四类,分别是集合、线性表、树和图。当然,通常所说的关系是指数据元素之间的逻辑关系即数据的逻辑结构。简单地理解,结构就是关系。

1.2存储结构

为了在计算机中实现操作,除了分析数据元素之间的关系即得到数据的逻辑结构外,还要考虑它们在计算机中如何存储。数据元素和关系在计算机中的表示称为数据的存储结构,也称为物理结构。简单地理解,存储结构就是数据在计算机中的存储方式。

1.3链式存储结构

链式存储结构是通过记录元素的位置来表示元素与元素之间逻辑关系的一种存储结构。比如,在线性结构中,若两个逻辑上相邻的数据元素在实际存储时不相邻,则可以通过将后一个元素所在的位置记录到前一个元素来实现两个数据元素之间的前后关系。若是非线性结构,同样可以通过记录位置的方式实现两个元素之间的非线性关系,比如双亲和孩子的关系、邻接点关系等。其中,位置是存储元素的地址即指针。在静态链表中,位置是数组的下标。

2链式存储结构的特点

数据结构和算法是计算机科学和工程的基础,任何一个算法的设计取决于数据的逻辑结构,而算法的实现依赖于数据的存储结构。因此,只有掌握了数据存储结构的特点,才能根据实际情况使用合适地存储结构来实现算法。作为一种非顺序存储结构,链式结构有着其自身的特点,掌握这些特点是灵活使用链式存储结构并充分发挥其优点的基础。授课时,可以通过比喻和类比等方式帮助学生掌握其优缺点。

2.1什么是链

链式存储结构的特点体现在“链”字上。所谓“链”,可以想象为用一根绳将原本有一定关系的数据元素串起来,通过“链”可以访问与指定数据元素有关系的其它元素。举个线性结构的例子来说明如何链接,比如,同学A的后面是同学B,即A是B前驱或者说B是A的后继。排座位时,为了能体现出两者的前后关系,若A坐在某个位置,则可以将B直接安排在A的后面,这样A直接往后就可以找到后面的同学B了。当然,也可以选择另一种方式,即B不直接坐在A的后面,而是坐在任何一个空位上,只要将他所坐的位置告诉A,这样A同样可以找到B了。这个例子里,两个数据元素之间的先后关系不是在存储时直接体现出来而是通过记录位置完成的。可以想象,当多个数据元素都按这种方式存储时就类似用一个链串起了所有的元素,用这种方式存储的线性表就称为链表。当然,“链”不仅可以表示线性关系,还可以将“链”进行扩展,根据需要实现如树、图等其它更复杂的关系的表示。

2.2优点

链式存储结构借助地址来表示数据元素之间的关系,数据元素在存储时是按非顺序的方式存储的,因此弥补了顺序存储结构的不足。为使学生更清楚地了解链式存储结构的优点,授课时可采用与顺序存储结构相比较的方式从以下两个方面来讲解。第一,链式存储结构存储元素时所需存储单元是动态申请的,不必担心操作过程中随数据量变化而引起的存储空间不足或浪费问题。在顺序存储结构中,存储空间由一组连续的存储单元组成,因此,存储容量受限。然而,链式存储结构采用需要存储一个元素就动态申请一个存储单元的方式,存储单元可以是连续的,也可以是非连续的。第二,在插入和删除操作时不需要移动数据元素,并且插入、删除操作灵活。在链式存储结构中,由于数据元素之间的关系是借助地址来表示的,因此在进行插入、删除操作时,只需要改变地址就可以实现数据元素之间关系的变化。相对于顺序存储结构来说,不需要将待插人的数据元素位置空出,也不需要将删除的数据元素位置补上。

2.3缺点

除了上述优点之外,链式存储结构也存在一些不足之处。教学中,对链式存储结构缺点的讲解,也可以采用与顺序存储结构相比较的方式从两个方面进行。第一,存储密度低。为了能实现通过地址来表示数据元素之间的关系,需要将数据元素进行封装。以线性结构中的单链表为例,除了存储数据元素本身外,还要存储其后一个元素的地址。因此,应将数据元素封装成一个结点,其中结点包含两个域,一个是数据域,用来存储数据元素值;另一个是指针域,用来存储后一个元素的地址。与顺序存储结构相比,存储一个数据元素的代价更大,不仅需要相应大小的空间来存储数据元素,而且还需要有额外的空间来存储地址。因此,链式存储结构的存储密度相对较低。第二,由于链式存储结构不是按顺序方式存储的,因此不能随机存取,即数据元素必须通过“链”来访问。比如,单链表只有一个链,只能从第一个结点开始通过指针依次访问链表中的每一个结点,当查找某个数据元素时,即使知道该元素在表中的位置,也不能像数组那样随机访问,只能从第一个结点开始查找并计数,当计数到与所给位置的值相同时才能找到该元素。当然,“链”的方式不同,对应的访问方式也不同。比如,双向链表有两个链,可以通过后继链访问表中每一个元素,同时还可以通过前驱链以逆序的方式依次访问每个元素。

3链式存储结构的定义

在数据结构中,常见的链式存储结构有单链表、循环链表、双向链表、十字链表、二叉链表和邻接表等,不同的链式存储结构可用来满足不同的数据结构的表示和实现。然而,无论哪一种数据结构,若要使用链式存储结构,首先要完成它在计算机中的表示,即该链式存储结构所需的结构体类型定义。

通常,链式存储结构的结构体类型包括两部分:一是为存储数据元素而封装成结点的结点类型,二是描述该链式结构的结构类型。比如,在单链表中,为了实现将后一个数据元素的地址记录到前一个数据元素中,需要将数据元素封装成一个结点,这个结点存储数据元素的值和其后继元素所在的地址。因此,自定义一个结构体类型即结点类型struct LNode,它包含两个域,分别为数据域data和指向下一个结点的指针next。设数据元素类型为ElemType,则结点类型定义用C语言描述如下:

这里的指针next在定义时采用了递归定义,由于指针指向的是结点,因此定义为结点类型structLNode。另外,当所有结点连接成一个链表后,这个链表就构成了单链表,单链表也需要通过定义来描述其作为一个线性表所具有的特征,比如第一个数据元素的地址、数据元素个数等。显然,若有一个指针L指向链表的第一个结点(头结点或首元结点),则通过此指针就可以找到整个链表,类似于数组的首地址,这个指向链表的指针L称为头指针,头指针指向的是结点,因此定义为struct LNode类型。它的类型定义如下:

struct LNode*L;

显然,对于一个单链表来说,只要有了头指针就可以找到链表并访问所有元素。因此对整个链表而言,定义一个头指针即可,其它属性如数据元素个数可以通过计数操作来实现。学生在初始学习时很容易在定义指针类型上犯错,不清楚指针究竟该定义成什么类型。其实,指针定义成什么类型完全取决于指针指向的对象类型。比如,单链表中指针next的类型是结点类型structLNode而不是数据元素类型ElemType,因为指针指向的是将数据元素封装成包含数据域和指针域的结点而不是一个数据元素。

4链式存储结构的操作

当使用链式存储结构时,常常需要实现创建、插入、删除、查找等操作。但是,无论哪种链式存储结构,其多数操作的实现主要还是单链表插入、删除操作的延伸和扩展。因此只要熟练掌握链表的插入和删除,就能实现其它更为复杂的操作。举例说明,设q指向链表中的结点A,p指向待插入的结点B。若要将B插入到A之后,执行pnext=qnext和qnext=p两条语句即可。为了保证能正确地完成元素的插入,实现插人语句时需满足“先连上,后断开”的原则,即先使用pnext=qnext将待插入的结点B连到链表中(结点A的后面),然后再执行qnext=p,将A的后继链从链表中断开并连到B上。这两条语句不能颠倒,若将两条语句的顺序颠倒,即先将A的指针指向B,那么A后继链就断掉了,B就无法再连接到链表中。因此,插人操作中需要按“先连上,再断开”的顺序进行,只要记住了这个原则就可避免实现插入时出错。

当实现链式存储结构的删除操作时,执行语句也很简单。设p指向链表中的结点A,若要删除A后面的结点B,执行pnext=pnextnext即可。但是,际操作中,往往还需要将删除结点的元素值带回,因此多引入一个指针q,让q先指向待删除的结点B,即执行q=pnext,然后再执行pnext=qnext,将B从链表中删除。这样,即使B已经从链表中删除,但是结点B还是由q指向,因为B的地址存在q中,此时只要在释放q之前把qdata赋值给某个变量就可以通过该变量继续使用删除的数据元素。因此,在删除操作中,由被删除的数据元素值是否还需要使用来决定删除语句。如果不需要,执行pnext=pnextnext即可。但是,若还需要使用被删除的元素值,则多引入一个辅助的指针q,同时执行q=pnext和pnext=qnext两条语句。

相对单链表来说,其它的链式存储结构可能在指针域或数据域扩充后有更为复杂的操作。然而,只要将最基本的单链表的插入和删除操作掌握好,就可以在实现其它链式存储结构操作时轻松应对。

5结束语

数据结构范文第5篇

关键词关键词:数据结构;算法;程序设计

中图分类号:TP3-0文献标识码:A文章编号文章编号:16727800(2013)011002202

0引言

《数据结构》不仅是计算机各专业的一门重要的专业基础课,而且是其它理工专业的热门选修课,在整个课程体系中处于承上启下的核心地位。数据结构这门课程旨在介绍各种重要的数据结构及有关算法,使学生对数据结构有全面的认识并能熟练运用于程序设计,为今后从事科研和开发打下良好的基础。这门课要求学生掌握数据结构的概念及有关算法,如线性表、数组、树、图、排序、查找、文件等,并能运用这些常用的算法去解决一些实际问题,为其它专业课提供程序设计基础。

通过《数据结构》的学习,使学生了解数据对象的特性,学会数据组织的方法和把现实世界中的问题在计算机内部表示的方法,以培养学生良好的程序设计技能,并初步掌握算法的时间和空间复杂度的分析技巧,以便在实际的工作中,能根据工作中的数据对象特性,选择适当的数据结构和存储结构以及相应的算法。同时使学生了解本课程及内容在计算机科学中的应用和地位,为编译原理、操作系统、数据库原理等后续专业课的学习打下坚实的理论基础和实践基础。

1《数据结构》难学原因

很多同学都觉得学好《数据结构》很难,以笔者的经验分析原因如下:

(1)大多数学校《数据结构》课程是安排在C语言程序设计之后,而C语言虽然相对而言是比较简单的计算机语言,但作为一门入门语言,能够学好的同学本身就不多,学精通的就更少了。特别是结构体、指针以及函数的应用,而《数据结构》中都是用的结构体数组、指针,而且都是以函数形式出现的。对于抽象的数据存储结构、消化算法,将算法转化为C语言函数,并要编写出运行该函数的主程序,这无疑是摆在学生面前的第一道难关。

如果C语言的基础没打牢固,学习数据结构当然就会觉得很难。

(2)《数据结构》中的算法较多,在数据结构的教学中,很多学生反映算法多,而且其中的部分算法非常不容易理解。对于一个算法,我们首先要了解它的思想,然后分析它的概要,接下来再考虑细节,然后读代码,要花很长时间才能彻底搞清楚一个算法。总之,学生要多下功夫,往往这个算法刚理解得差不多了,又来了下一个算法。比如讲到图这种数据结构时,图的深度遍历算法、图的广度遍历算法、生成树算法接踵而来,学生要学好,只有刻苦学习。

(3)学生掌握了算法,还要将算法转化为程序代码,再写出主函数到调试运行,需要很扎实的程序设计功底,这要求学生需掌握好某种程序设计语言(如C语言)才能做得到。因为实践中的问题往往比平时的习题要复杂得多。实践使学生所学的书本知识“活”起来,起到深化理解和灵活掌握教学内容的目的。由于上述几点原因,致使学生学习《数据结构》的难度变大。

2学好《数据结构》方法

《数据结构》是计算机课程中的一门专业基础课,但它又有着不同于其它一些基础课的特点,在于它有很强的综合性,不仅仅涉及计算机软件研究,包括“操作系统”、“编译原理”等,还与计算机硬件有着相当大的关系,从编码理论到数据存储都离不开数据结构。因此可以说,《数据结构》是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。但是由于课程内容繁多,许多内容有着相当的难度。所以学好它并不是一件很容易的事情。那么,如何才能学好《数据结构》呢?

(1)立足课本。学好课本上的理论知识。《数据结构》不是一种计算机语言,不会介绍新的关键词,而是通过学习可以高效地组织数据,设计出良好的算法。学习这门课,要熟悉对算法思想的一些描述手段,包括文字描述、图形描述和计算机语言描述等。因此,计算机语言基础是必须的,因为它提供了一种重要的算法思想描述手段——机器可识别的语言描述。

(2)抽象问题具体化 。《数据结构》的一大特点是比较抽象,因此学生较难理解,所以要想办法把抽象的问题具体化,一旦问题具体化了,学生理解起来就相对容易。例如本课程一开始就介绍了4种基本的逻辑结构:①集合结构:实体间除了“属于同一个集合”的关系外,再没有其它的关系;②线性结构:实体间除了“属于同一个集合”外,还有一对一的关系;③树型结构:实体间有一对多的关系;④图型结构:实体间存在多对多的关系。这4种抽象的逻辑结构形式是人们通过分析研究大量的实际问题而抽象出来的数据结构特性,很多同学很难理解,因此,可以先从实例开始讨论用计算机解决具体问题的各个步骤:①提取与此问题相关的数据信息并分析数据特性;②把该问题中的各种数据按某种方式存储在计算机中;③对数据进行相应操作以便得到想要的结果;④对各种存储形式和操作方法进行对比分析。然后再讨论另一个相似问题的求解步骤,并找出这两个问题具有的共同数据特性,让学生明白以上问题因为有着相同的数据特性,所以对数据处理的方法也相似。以此让学生明白集合结构、线性结构、树型结构和图型结构是根据现实世界中实体之间关系的不同特性归纳出来的数据结构特性。

(3)加强练习。在学习这门课程的过程中,要多加练习,以便学生能消化课堂上学习的知识,也能加强学生对所学知识的理解以及应用,并能够触类旁通,举一反三。

(4)注重实践。《数据结构》是一门理论与实践相结合的课程,如果只注重理论,学生容易造成“眼高手低”的情况,理论知识学的很扎实,但实际动手能力很差,不符合我们的培养要求;反过来,如果只注重实践,又会造成只见“点”不见“面”的情况,造成系统解决问题的能力差。实践有两个作用:①验证算法是否正确。比如,在设计一个新的数据结构时,我们脑中想到的设计算法并不一定是完美的,且往往是不完善的,甚至可能是错误的。“实践是检查真理的唯一标准”,我们通过程序来验证算法的正确性;②实践可培养我们完整、彻底解决问题的能力。 我们在思考时,只是简单、粗略地解决了一个问题,而很多细节问题并没有考虑到。而动手实践过程中,不得不考虑各种细节问题,不然,程序编译通不过,或者编译通过了,但没有达到预期的结果。因此在学习这门课的过程中,要采用实践与理论学习紧密结合的方式,通过上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,深刻理解、牢固掌握所用到的一些技术。实践是对学生全面综合素质进行训练的一种方法,是课堂教学的一种延伸。每个问题的正确求解,都要通过分析问题、建立模型、设计算法、编制程序、调试优化等步骤。通过实践后,可以提高对《数据结构》课程内容的深入理解,同时也能使学生更有成就感,从而更加积极地学习这门课程。

(5)注重总结。在《数据结构》的内容中,线性结构、树型结构、图型结构都遵循首先是逻辑结构、其次是存储结构、接下来是基本操作的实现这一原则;而且各种数据结构在存储时,均有两种方法:顺序存储和链式存储。顺序存储是以数据元素在存储空间位置间的某种关系来表示逻辑上的关系。如以位置相邻表示线性表中数据元素之间的前驱和后继的关系,一般用数组来存储。链式存储则不再要求数据元素在存储空间的位置之间保持某种关系,而是在存储实体属性值的同时存储一个或若干个指针指向其有关系的实体存储单元的首地址,一般用链表实现。顺序存储时插入和删除操作因为要大量移动数据元素(末尾除外),所以效率不高,链式存储则不需移动;如果按序号查找,顺序存储则可直接找到所需数据元素,而链式存储则效率不高。通过这些共性化问题可以理清思路,帮助我们理解本课程,同时针对这几种结构的不同特点,再强调它们各自在逻辑结构、存储结构和基本操作上的个性化,加深理解。所以,在学习这门课程的过程中,应该不断吸收、总结、归纳。

3结语

要学好《数据结构》这门课程,要多学、多练、多实践。同时,学习《数据结构》,能加强对某门计算机语言(如C语言)的理解和掌握;而对计算机语言的理解,又能促进《数据结构》的学习,两者相辅相成,互相促进。

参考文献参考文献:

\[1\]耿国华.数据结构:用C语言描述\[M\].北京:高等教育出版社,2011.

\[2\]薛超英.数据结构:用Pascal语言、C++语言对照描述算法\[M\].武汉:华中科技大学出版社,2002.

数据结构范文第6篇

关键词:PLC编程 数据结构 指针 应用

中图分类号:TP301 文献标识码:A 文章编号:1007-9416(2013)04-0044-01

PLC编程是可编程逻辑控制器的简称,20世纪80年代被普遍应用在电子。钢铁等工业控制系统中。目前,PLC编程已经成为衡量企业现代化水平的一个重要标志。随着PLC编程在工业领域的普遍应用,PLC编程优劣已经具有直接影响工业设备工作情况和生产线的生产水平。采用数据结构和指针控制PLC编程,可以有效解决传统PLC编程存在的诸多问题。

1 数据结构和指针概述

数据结构是计算机存储、组织形式的一种方式,它是指相互之间存在一种或者多种特定关系的数据元素的集合,它一般与高校检索算法和索引技术相关。它的研究对象包括数据逻辑结构、数据物理结构和数据结构运算三种,不同的数据结构适用于不同种类的应用,在采用数据结构进行PLC编程时,注意数据结构的选择。在人们的日常生活中,指针是仪器或者钟表上的一个用来测量数据的装置。但是,在信息工程中指针的用途是指示内存地址的计算机语言的变量、中央处理器中寄存器。PLC编程中所采用的指针是信息工程中的指针,而不是人们日常生活中的指针。在计算机语言中,通过内存地址可以找到用户用户所需的变量单位,也就是说内存地址指向该变量单位,根据地址的作用人们形象化的把地址称为指针。因此,指针具有准确寻找以它为地址的内存单元。

2 数据结构和指针在PLC编程中的应用

2.1 数据结构和指针在PLC程序中的控制过程

在运用数据结构和指针进行PLC编程时,需要专门为称重过程、传输过程分别开发DXa、DXc两个数据块。其中DXa存放在计算机下达某种指令的同一时刻需要下料的料仓数据块地址Mi中,DXc数据块存放在重斗数据块地址Wi中。在PLC编程过程中,计算机将指令存放在数据块DXa中,然后数据块Dxa将指针I存放在数据字AO中,指针置为I=i+1,然后依次下存数据字A1-Ai。计算机将启动指令存放在数据块DXc中,在其数据字CO中存放指针I,在数据字C1中存放前允许下料料仓中Ai的内容,在C1下一数据字C2中存放当前设备是否动作标记。新一轮控制结束后,PLC控制程序将自动在称重过程、传输过程分别开发DXa、DXc两个数据块中存放指针并将数据字AO和数据字CO设置为1,自动将上一程序A0-Ai、C0- C2中的存放的内容清零,进入下一轮程序运作。

2.2 数据结构和指针控制与传统逻辑控制的比较

传统的逻辑控制PLC编程的控制原理是通过计算机“与、或、非”等逻辑指令的组后进行PLC程序控制,这种程序结构简单而且达不到程序异常时的保护要求,控制PLC程序时突出体现的是设备之间连锁的逻辑关系,只满足程序的基本要求,适用范围仅限于PLC手动控制时的PLC编程。由于逻辑控制PLC编程是通过采集设备提供的外部信号作为逻辑程序判断的依据,这个特点要求调机人员、维修人员和PLC编程人员熟悉逻辑程序中的各种逻辑关系,在程序出现故障时可以通过逻辑结果分析出故障的原因和故障发生的位置,针对故障原因和故障点进行相应处理保证PLC控制程序正常进行。这种逻辑控制比较麻烦且不够精确,数据结构和指针控制PLC程序的原理是通过指针使数据在数据结构之间自动进行传递执行控制,它的结构程序复杂,能很好的保护异常情况下的PLC程序,控制效果精确无误,适用于各行各业由计算机控制的PLC编程。一个程序运行完后,不需要维护人员的特别维护,省去了大量繁琐的工作。在PLC编程中采用数据结构和指针,不仅提高了工业设备使用率,而且减少设备故障的发生,控制效果精确无误,进一步提高了PLC程序的自动化控制。

2.3 采用数据结构和指针的PLC编程实例分析

以电子企业生产组装零件的PLC编程为例,编程人员采用数据结构和指针设计好生产组装零件的编程后,将其植入计算机控制的CNC中。当CNC调机人员打好生产组装零件夹具,将夹具安装完毕,便可根据相关要求调机。CNC操作工给CNC一个指令,这个指令会被自动存放进数据块Dxa,数据块接受到来自计算机的指令后自动将指针存放在Dxa中的数据字A0中,依次下存,在第i个数据字指针存放完毕CNC进入启动阶段,计算机会自动给数据块DXc一个启动指令,这个启动指令被自动存放在数据块DXc中,CNC中的PLC程序会按照数据字C0指针的内容中取出相应的Ai存入C1中,同时C1中的内容即将启动CNC设备,同时将C2中的状态设置为1表示CNC设备正在工作中,当一个生产组装零件制作出来后,CNC设备在PLC程序的控制下自动停止并且PLC程序自动将上一个程序中的数据和指针清零,指到下一个计算机指令给出才能开始下一个生产组装零件的生产。

3 结语

随着PLC编程应用的普及,PLC编程人员需具备发现传统PLC编程中存在的问题,关注行业流行的PLC编程先进技术,利用这些先进技术解决PLC编程中存在的诸多问题。目前,数据结构和指针控制PLC编程是比较先进的技术,可以解决传统PLC编程中存在的问题。文章结合数据结构和指针的特点,阐述了其在PLC编程中控制程序的过程并提出实例分析。

参考文献

数据结构范文第7篇

关键词:数据结构;教学模式;课堂教学;创新

数据结构课程是计算机科学与技术专业的一门专业基础课,其课程内容与计算机科学与技术专业的其他课程有着密切的关系,无论是编译原理还是操作系统,都涉及到数据元素在存储器中的分配问题,因此数据结构是计算机科学与技术专业的一门核心课程。该课程的特点是知识点多,概念之间联系紧密,算法抽象难懂,要求学生具有较强的逻辑思维能力,给学生学习带来一定困难,使用传统的教学模式,教学效果很不理想[1]。为改善这种教学状况,我们经过多年不断的探索,结合最后化教学模式的优点并分析我校具体情况,针对数据结构课程的教学模式进行一系列改革,在实践教学中取得了良好的效果。

1现代教学模式

教学模式是教学基础理论的具体化,也是教学具体经验的概括化。目前,国内外有影响的现代教学模式主要有[2]:

1) 掌握学习模式。强调个别化教学,利用及时反馈和强化作为控制教学的有效手段,而编写得当的习题是获得反馈的重要途径。该模式过分强调了教师的决定作用,教师在学生的学习中起着决定性的作用,教师决定了学生学习的目标、策略,尽管这是必须的,但也造成学生思维的盲从性和惰性。因此在目前素质教育这一教学目标之下,掌握学习模式存在明显的欠缺。

2) 发现学习模式。首先提出问题,带着问题观察具体事实,然后再上升到一般的概念。该模式给予学生较大的学习自和实际锻炼的机会,通过学生独立学习、思考去发现问题和解决问题,有利于培养学生的学习能力并发挥创造性。然而,在目前情况下,高校教育多以大班集中授课为主,从时间和空间角度考虑,该模式并不适用于数据结构课程的教学。

3) 范例教学模式。教师用特例具体直观地阐明“个体”的具体特征;根据“个体”范例的知识特点推论整个“类别”事物的特征,使对“个体”的认识上升为对“类别”的认识,从而掌握其规律和范畴。范例教学模式不应简单地理解为案例教学,它是以获得类知识、并最终认知深层次因果为目的的教学模式,目前在各类理论性较强课程的教学中已取得一定成效,例如历史课。数据结构课程旨在引导学生如何利用所学原理解决实际问题,知识点多、操作性强,所以总体上并不适用范例教学模式。

4) 最优化教学模式。一个好的最优化教学方案的形成的基本过程是:①分析教学任务与教学目的;②分析学生学习情况与教师自我分析;③学时分析;④选择已知条件下最佳教学任务的综合性手段与方案;⑤对教学质量进行评价。运用该模式进行数据结构课程的实际教学,从院系自身情况出发,充分考虑相关环节,制定相应的教学方案,思路清晰,针对性强。同时,在第4环节“选择已知条件下最佳教学任务的综合性手段与方案”时,可以借鉴整合其他教学模式的优点,做到取长补短。

2最优化教学模式的具体应用

2.1分析教学任务与教学目的

数据结构课程的教学任务是让学生掌握一些最常用的数据结构,阐明数据结构内在的逻辑关系,讨论其在计算机中的存储表示,并结合各种典型应用说明其在进行各种运算(操作)时的动态性质及实际的执行算法。通过对不同存储结构和相应算法的对比以及上机编程练习,增强根据求解问题的性质选择合理的数据结构并控制求解算法的空间、时间复杂性的能力。

数据结构课程是一门实践性较强的专业基础课程,教学目的就是培养学生针对实际问题在数据结构的选择和应用、算法的设计及其实现以及程序设计方法等方面的基本技能和科学作风。

2.2分析学生学习情况与教师自我分析

2.2.1学生学习情况分析

大学是各种知识整合升华的重要阶段,但如今许多大学生的学习状况不容乐观[3]。针对数据结构课程,主要问题如下。

1) 课程特点是概念多、综合性和技巧性强,大部分学生的反馈是:对授课内容听懂了,书上的内容也理解了,但自己做算法设计题时就感到无从下手,写出的算法结构不清晰、效率低,编写上机程序更是困难重重。

2) 大部分教材都用类C 语言描述,并且只描述出其主体部分,其他部分则不做重点介绍,甚至忽略,于是对于刚刚接触该门课程的学生来说,总有一种“只见树木不见森林”的感觉。不知如何应用,有的学生认为此门课根本就没有用,所以学起来自然没有动力,达不到为后续课程的学习服务之目的。

3) 由于各高校都在扩招,各区域生源之间的差别较大,不少学生底子薄,对本课程的学习入门慢,从而产生厌学的情绪,影响教学质量。

2.2.2教师自我分析

教师的教育技术素养主要体现在:教育技术意识和理论水平,信息技术能力,信息技术与课程整合能力以及教学设计能力。另外,从当前高校教师的工作特点和考核制度来看,高校教师的工作实际上是教学科研并重,以“科研来促进教学,教学促进发展”。因此,探讨高校教师的教育技术素养必须从教学和科研两个方面展开[4]。

本专业数据结构课程主讲教师团队由3人组成,均具有多年丰富的教学经验。学位结构合理,博士1人、博士在读1人、硕士1人。年龄结构合理,老、中、青各1人;职称结构合理,教授、副教授、讲师各1人。教育技术意识和理论水平先进,信息技术能力较强,曾参加2006年上半年全国高校计算机课程研修班数据结构课程研修班;科研能力较强,近三年来,共撰写论文13篇,主持或参加科研项目9项。

存在的问题主要是:作为一门理论性较强的课程,教师在以往教学过程中往往只注重讲解内容,给学生的实践机会较少,所以学生不知道“何时应用”、“怎样应用”。

2.3学时分析

根据教学大纲,本专业数据结构课程理论54学时,实验18学时,共计72学时。另外,期末安排1周课程设计。相比兄弟院校,学时安排较为充裕,能够完成课程大部分内容的讲授。课程中几个重点难点部分的学时分配如表1所示:

2.4综合性手段与方案

1) 明确课程目的,修订并细化教学大纲。

数据结构课程主要是研究非数值计算程序设计问题中所出现的计算机操作对象――数据,数据之间的关系――逻辑结构、存储结构,对数据的操作――各种算法、算法复杂性分析等内容的一门学科。它不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统等系统程序和大型应用程序的重要基础。学习数据结构课程的目的是了解计算机处理对象的特性,将实际问题中所涉及的处理对象在计算机中表示出来并对其进行处理。同时,通过算法训练来提高学生的编程能力,通过程序设计的技能训练来促进学生的综合应用能力和专业素质的提高。

针对本课程的教学目标,重新修订教学大纲,对各教学内容进行细化,并讨论每个知识点的引入实例、教学方法、教学目标、实验内容等,以适应当前对学生创新素质教育的要求。同时,针对学生算法设计时感觉无从下手的现状,新大纲着重强调了对实际动手能力的培养。

2) 广泛调研,优选教材。

教学团队经过广泛调研和多年实践,选用严蔚敏编写、清华大学出版社出版的《数据结构(C语言版)》第2版。该书采用类C语言作为数据结构和算法的描述语言,概念表述严谨,逻辑推理严密,语言精炼,用词达意,并有配出版的《数据结构题集(C语言版)》,便于教学,多年来广受各高校相关专业师生好评。

3) 组织教学内容,理清主线。

数据结构课程的一个显著特点就是概念多。学生之所以感觉老师讲的内容都听懂了可就是不会编写算法,正是因为他们没有把握住这门课程的主线,没有把概念理出层次,而仅仅是孤立的认知,所以不懂得灵活的应用。

因此,理清主线、对于基本概念的正确理解是合理选择算法的前提。在此基础上,明确数据结构是指数据之间的关系,它包括数据之间的逻辑结构、数据在计算机中的存储结构和数据的基本运算等3个方面。数据的逻辑结构是指数据之间的逻辑关系,分为4种结构:集合、线性结构、树形结构和图结构。数据的存储结构指数据在计算机中的存储形式,包括:顺序存储结构和链式存储结构。数据的基本运算:定位、插入、删除、更新。然后,讨论2种实际操作:查找和排序。最后,为了构造好的数据结构及实现,还需要考虑数据结构及算法实现的性能,即时间复杂度和空间复杂度,如表2所示,自左向右即为本门课程教学主线。

讲解每一种数据结构时均贯穿这一主线,这样既保持了课程的逻辑性,又对课堂教学起到强化作用,加深理解和记忆。例如,讲解第三章的栈结构时,可以按照如下主线进行:栈是限定仅在表尾进行插入或删除操作的线性表,又称为后进先出线性表;栈的逻辑结构是线性结构;栈的存储结构可以是顺序存储结构(称为顺序栈)或链式存储结构(称为链栈);栈的基本运算为压栈(插入)、弹栈(删除)、读栈顶元素(定位)等;基于顺序栈和链栈的各种算法实现性能(时间复杂度、空间复杂度)的比较、各自适用的范围等;栈结构可以应用于解决数制转换、迷宫求解、表达式求值等实际问题。

4) 淡化细节,强调算法思路。

算法是数据结构课程中的重要组成部分,每一章都有各自的算法。而目前所有教材都是基于某一种语言编写的,有类Pascal 语言、类C 语言、C/C++语言、Java语言等等。不管是什么语言,一旦将程序给出,就完全禁锢了学生的想象空间,学生只是一味的去理解程序的语句、过程和函数。而程序设计本身就是一种创造性的劳动,最有利于培养学生的创新能力,因此在课堂教学中,凡讲解算法时,均采用先自然语言描述思路,再类C语言(或其他)描述具体算法的方法。这样不仅解决了由于学生语言不足而影响算法掌握的难题,同时也给学生留下足够的发挥空间,培养了良好的解决实际问题习惯。

例如,讲解“在顺序表L中第i个位置之前插入新的元素e”算法时[5],首先利用自然语言描述算法思路如下:

① 判断各参数是否合法;

② 定位i号元素的位置;

③ n~i号元素依次后移一位;

④ 将元素e放入i号位置;

⑤ 表长加1。

然后再将各步骤转换成类C语言描述具体算法。

5) 提高教学趣味性,培养创新思维。

VB之父艾兰•库伯(Alan Cooper)将程序员对创新思维的追求,比喻成囚徒对于冲破牢笼的渴望[6]。由此可见,创新思维对于学生从业之后的重要性。因此,数据结构课程的一个重要任务就是要突出对学生数据抽象能力、算法设计能力、创新思维能力的培养。

启发式教学是培养学生创新思维的重要手段。教师在课堂教学中实施启发式教学,要善于从教学内容中挖掘问题,创设问题情景,激发学生思考。教师教学的艺术很大程度上取决于其设问技巧和创设问题情境能力。课堂教学中,让学生体验“面对问题,分析问题,解决问题”的过程非常重要。

6) 加强实验课管理,提高学生实际动手能力。

教材方面,依据实验教学的目的,从本专业学生实际情况出发,总结多年教学经验,撰写了《数据结构实验指导书》。指导书内容详细,极大方便了学生学习,巩固了课堂教学效果。在实验选题上,考虑到学生的个体差异,将实验设置成不同的类型:必做和选做实验,这两类实验都是结合相关课程的教学需要由授课教师设计的;前者目的在于帮助学生掌握基础知识和实验研究方法,例如:基于线性表、栈和队列、串、二叉树等的操作以及查找、排序的实现等等,每个题目的学时安排基本在2学时左右,题目类型为验证性和设计性;后者则在于培养和鼓励学生的学习兴趣、扩大知识面以及培养学生的应用能力和创新意识,例如:共享空间栈问题、床位分配管理系统模拟问题等,每个题目的学时安排基本在4学时左右,题目类型为综合性。

3结语

在最优化教学模式应用于数据结构课程教学改革的过程中,我们完成了以下工作:重新确定课程定位与培养目标,修订并细化教学大纲,自编实验指导书,改革课堂教学方法,积极开展教学研究,进行课程实验教学与考试改革,将理论与实际应用相结合,注重启发式教学,注意学生创新能力的培养,注重教学反馈、教学相长等。从学生的反馈信息来看,每个教学班提出的意见较实施改革以前有所减少,都能接受教学内容的组织和教师的授课方式;从学生的考试成绩来看,平均分也有所提高;从毕业生反馈信息来看,大多数从事软件开发工作,具备利用所学知识解决实际问题的能力,反映出最优化教学方法应用于数据结构课程教学产生了较好的教学效果。

参考文献:

[1] 余丽娟. 数据结构课程与学生逻辑思维能力的培养[J]. 职业教育研究,2008(2):140-141.

[2] 吴伟民. 数据结构和算法的可视化教学研究与实践[J]. 高等教育研究学报,1999,3(72):35-37.

[3] 王兆华. 当今在校大学生学习生活现状[J]. 山东商业职业技术学院学报,2007,10(7):48-51.

[4] 史先红,马秀麟. 高校教师教育技术素养提升策略探索[J]. 现代教育技术,2009,1(19):68-71.

[5] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2003:23-24.

[6] 艾兰•库伯. 软件开发的创新思维[M]. 2版. 北京:电子工业出版社,2003:35-36.

Discussion on Teaching Mode of Data Structures

HUANG Lu1, YU Hong1, ZHANG Li2

(1. School of Information Engineering, Dalian Ocean University, Dalian 116023, China;

2. School of Computer Science and Technology, Shenyang University of Chemical Technology, Shenyang 110142, China)

Abstract: Four modern teaching modes were presented briefly, in which, optimization teaching mode was practiced for Data Structures. Many aspects were expatiated, such as teaching task analysis for Data Structures、classroom teaching organizing、experiment teaching design、teaching quality estimation etc.

数据结构范文第8篇

关键词:数据结构;排序;可视化

中图分类号:TP311.5 文献标志码:A 文章编号:1673-291X(2013)29-0253-03

引言

在科学高速发展的21世纪,计算机得到了广泛的应用。在时代的需求下,人们对知识的需求也越来越高。为了人们便于理解和掌握更多复杂的知识,所以可视化技术成为了人们学习复杂知识的工具。那么,什么是可视化呢?可视化(Visualization)是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。它涉及到计算机图形学、图像处理、计算机视觉、计算机辅助设计等多个领域,成为研究数据表示、数据处理、决策分析等一系列问题的综合技术。目前正在飞速发展的虚拟现实技术也是以图形图像的可视化技术为依托的。可视化把数据转换成图形,给予人们深刻与意想不到的洞察力,在很多领域使科学家的研究方式发生了根本变化。可视化技术的应用大至高速飞行模拟,小至分子结构的演示,无处不在。在互联网时代,可视化与网络技术结合使远程可视化服务成为现实,可视区域网络因此应运而生。

数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据结构的实现方式是数据存储结构,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。排序算法是数据结构学科经典的内容,其中内部排序现有的算法有很多种,其中包含冒泡排序,直接插入排序,简单选择排序,希尔排序,快速排序,堆排序等,各有其特点。

一、设计目的

本次我们的创新实践项目就是研究关于数据结构的可视化。简单来说,数据结构可视化就是利用计算机的编程语言将数据结构的内容以动态的方式表现出来。这就为数据结构的学习带来很多的方便,更容易让人们理解。

通过本次实践项目的研究,可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高;可以学习并掌握数据结构与算法计,使学生能够有独立的分析能力和设计能力,初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。下面我们重点来讲解一下关于本次研究项目的具体构思和实现方式。

二、具体实现

按要求选择不同的操作。选择后根据不同的选择进行不同的操作,最终达到对各种排序的可视化。系统设计如图1所示。

(一)分析各种排序算法的特点

1.冒泡排序

这是一种较简单的排序方法,它重复地走访要排序的数列,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

2.插入排序

每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。

3.选择排序

它的基本思想是:对待排记录(R1,R2,...,Rn)进行n次选择操作。其中第i次操作是选择第i个小(或大)的记录放在第i个(或n-i+1个)位置上,从而得到一个新的记录数曾1的有序表。

4.快速排序

首先检查数据列表中的数据数,如果小于两个,则直接退出程序。如果有超过两个以上的数据,就选择一个分割点将数据分成两个部分,小于分割点的数据放在一组,其余的放在另一组,然后分别对两组数据排序。

5.希尔排序

先取一个正整数d1

(二)可视化的实现

在界面的排序方法处选择需要的排序方法,然后在数值输入区输入排序的数字,跟据输入数字的大小在界面上会出现用来表示不同数字的不同高度的竖条,点击排序按钮竖条就会根据排序算法来跳动,整个跳动过程会在界面中显示,最后随着排序的完成竖条会停止跳动,最终显示排序结果。例如插入排序(升序)的可视化;在数值输入区里输入以下数值58、37、79、52、64、26、75、52、60、34,界面上会出现高度不一的竖条,然后点击插入排序按钮,58为第一关键字,因为前面没有数值,所以不比较;37为第二关键字与前面的58进行比较小于58,所以58的竖条向后移动到红色竖条的位置;第三关键字是79与前面的37、58进行比较,79大于58,所以竖条不移动。按照此过程进行逐一比较,排序完成后竖条会按照26、34、37、52、52、58、60、64、75、79,的顺序排列在界面上。如果想要完成其他的排序方法,点击重置按钮就然后按照上面的过程就可以。如图2—5所示:

三、结论

数据结构排序算法的可视化将书本上的抽象知识转变为更为容易理解的动态形式,不仅可以为学生减少学习的难度,还可以提高学生的学习积极性,更容易让学生掌握各种排序方法。

参考文献:

[1] 张乃孝.算法与数据结构(C语言描述-第二版)[M].北京:高等教育出版社,2006.

[2] 达尔文(Darwin,F.I).Java经典实例[M].北京:中国电力出版社,2009.

Design of the data structure algorithm visualization

YANG Xiao-bo,ZHANG Lin,ZHANG Long-hui,PANG Shuang-shuang

(Information Engineering College ,Tibet Nationalities University,Xianyang 712082,China)

Abstract:Visualization has become an indispensable technology in the process of development of modern information technology,and realizes the visualization of data structures sorting can serve teaching better,become indispensable in the process of teaching,teaching software. Sorting data structures visualization can be used to sort the various dynamic way to show in front of teachers and students,help the teachers,but also helps students understand and learn.

数据结构范文第9篇

关键词:数据结构;算法;教学方法;教学实践;创新

中图分类号:G642 文献标识码:A 文章编号:1002-7661(2012)12-008-03

《数据结构》是一门重要的综合性专业基础课程,数据结构是对计算机内存中的数据的安排,它涉及现实世界数据在计算机中的存储、表示、组织和处理,以及算法对这些数据结构进行各种处理的初步性能分析技术。

数据结构研究思想和研究方法在计算机科学深度研究领域有着广泛应用,它是计算机专业人员从事理论研究、应用开发、技术管理工作而必需学习的重要理论基础。通过各种基本数据结构及相应算法学习,使学生掌握把现实世界的客观问题转换为计算机内在表现形式,理解数据结构内在的逻辑关系,数据与关系在计算机中存储表示,以及在这些数据结构上的运算和算法执行。该课程具有相当的抽象性和动态性,如何学好《数据结构》这门课,让学生理解教材的理论结构体系需不断积累教学的经验,总结科学教学方法,以达到良好的教学效果。

《数据结构》的学习也是程序设计的学习过

程,通过对学生数据抽象能力的培养,使学生掌握软件工程的规范,能够编写正确易读,结构清楚的程序,具备一定的程序设计能力。本文将从教学方法,教学手段,启发式案例式教学研究,理论教学和实践教学的整合几个方面进行讨论。

一、明确数据结构课程的知识体系与教学目标

数据结构的研究涉及到计算机软、硬件方面,对于编译程序和操作系统都涉及到数据元素在存储中的分配问题,硬件的研究的方面涉及到编码理论、存储装置和存取方法,它是介于软硬件和数学三者之间的核心课程,是设计实现编译程序、操作系统和数据库系统等系统程序和大型应用程序的基础。数据结构作为主要研究数据的各种逻辑结构和存储结构以及对致据的各种操作的学科,对数据结构的教学应灵活运用与把握数据结构间纵向联系和纵横联系之中。从根本上掌握数据结构理论体系,这是数据结构教学工作做好的必备条件。数据结构课程的教学目标,是使学生学会分析计算机所加工数据的数据结构特性,为程序设计涉及的数据选择适当的逻辑结构、存储结构及相应的算法,并初步掌握算法的时间效率分析和空间效率分析的技术。

1、数据结构课程的基本知识体系

一批具有某种逻辑关系的相关数据,按一定的存储方法被存储组织于计算机中,并在这些数据上定义了一个运算的集合,即是数据结构,它包括三个方面:逻辑结构、存储结构和数据的操作运算。数据结构的研究首先应对这三方面有一个清晰的探讨,针对每种数据结构均从逻辑结构、存储结构和操作运算等方面进行研究,是贯穿数据结构研究始终的主线。课程的基本知识模块是以数据的逻辑结构为主线,介绍线性结构、树形结构、图结构和文件结构,在介绍每种数据结构时,再讨论其存储方法以及相关的算法,存储方法有:顺序方法、链接方法、索引方法、散列方法。

数据结构课程的基本知识模块是以数据的逻辑结构为主线,顺序介绍线性结构、树形结构、图结构和文件结构。在介绍每种数据结构时,再讨论其存储结构以及相关的算法。基本模块教学,从以下几方面探讨:

(1)逻辑结构、存储结构、操作运算是数据结构间的横向联系。逻辑结构的定义、存储结构的实现、操作运算的实现是对数据结构研究的基本思想,研究数据结构首先应对这三方面进行详细清晰的探讨。

(2)数据结构间的纵向联系。以简单数据结构为基础实现对较复杂数据结构的研究,教学中让学生知道遍历操作对树、图结构是非常重要的运算。虽然从树、图的递归定义能设计出树、图遍历的递归算法,但从线性结构到树、图的发展是数据结构从简单到复杂的逐步发展过程。对于较复杂的数据结构树、图的遍历可用较简单的线性结构栈和队列来实现,这体现了数据结构间的纵向联系。

(3)数据结构间纵横联系。运用把握这种纵横联系,对从抽象数据类型(ADT)的角度进行数据结构的学习与研究有着重要的意义。ADT的操作就是实现对象的封装,把ADT和面向对象技术和抽象数据类型结合起来,更容易理解一些。和面向对象结合起来讲, ADT继续发展就是Object, ADT的操作就是对象的方法, STL(C++ Standard Template Library)是ADT的经典实现,介绍STL的实现让学生知道ADT究竟是如何作使用实现的。

2、课程教学目标

通过学习数据结构的概念、各种数据结构与算法的实现方式,不同数据结构和算法的特点比较。使学生能够提高用计算机解决实际问题的能力。

基本数据结构和基本算法分析技术部分,对常用基本数据结构的ADT 及其应用介绍,包括线性结构(线性表、串、栈和队列)、二叉树、树、图等;针对遍历二叉树这一教学内容,首先从遍历的概念讲起,引导学生掌握概念并理解遍历的本质就是非线性结构的线性化。

同时基于各种数据结构所实施的运算讨论算法分析的基本技术,掌握时间和空间权衡的原则。排序、检索和索引技术部分主要讨论插入排序、Shell 排序、堆排序、快速排序、归并排序、基数排序等常用的各种排序算法及其时间和空间开销,并介绍文件管理(数据在外存中的组织形式)和外排序技术,以及自组织线性表、散列表、倒排文件、B/B+树等常见的检索和索引技术,及其各自相应的时间和空间开销。

本课程的学习将使学生基本掌握数据结构和算法的设计分析技术,提高程序设计的能力;根据所求解问题的性质,选择合理的数据结构并对时间空间复杂性进行必要的控制。

二、创新课堂教学方法,培养学生学习兴趣

1、基于任务问题教学,实施启发式教学

主要数据结构包括栈、队列、列表、字符串、表、树、图、排序、查找等; 在数据结构的讨论中渗透典型的算法策略: 分治法、回溯法、贪心法、递归技术等; 使用典型的分析方法: 渐进分析法、缓冲分析技术等进行算法分析。数据结构课堂教学应以问题求解为导向,培养和提高学生理论、抽象、设计的能力。例如XMLDOM 树解析器、后缀树、搜索引擎等。激发学生的学习兴趣,培养学生的创新思维能力。

通过新的教学方法训练学生的数据结构思维,使其认识到数据结构的内在有趣,问题驱动的教学方法体现如下:掌握结构化问题解决技术和数据抽象原则;从架构师和设计师两个角度解决具体与抽象之间的难度;教授精巧数据结构给程序所带来的巨大改善;概括性地评价一个数据结构和程序的成本方法;数据结构来解决实际问具体应用。例如,搜索引擎问题询问,通过程序设计来实现搜索引擎会用到哪些数据结构,使用何种数据结构更有效。我们先尝试不用任何数据结构,发现无法构建搜索引擎;在用了简单的数组结构后可以构建搜索引擎,但效率很低;因此我们需要一步步引入构建更为精巧的矢量结构、树结构、索引表、哈希表结构等。再如教材管理问题,首先要考虑教材的各种信息,一般的方法是建立一个表,如表1所示,实际上,它就是1种称为线性表的数据结构。借助一个问题,围绕搜索引擎程序设计的实现,串起一系列的数据结构,学生看到了各种数据结构不是抽象的空的,而是因实际问题驱动、经过逻辑上的逐次演进推理而出现,从而帮助学生更加有趣地学习数据结构。逻辑上的数据结构反映数据成分之间的逻辑关系,物理上的数据结构反映数据成分在计算机内的存储安排。数据结构是数据存在的形式,以问题为驱动,以应用为轴线,对每一种数据结构的出现动机、发展逻辑、表示方式进行演绎,阐述如何从一种想法转换为一种设计,又如何从设计转化为具体程序,对每种数据结构都辅以程序设计中的实际应用,从而化抽象为具体,帮助学生利用数据结构思维解决实际问题。

2、结合实际问题,加强课堂互动

数据结构是反映数据的内部构成,即由哪些数据成分构成,构成方式,呈什么结构,也就是指相互之间存在一种或多种特定关系的数据元素的集合,数据结构是数据存在的形式。数据结构有逻辑上的数据结构和物理上的数据结构之分。目前国内较好的教材有清华大学出版社的严尉敏著《数据结构- C 语言描述》及其配套的《数据结构题集- C 语言描述》,殷人昆编著清华大学出版社出版的《数据结构( 用面向对象方法的C++ 描述)》等,Preiss 著《数据结构与算法- 面向对象的C+ + 设计模式》以及电子工业出版社的Clifford A. Shaffer著《数据结构与算法分析》都是很好的教学参考书。

课堂教学是教学有效的关键,课堂教学

中结合许多实际的讲解,如栈和车库停车、队列和火车站等地方的顺序服务; 树和人类的族谱、各种社会组织机构; 图和哥德斯堡七桥问题、四色定理等。结合现实问题,可以一定程度地提升教学效果。同时要充分进行课堂互动。讲解一个知识点时,而是要加强启发式引导,让学生接话,之后再重复强调如何理解。这样既能促进学生的思考,又能使学生加深理解课堂授课内容。

三、选择合适经典算法,科学讲授基本原理

1、选取经典算法算例

表1

计算机科学家N.沃斯提出“程序=数据结构+算法”,说明算法是对合理数据结构的操作(运算),是数据处理的核心。《数据结构》课程中介绍的基本数据结构有线性表、堆栈、队列、数组、树、二叉树、图以及相应的算法。一个算法是建立在某种数据结构的基础上,一个算法不可能脱离数据结构而孤立存在。只有通过学习算法,才能真正掌握某种数据结构。学习《数据结构》的过程基本上是学习各种算法的过程,典型算法见表1。

在众多的算法中如何选择少量的典型算法进行分析讲解,往往能起到以点带面的关键作用。通过典型算法的分析,一方面让学生加深对数据结构基本理论的理解,另一方面让学生学习程序设计方法。例如在讲授线性表顺序存储教学内容时,可利用典型算法说明其存储特征,线性表的优点能对每个数据元素随机访问,其存储密度高,其缺点是插人、删除操作时需要移动大量的数据元素,操作效率低。可利用“向有序(由小到大或由大到小)的线性表(顺序存储)插人一个新的数据元素”,这一典型算法反映线性表顺序存储的特点。

算例:将一个值为X的数据元素插人到有序(由小到大或由大到小)的线性表(顺序存储)中,可以分两步进行,首先查找到值为X的数据元素在线性表中应有的位置,采用从头到尾循环比较的方法确定其位置I,然后,将第I个以后的全部数据元素向后移动一个存储单元,最后将值为X的数据元素存放到第I个位置上,线性表元素个数增1。线性表的元素插人(对数据的操作或算法)在线性表中进行元素插人,其示意图见图1所示:

图1

L= (a1,…a i-1,a i , ai+1,…,an) 中的第i(1≤i≤n)个位置上插入一个新数据元素e,使其成为线性表 : L=( a1,…a i-1, e, a i , ai+1,…,an),除非i=n+1,否则必须将第i个到第n个数据元素均向后移动1个位置,然后将e存人第I个位置。

算法1

PROCEDURE INSERT(V,m,n,X)

//将值为X的数据元素插人到V数组中,(线性表顺序存贮在V中)m为最多元素个数,n为当前实际元素个数

IF (m = n)

T HEN( "OVERFLOW";RETURN}

FOR I =1TO n DO

IF ( X (V (D) THEN BREAK

FOR J=nTO I BY-1 DO V(J+1)=V(J)

V(I)=X

n= n + 1

RETURN

该算法的优点是简单,便于理解,缺点是循环体内有提前退出语句,不利于结构化程序设计;确定新数据元素位置和移动数据元素分两步进行,有重复操作,那么可将两步合并一步以改进,即将循环比较与移动数据元素同时进行。从线性表的尾部开始向前循环比较,比新数据元素大者后移,直到小于等于时停止。

[算法2]

PROCEDURE INSERT(V,m,n,X)

IF(m= n) THEN( "OVERFLOW";RETURN}

I= n

WHILE(I)=1)AND(V(I))X)DO (V(I+1)=V(I);I=I-1}

V (I+1)=X

n= n + l

RETURN

算法2中循环条件,当循环结束后I=0或V(I)(=X,新数据元素的位置为I+l,C算法1的时间复杂度为0(2n),而算法2的时间复杂度为0(n),循环结构采用结构化程序设计,该算法要归纳循环条件是关键,可改进推广应用。

[类C插人算法(数组的下标从0开始的)]

#define MAXLEN线性表可能达到的最大长度

Typedef struct

Elem type elem[MAXLEN]; Int length;

}Sqlist;

Sta tus Listin sert(Sqlist&L,inti, Elemtype e )

{//在线性表L中第i个元素之前插人新的元素e

//i的合法值为0≤i≤List Length(L )

if ( i< 0 I {i>L..lengthL .length>=

MAX LEN) return ERROR;

for (q=L.length-1;q≧i;q--)L.elem[q+1〕=L.elem[q];

//将第i个元素及其后的元素后移

L.elem [i-1〕二e;//插人元素

L.le ngth++;//线性表长度增1

return OK;

通过对算法的分析要有助于程序设计能力的提高,有助于学生理解线性表的数据结构。还可使用流程图描述算法,进一步帮助学生更好地直观地理解算法。

3.2 优化实践教学,培养创新能力

数据结构课程,上机实习题的设计、学生的实习训练的数量和质量对学习效果都非常重要。通过适当的实习训练,使得学生深刻理解和掌握课程知识体系中的理论和抽象概念,以及各类设计实现方法,提高在复杂软件系统中的实践能力。以学生自主探究和开发活动为主体,培养学生学习的兴趣和能力。强化创新意识和创新能力,相应地提高理论联系实际能力、实践动手能力和科研能力,也能提高学生的学习和研究积极性,学生通过文献调研、开题、项目分析、项目设计、成果汇报、总结评价展开设计训练,可以把理论课上的很多算法得以实现,并且进行深入的数据结构和算法时间、空间效率讨论,达到理论与实践水平共同提高目的。

四、结语

本文针对数据结构课程进行了教学方法上的探讨,从广度和深度上把握课程的知识体系,了解基本数据结构和经典算法,掌握理论、抽象和设计方法进行探讨。以期为本课程的教学提供借鉴。文中讨论选取实际问题,选择合适的数据模型,选择经典算法,剖析重要数据结构与算法思想方法,突破常规教学方法,研究设计教学案例,通过这些例题让学生知道利用所学知识的对实际问题问题求解,助学生理解数据结构原理和算法技术,这样才能充分培养学生学习本课程的兴趣。

参考文献

[1] 严蔚敏,吴伟民. 数据结构(C语言版)[M] 北京:清华大学出版社,2006:156-163.

[2] 陈雪刚. 数据结构课程教学改革与实践[J] 计算机教育,2011 (4):34-37.

[3] 杨利英. 数据结构课程的教学方法探讨,2011 6 (24):131-133.

[4] Shaffer,A.数据结构与算法分析(C + + 版)[M] 2 版.北京:电子工业出版社,2010.

[5] 庞晓琼. 案例驱动的《数据结构》课程设计教学改革实践.计算机教育[J],2009.1:53~64.

[6] 沙宗尧,边馥苓. 图示教学法在数据结构与算法教学中的应用[J].计算机教育,2009(18):80-82.

[7]张立,王伟嘉. 基于学习兴趣开展数据结构教学 计算机教育[J],2010 13 10:95~97.

数据结构范文第10篇

关键词:数据结构;教学效果;存在问题;改革总结

一、课程的重要性

《数据结构》课程是计算机专业中一门重要的专业基础必修课,它为操作系统、数据库原理、编译原理、单片机原理等后续专业课程的学习奠定了基础。其次,数据结构课程是计算机相关专业的考研专业课之一。该课程的重要性显而易见。

二、教学中存在的问题

《数据结构》课程的教学目标是全面系统地介绍数据的逻辑结构、存储结构和算法实现,并介绍常用的非数值计算方法,如数据插入、删除、排序、查找检索等,使学生掌握各种数据结构的特点和算法思想,并能结合具体应用,运用各种数据结构和算法解决实际问题。但大部分高校《数据结构》课程的教学效果都不尽如人意,影响课程学致有如下原因:

1.程序设计课程掌握较差,基础薄弱。

2.实践机会少,动手能力差。

3.缺乏课外辅导,学生自学时障碍重重。

三、解决方法

鉴于以上几点,可以从这几方面进行教学改革:

1.加大对先行课程的重视程度。首先加大C程序设计课程的课时。C程序设计课程是数据结构课程的直接先行课,因此,学好C语言,为后续若干课程的学习打好坚实的基础。另外,增加数学及线性代数课程的课时。学习算法离不开数学的思想,学习数组的存储结构也离不开线性代数的应用。最后,增加了32课时的C程序设计课程设计。

2.实际操作方面,计算机专业要求有很高的实际操作技能,而我们的学生在长期被动的学习过程中却养成了勤于动脑,懒于动手的学习特点,这样教出的学生却是不能满足实际工作要求的。因此,数据结构的实验教学要紧密配合理论教学,通过相关实验与课程设计,帮助和加深对数据结构的整体理解,所以在本课程结束前安排两周实践进行课程设计,不要求实现过多的项目,但每个学生都要动手去做,亲身经历从需求分析到算法分析,最后的代码编写与调试这样的过程,从而更深刻的理解数据结构的逻辑结构、存储结构以及在某种具体的存储结构下的运算及其实现方法。

3.构建《数据结构》网络视频课程,加强师生互动环节。为了弥补课外辅导的缺陷,制作与《数据结构》课程内容相适应的视频,尤其是该课程中典型的算法及其实现过程,学生在课外学习时遇到问题可随时登录校园网观看视频,进行查漏补缺,达到巩固知识的效果。另外,在网站上可以设置在线答疑或留言功能,从而实现师生互动。

四、改革成果

根据以上改革方法,经过实施,数据结构课程教学效果颇见成效,简单做以总结:

1.加大C语言程序设计课程的课时,教师能够在足够的课堂时间将课程内容系统化的进行讲解,尤其是数组、指针、结构体等重要知识。从而给数据结构课程的学习打下了夯实的基础。

2.网络视频的构建,给学生提供了更为丰富的学习参考资料。学生在课外复习时遇到不理解的算法,随时登录校园网观看视频,好像再一次回到了课堂,从而解决了疑难问题。另外,校园网上开通了该课程的在线答疑功能,学生可以通过在线答疑功能随时和任课教师进行沟通。

3.加强数据结构课内实践与课程设计的实施,学生可以将课堂上的理论知识应用于实践中。尤其是课程设计的开设,如:简单文本编辑器的设计与实现、科学计算器的设计与实现等,通过案例让学生真正体会到数据结构课程的实用性,并从本质上理解该课程的内容。

五、结束语

《数据结构》不仅是计算机科学与技术专业的专业基础课,也是大多数院校研究生入学考试的专业必考课,因此,《数据结构》课程教学的讨论将会持续下去,最终能找到一条行之有效的教学方法。以上是作者结合自己多年教学经验和体会,提出的若干改革方法,不足之处会继续探讨研究。

参考文献:

[1]李春葆.数据结构(C语言)[M].北京:清华大学出版社,2013

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

[3]武建华.基于ACM模式的数据结构实践教学改革与探讨[J].计算机教育,2007

上一篇:数据分析范文 下一篇:数据恢复范文