前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇数据结构范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
一、需求分析
1、 程序所实现的功能;
2、 程序的输入,包含输入的数据格式和说明;
3、 程序的输出,程序输出的形式;
4、 测试数据,如果程序输入的数据量比较大,需要给出测试数据;
5、 合作人及其分工
二、设计说明
1、 主要的数据结构设计说明;
2、 程序的主要流程图;
3、 程序的主要模块,要求对主要流程图中出现的模块进行说明
4、 程序的主要函数及其伪代码说明 (不需要完整的代码) ;
5、 合作人设计分工
三、上机结果及体会
1、 合作人编码分工
2、 实际完成的情况说明(完成的功能,支持的数据类型等);
3、 程序的性能分析,包括时空分析;
4、 上机过程中出现的问题及其解决方案;
5、 程序中可以改进的地方说明;
6、 程序中可以扩充的功能及设计实现假想;
关键词:链式存储结构;数据结构;存储结构;教学方法
中图分类号: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两条语句。
相对单链表来说,其它的链式存储结构可能在指针域或数据域扩充后有更为复杂的操作。然而,只要将最基本的单链表的插入和删除操作掌握好,就可以在实现其它链式存储结构操作时轻松应对。
关键词: 《数据结构》 教学方法 改进 实践
《数据结构》是研究非数值计算的程序设计问题中计算机操作对象(数据),以及它们之间的关系(结构)和操作(算法)等的一门科学。它不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础。《数据结构》课程是计算机及相关学科的一门重要的专业基础课,也是一门锻炼程序设计能力的实践课程。然而,由于以下原因,这门课学习起来相当困难。
(1)本课程高度抽象,枯燥,学生刚开始不容易产生兴趣;
(2)与C语言有直接的关系,而C语言大部分同学并没有学好;
(3)教学内容较多,且相互联系,没有明显的重点次重点;
(4)数据结构算法比较灵活,传统教学方法不利于拓展学生思路;
(5)具体实践需要考虑各方面因素。
那么如何解决上述问题,降低理论性程度,增强直观性,提高学生的学习兴趣呢?我从自己的教学体会出发,探讨《数据结构》的一些教学方法,希望起到抛砖引玉作用,与同仁共同提高教学水平,以推动《数据结构》课程不断向前发展。
1.讲好第一堂课,调动学生的学习兴趣
《数据结构》虽然包含了较多的理论内容,但具有实践应用的特点。“兴趣是最好的老师”。因此在进行数据结构课的第一次授课中,我并不急于介绍理论,也不顺着内容讲解,而是强调应用,先讲几个容易结合实际的定义。比如,在介绍逻辑结构这个定义时,教师要结合实际中的应用来激发学生的学习兴趣。如图书馆的书目检索系统,如何组织图书的登录号、书名、分类号等数据,才能快速实现查找、插入、删除操作;如一个单位的人事管理系统,怎么说明上下级关系,怎么添加删除;如通信网络设计问题,如在一个市里到县区之间架设通信网络,怎样安排线路以求花费最少;再如计算机如何解决迷宫问题,等等。这些应用贴近生活,学生都比较熟悉,兴趣就能够被激发起来,形成想了解具体问题到底怎么实现的愿望。而且实践证明,当学生有了足够的兴趣,并能感觉到具体知识在实际生活中的价值,就越能吸引学生产生对知识的向往与追求的意向。这样就可以让学生从“要我学”变为“我要学”。同时,以上例子就已经囊括了本门课中涉及的三大类数据结构――线性表、树和图,这样教师就可以水到渠成地归结出数据结构的概念和本章涉及的几种数据结构的类型,为后续章节的讲解打下良好的基础。
2.解决学生对C语言掌握的不足
C语言程序设计是数据结构的前导课程之一,学生对它的掌握程度,直接关系到数据结构课程的教学效果。C语言非常灵活,对于刚刚学完该课程的学生而言,运用不一定很自如。另外,数据结构课程教学过程中主要运用指针、函数、数组作为函数参数,以及结构体类型来分析、解决问题,而这正是C语言的难点内容。对于大部分学生来说,C语言运用能力不是很强,如果上课时直接讲程序,学生就会感觉很吃力,也听不明白。如何来解决这个问题呢?我们可以利用一两次课的时间来复习C语言的相关知识,即数组、指针、函数和结构体等。教师可以将这些学时纳入到教学进度表中,在复习时不需要讲得太详细,只要把数据结构课需要用到的内容涵盖即可,这样学生就能循序渐进地过渡到数据结构教学之中了。
3.教学内容的归纳提炼
部分教师认为《数据结构》这门课难讲,学生也反映这门课不好学。这是因为《数据结构》不但有很强的理论性,而且有一定的抽象性。既然“教”与“学”都有困难,那么就应该寻找切入点,而在“教”与“学”过程中首先应该突破的就是教师应该怎么“教”。教师首先自己要熟悉教材、精通教材,把握本课程的重点和难点,能够将前后内容联系起来分析思考,尽量从中寻找共性的、规律性的东西进行归纳与提炼,并将其系统化、具体化,避免“照本宣科”。例如从数据结构的定义出发包含三方面的内容:逻辑结构、存储结构和算法。在讲到每种数据结构(线性表、栈、队列、树、图)都会涉及到它的逻辑结构、存储结构和算法。教师在讲授的过程中可以用数据结构包含的三方面内容作为一条主线贯穿整本书,每讲到一种新的数据结构时都可以拿出这条主线来阐明其上的三方面内容。这样,学生学起来就会觉得有系统性,容易把握。综观全书,不论是线性表、树还是图,最基本的的存储结构就是两类:顺序存储结构、链式存储结构,只要把它们掌握好,整个课程学习的难度就不大。所以在教学过程中,教师一方面要紧扣课程的主脉,把基本的概念与术语解释清楚,把各种数据结构与操作运算分析清楚,把有关算法的设计思路与实现方法讲解清楚。另一方面要注重有关内容的前后呼应,把握其内在联系,对各种相关结构的特点与操作,进行相应的归纳、总结与对比。
4.教学方法的改进
教学方法是需要特别注意的问题,传统的教学方法并不适合现在的教学,教师应该对教学方法进行革新。在《数据结构》教学中,教师应该注意让学生的交流互动,其中“提问题”非常重要,特别是算法设计中可以设计许多“问题”。教师在备课时,不仅要消化教材内容,深入探究知识的奥秘,而且要精心设计课堂情景,准备好“问题”;数据结构本身算法是比较灵活的,往往一个算法可以有多种实现方法。这样,教师在课堂教学时不仅要生动详尽地讲解知识,而且要努力激发学生思维;不仅要求学生认真听,而且要引导学生积极思考,逐步培养学生举一反三,主动分析问题、解决问题的能力。在课堂教学中,教师除了通过提问增加教师与学生之间的交流互动,还要设置一些机会,鼓励学生之间进行交流与沟通。例如,讲到拓扑排序时,教师应该先把基本原理讲清楚,然后讲一种常见的实际解决办法,再由学生自由讨论,看有没有其他办法可以同样解决问题,由学生描述,教师进行点评。这样既有助于活跃课堂气氛,提高学生的积极性,又能增强竞争意识,锻炼学生的表达能力。
5.加强实践环节
为使学生真正学好《数据结构》,除了在课堂上要采用行之有效的教学方法外,教师还要让学生勤动手,多实践。只有通过实践才能发现“教”与“学”中存在的问题。实践的首要环节是多做习题。学生不仅要做,而且要求交作业。教师则要进行全面检查与批改,对出现的问题要及时进行总结、归纳、讲评。在讲评时,教师要细讲解题思路,规范解题方法,并强调有关的注意事项。同时,对于作业中的可取之处要加以表扬,鼓励他们开拓创新。其次是上机实验。实验可分两部分,一是验证性实验,主要结合课堂理论教学内容展开,学生可以对在课堂上学到的基本算法进行验证;二是运用性实验,坚持“学以致用”的原则,目的是让学生充分利用所学的理论知识进行相对复杂的应用设计;三是进行系统的设计。上机结束后教师应要求学生完成实习报告,写出自己调试过程中遇到的问题是如何解决的,以及对设计与实现的回顾讨论和分析,算法的时空分析,测试结果,以及经验体会,并附上源程序代码,从而写出完整的实习报告。批改学生实习报告后,教师应对学生的上机实习情况作及时总结,指出成功之处和不足之处。
参考文献:
[1]严尉敏,吴伟民.数据结构 C语言描述.清华大学出版社,1997.
关键词:课程内容;结构分析;教师素质;学习能力
随着我国综合实力的不断增强和国际地位的不断提升,大学计算机教育的重要性逐渐突显出来,而计算机教育中数据结构课程则是重中之重。进入21世纪,计算机科学与技术及相关的专业一度成为热门专业,而数据结构是该学科的基础课程,要想掌握良好的计算机技术就一定要打好基础,学好数据结构课程。然而,数据结构课程内容较为抽象、复杂,具有动态性,学生在学习的过程中感觉无从下手,到实践的过程中更是由于没有理论知识的支持而感到疑惑重重。因此,培养学生的自信心,激发学生的热情便成为当务之急。笔者将在下文中结合自己几年的执教经验对数据结构课程进行探究,不足之处,还请指教。
一、数据课程内容及体系结构分析
数据结构是计算机科学与应用专业的基础课程,该课程内容主要是介绍了软件设计中最常见的数据结构及其储存结构,本课程的难点是数据组织方面的动态储存结构及递归技术。笔者认为,可以从以下几个方面进行教学:
1.做到学以致用
在进行数据课程教学的过程中,教师可以结合实例向学生展示整个课程的内容及每个章节的重难点知识,最大限度地激发学生的学习热情和积极性,这样不仅可以使学生对本课程有个大致的了解,使学生很好地掌握理论知识,还可以培养学生运用理论知识解决实际问题的能力,真正做到学以致用。
2.为学生总结知识框架
教师要采用科学的方法对教学内容进行整理,为学生总结知识框架,这样便于学生自主学习。知识框架要由多个相互关联的模块构成,便于课程中多种知识的组合。
3.进行严格的训练
由于数据课程知识较为抽象,对于一些难度较大,较难理解的知识一定要进行及时、严格的训练,这样可以很好地培养学生严谨的学习态度,在试题之中,教师要适当地考查学生对知识的深入理解情况,便于掌握学生的学习情况。
4.对疑难点知识的补充教学及总结
针对数据课程中某些重难点知识,教师一定要进行深入地剖析,并且可以根据实际情况对教材之中的原理部分进行转化便于学生接受,还可以对教材中未提及的简易算法等进行补充,使学生便于掌握、理解。
5.注重对学生能力的培养
数据课程具有较强的实践性,在理论教学的过程中隐含了许多重要的技术知识,但教材中多是一笔带过,使学生很难理解。针对这种情况,教师一定要对教材中没有展开讨论的重点技能性知识进行解析,以培养学生解决问题的能力。
二、解析课程设计对计算机教师的要求
课程设计主要是针对学生的学习能力进行的,教师一定要根据学生的实际情况及兴趣爱好进行,要注意课题的难度,尽量控制在通过学生的努力可以完成的范围内,既不要太难,也不要过于简单。需要注意的是,计算机教师一定要对整个过程进行掌控,如果发现这个课题较难,学生花费了很长的时间也不能解决,教师就是及时进行指导,帮助学生渡过难关。因为,如果经过长时间的思考还没有解决问题,学生的兴趣和信心都会在一定程度上减弱,最终会出现消极心理,这非常不利于学生的发展;不仅如此,还要对数据结构课程的设计进行严格的验收,严谨的对待学生的成绩评定。在设计完成后,教师要进行现场评定,要充分地检查各种数据,明确指出设计之中存在的缺陷,以便于学生形成良好的治学态度,此外,对于学生设计中的闪光点,教师也要及时肯定,不吝啬鼓励、表扬的语言,使学生感受到教师对其的期望感,激发起学生的学习动力。
通过对上文的论述可知,对数据结构课程设计进行探究具有重要的意义,对我国整体高校计算机教育事业的发展是大有裨益的。数据结构课程作为计算机技术与应用专业的基础课程,对该专业学生的未来发展起到很大的作用,我们数据课程教师任重而道远。尽管在当前的数据结构教育中还存在很多问题,在未来探索的道路上更是阻碍重重,但我坚信,天道酬勤,只要我们广大高校计算机教育工作者恪尽职守,无私奉献,不断对数据结构课程进行探究,一定能够有效缓解我国当前的教育现状,为祖国培养出一批又批的综合素质较高的计算机专业人才,最终为祖国的发展和社会的进步奉献自己的一份力量。
参考文献:
[1]任雪萍,王立波,赵葆华.融入PIC-CDIO理念的“数据结构”课程教学改革[J].计算机教育,2012(12).
[2]查建中.面向经济全球化的工程教育改革战略:兼谈CDIO工程教育模式实施[J].计算机教育,2010(11).
关键词 军队院校 微课 教学设计
中图分类号:G642 文献标识码:A
1课程背景
数据结构是计算机专业和部队信息化相关专业的专业必修课。课程的目的是使学员能够对程序构造其所包含的复杂数据集合进行深入了解。栈和队列是数据结构课程中的一个重要章节,本文章以微课的形式对线性结构中栈的教学过程进行了设计。
在本次微课之前,已经对数据结构中的线性表章节内容进行了介绍,本次微课的授课知识点是特殊的线性表――“栈”。栈是一种相当重要的数据结构,在日常生活中应用相当广泛。与线性表相比,栈规定了特殊的元素添加和删除的方式,在操作上也与一般的线性表有所不同。所以需要在授课方式和课程设计上要想办法引导学员学习,才能加深对栈的原理的理解。
由于本次微课面对的教学对象是军校学员,相对于一般的地方大学学生,军校学员有学习主动性,服从意识较强的特点,善于从部队和生活中把握事物本质,所以本次微课要注意针对性,课程设计要有部队特色。
2教学目标
本微课的教学目标是:理解栈的定义;理解栈的存储结构和基本操作;掌握如何判断栈的出栈序列是否正确;掌握使用栈完成进制位转换算法。
其中,重点是栈的存储结构和基本操作;难点是出栈序列分析。
3 教学方法及过程
课程的开始采用情景引入的方式,逐步引入讲解的主题,引导学员去思考,激发学习兴趣。课程的讲授过程中,以动画为“引”,讲解为“导”,提供实例,引导学员对实例进行分析,发挥学员的主观能动性,培养学员思考问题、分析问题和解决问题的能力。课程的总结中,巧妙地提炼重点、难点、注意点,激发学员继续学习的热情。讲授过程分以下几个环节:
3.1引出主题
由于本课程授课对象都是军校学员,对枪械的使用和原理构造都比较熟悉且感兴趣,为充分调动学员的学习积极性。首先以手枪的发展历程作为开场白,提出问题给学员思考――第一次世界大战期间弹匣式手枪已经相当普及,为什么军官们还是喜欢使用左轮手枪呢?解答:从两种手枪的装填方式的分析,由于当时子弹制造水平落后质量很难保证,而弹匣式手枪必须按照先装填的子弹后击发的顺序来进行射击,如果一发子弹无法击发就会导致后面子弹无法击发从而贻误战机。接着引出今天要介绍的这种数据结构,一种类似弹匣一样先进后出的数据结构――栈。
3.2栈的应用
用具体的实例来说明栈在软件中的应用。比如我们在使用浏览器上网时,使用“后退”键来返回以前浏览过的网页。还有很多类似的软件,比如我们常用的Word、Photoshop等文档或图像编辑软件,都会有撤销(undo)的操作,这也是采用栈这种方式来实现的。在以上两个实例的基础上,分析并归纳出栈的定义:限定仅在表尾进行插入和删除的线性表。
3.3栈的定义和操作
给出栈的ADT定义,明确对线性表的操作特性它都具备,但是由于它的特殊性所以将插入和删除操作,改名为出栈(push)和入栈(pop)。以游标卡尺的游标运动方式,来解释top指针在栈中的作用,播放动画演示两个操作进栈、出栈,以及在栈满、栈空等状态下top指针的变化情况。
3.4出栈序列分析
提出问题――是否最先进栈的元素就一定是最后出栈呢?答案是不一定。以最简单的输入序列1,2,3以动画的方式举例分析5种可能出现的出栈顺序。然后以一道栈的试题来讲解判别出栈序列的通用方法:若入栈序列是…Pi…Pj…Pk…,一定不存在这样的出栈序列…Pk…Pi…Pj…。
3.5举一反三,实际应用
进一步举出实例一一十进制数转成八进制。给出进制位转换的公式,让大家思考如何利用栈来实现对应算法。给出源程序同时,动画实际演示算法执行的整个过程。请大家思考如何完成其他进制位的转换。
3.6总结
最后提炼本课的重点、难点、注意点,给出课后练习题目,激发学员继续学习的热情。
4教学特点总结
(1)采用微课形式,适于部队院校。军队院校学员集中管控,学习训练任务重,除了课堂教学时间外,学员课后没有时间同授课教员交流答疑。而“微课”主要是为了解决课堂教学中某个学科知识点,特别是教学中的重点、难点等内容,“微课”容量小,通常时间控制在15~20分钟之内,所以非常适合军校学员自主学习。
(2)注意学员情感体验,贴近部队和生活实际。笔者努力将数据结构课程知识点和部队实际结合进行了一些尝试,本次微课通过精心设计,从学员常用的手枪射击原理的具体情境出发,引出主题,对实际生活中常用的软件中栈的应用展开教学,贴近部队实际和学员的日常生活,提高了学员的学习积极性和主动性。
(3)教学设计合理,教学效果明显。课程在讲授过程中,重点、难点分明,将栈的运用分成两步, 通过常见的栈的例题分析栈的出栈序列加深学员对知识点的理解,提高解题能力; 通过进制位的转换的实例,通过解决实际问题,使学员获得了成就感和满足感,提高学员的基本编程素养,提高了学员分析和解决问题的能力。
参考文献