链表基本操作动画演示.docx
- 文档编号:1093955
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:26
- 大小:166.30KB
链表基本操作动画演示.docx
《链表基本操作动画演示.docx》由会员分享,可在线阅读,更多相关《链表基本操作动画演示.docx(26页珍藏版)》请在冰点文库上搜索。
链表基本操作动画演示
******学院
毕业设计(论文)学生工作手册
拟定题目:
链表基本操作动画演示
姓名
学号
院(系)
专业
指导教师
年月日
摘要
随着科技的发展,教学方式也越来越先进,现在已经不止有传统课本教学方式,还有多媒体教学方式。
这样一种情况下,动画教学更受大众亲睐。
动画的直观和方便更能清楚明白的表达人们用言语阐述不清的一些理论和算法。
这样,设计好一个动画演示就非常的有意义。
本设计主要研究的是链表基本操作的动画演示,通过用flashbuilder中的actionscript编程做一个链表基本操作的交互式动画,能够帮助我们更直观的理解链表的一些基本操作,主要是删除节点、插入节点,很多复杂的数据结构都包含链表结构。
关键词:
flash,链表,删除,插入,动画
Abstract
Withthedevelopmentofscienceandtechnology,isbecomingmoreandmoreadvancedteachingmethods,nowhasmorethanthetraditionaltextbookteachingmethods,andmultimediateachingmethods.Suchacase,theanimationteachingmorefavorbythepublic.Animationintuitiveandconvenientandcanclearlyunderstandtheexpressionofpeoplewithwordsofsometheoriesandalgorithms.Inthisway,designagoodanimationdemoisverymeaningful
Widespreadunderstandingalgorithmdifficultiesinteaching,insuchacase,thisdesignresearchisalistofthebasicoperationofananimateddemo,throughtheuseofflashinalistofbasicoperationofinteractiveanimation,canhelpusmoreintuitiveunderstandingoflinkedlistssomeofthebasicoperation,mainly,insert,deletenode,manycomplicateddatastructurecontainsliststructure.
Keywords:
flash,list,delete,insert,animation
前言
数据结构课程是计算机学科中一门重要的基础课程,是进行程序设计的理论和技术基础,学好该课程对于计算机其他课程的学习有着深远的意义。
但在教学中普遍存在对算法理解上的困难,在这样一种情况下,本设计主要研究的是链表基本操作的动画演示,它能够帮助我们更直观的理解链表的一些基本操作,比如删除节点、插入节点、修改节点、链表的逆置等等,很多复杂的数据结构都包含链表结构,因此,学好链表对于我们学习其他数据结构有很大的帮助。
同时,在进行设计的同时,让我们能够学会如何独立的设计一个完整的演示动画,也对我们编程技术的一种锻炼。
在做这次毕业设计之前,本人在图书馆借阅了《FlashBuilder4&Flex4宝典》、《FlashActionScript3殿堂之路》、《动画制作与创意典型实例》《数据结构C语言版》等书。
在这次的毕业设计过程中,吴海涛老师给了我很大的帮助,在此表示感谢。
本设计主要是基于FlashBuilder平台的动画设计,就是用Flash将链表生动的表现出来。
用Flash做出来的链表能够更加生动地反映出链表的构成,和对链表的删除操作。
做好这次的毕业设计,本人认为是非常有必要的。
在进行设计的时,让我们能够学会如何独立的设计一个完整的演示动画,也对我们编程技术的一种锻炼。
Flashbuilder是集动画、声音和交互于一体的软件,因此在做这个设计的时候,要考虑到动画的播放模式,以及交互的应用,加入按钮可以与浏览者互动,在此过程中我们又可以学会按钮的创建、按钮中的动画以及加入到按钮中的ActionScript代码知识。
在遇到不会的时候,一方面向指导老师询问,另一方面,自己也可以到网上去查阅。
毕业设计是每个专业的学习、实践和创新的实践性教学环节,做好毕业设计,也是对自己所学的知识的一次系统性的总结。
有助于对自己经行查漏补缺,巩固以前所学的知识,这样,也是对自身的一次升华。
一、选题意义及背景
动画演示这种教学方式的出现使我们的教学进入了一个全新的时代,动画教学的交互性的控制性强,能够使我们直接参与进去。
使我们的教学变得更加的轻松。
在其他教学方式中具有无法比拟的优势。
传统的教学方式与动画教学方式相比,有很多的缺点,比如在传统的教学过程中,一切都是由教师决定的从教学内容、教学策略、教学方法、教学步骤甚至学生做的练习都是教师事先安排好的,学生只能被动地参与这个过程,即处于被灌输的状态。
将动画结合到教学中,可以避免传统教学的一些缺点。
使学生能够主动接受,慢慢理解。
动画演示链表的基本操作对于我们对于链表的结构和基本操作算法有非常大的帮助,另外,链表是数据结构中比较基础的一种结构,学好链表对于我们学习其他的结构有很大的帮助。
二、方案及论证
一)、动画软件FlashBuilder概述
1、FlashBuilder简介
这款软件是由Adobe公司开发的。
它对软件开发人员使用开放源Flex框架快速开发跨平台富Internet应用程序(RIA)和内容起到了一定的帮助作用。
这个软件包含了对智能编码、调试及可视设计的支持,提供功能非常强大的测试工具,而这些工具的使用可以提高开发速度并创建出性能更高的应用程序。
Flex是FlashBuilder中的一个高效、免费的开放源框架,软件开发人员可以将其用于构建具有表现力的Web应用程序,这些web应用程序利用AdobeFlashPlayer和AdobeAIR运行时可以实现跨浏览器、桌面和操作系统实现一致的部署。
09年5月,下一代FlexBuilder,即FlexBuilder4.0(是IDE,而非SDK)改名为FlashBuilder。
虽然只能使用Flex框架构建Flex应用程序,开发人员利用AdobeFlashBuilder软件可以通过智能编码、交互式遍历调试以及可视设计用户界面布局等功能加快开发。
2、脚本语言ActionScript简介
ActionScript脚本语言已经广泛的应用到FlashCS、FlashBuilder中。
应用ActionScript编程可以实现动画的交互性。
ActionScript脚本语言是一种针对AdobeFlashPlayer运行时环境的编程语言,它面向对象,功能强大、具有业界标准素质,实现了交互性、数据处理以及其它许多功能ActionScript脚本语言功不可没。
ActionScript编写的代码是由FlashPlayer播放器中的ActionScript虚拟机(AVM)来编译执行的。
ActionScript代码通常被编译器编译成"字节码格式"(是一种由计算机编写且能够为计算机所理解的编程语言),字节码嵌入SWF文件中,SWF文件由运行时环境FlashPlayer执行。
ActionScript3.0版本的脚本语言向我们提供了可靠的编程模型,开发人员在进行面向对象的编程时对此模型会感到似曾相识。
在ActionScript面向对象编程中,任何类都可以包含3种类型的特性:
属性、方法、事件。
这些元素共同用于管理程序使用的数据块,并用于确定执行哪些动作以及动作的顺序。
ActionScript3.0中的常用的一些函数介绍:
获得某个实例对象的类名:
getQualifiedClassName(实例名字符串表达式);Math.random(); 范围为0~1的随机值;取出方法getter;设定方法setter;addEventListener()添加点击响应件;stop();gotoAndPlay();等等,
ActionScript3.0中常用的类:
Tweener用于过度与切换的一组动画;FlexLib一套开源的Flex界面组件库。
ActionScript3.0中常用的属性:
X属性主要用于设置对象在舞台中的水平坐标;Y属性主要用于设置对象在舞台中的垂直坐标;scaleX属性用于设置对象的水平缩放比例,其默认值为1,表示按100%缩放;alpha属性用于设置对象的透明度;visible设置对象可见度,事实上可以将属性视为包含在对象中的子变量。
事件:
是确定计算机执行哪些指令以及何时执行的机制。
从本质上来说,事件就是所发生的、ActionScript能够识别并可响应的事情。
3、ActionScript3.0的优点
完全支持面向对象编程(OOP)语言。
核心语言基于ECMAScript(ECMA262)标准,对OOP架构深层优化。
彻底更新的显示对象系统架构。
引入了封装的概念,使得程序安全性大大提高,各个对象之间的关系也通过封装,访问控制而得以确定,避免了不可靠的访问给程序带来的意外产生。
它旨在方便创建拥有大型数据集和面向对象的可重用代码库的高度复杂应用程序。
采用了先进的E4X,使XML成为ActionScript3语言的内建数据类型(nativesupport)。
操作直白、简单。
与ActionScript2比较,极大地减轻了XML数据处理工作量。
全面支持正则表达式。
正则表达式也成了ActionScript3的内建数据类型,ActionScript3对字符串的处理能力空前增强。
AS3采用了容器的思想,告别了as2一个MovieClip打天下的局面。
异常处理机制。
异常包括信息全面、易于调试和处理。
FlashAPI全面支持异常处理机制。
二)数据结构之链表
1、链表概述
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包括两个部分:
一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
它可以和随意的在其任意一个位置进行插入和删除操作,这对于动态的数据处理十分的有利。
比如,有的班级有200人,而有的班只有30人,如果要用同一个数组先后存放不同班级的学生数据,则必须定义长度为200的数组。
如果实现难以确定一个班的最多人数,则必须把数组定得足够大,以能存放任何班级的学生数据,数组大小确定后不可改变,需要连续的内存空间,显然这将会浪费内存。
然而链表则没有这种缺点,它并不需要连续的内存空间,它是根据需要开辟内存单元。
图2.1.1表示最简单的一种链表的结构。
图2.1.1链表的结构
可以看到链表中各元素在内存中可以不是连续存放的。
要找到某一元素,必须先找到上一个元素,根据它提供的下一元素地址才能找到下一元素。
如果不提供“头指针”(head),则整个链表都无法访问。
2、链表的插入操作
链表能够方便地实现结点的插入操作,这也是链表结构具有动态分配存储空间的体现,也是它优于数组的地方之一。
还是举小朋友排队的例子来说明链表的插入是怎样实现的。
在这个比喻里面,每一个小朋友相当于一个结点,一个小朋友的手拉着另一个小朋友的手,相当于一个结点的指针域指向下一个结点。
如图2.2.1假设现有一对按大小个排好队的小朋友,又来一个小朋友“C”需要加入该队列。
这时候,他需要插入B于D两个小朋友之间。
然后,把这两个小朋友的手分开,让前一个小朋友的手该拉着新来小朋友的一只手,新来小朋友的另一只手拉着后一个小朋友的一只手。
这样,新来的小朋友就被插入到这个队伍里面了,并且这个队伍的小朋友还是按照身高顺序排列的,如图2.2.2。
实际链表的插入操作也就可以类似地实现。
图2.2.1原来的队伍
图2.2.2C插入后的队伍
算法的C语言描述
//在带头结点的单链线性表L中第i个位置之前插入元素e
intListInsert(LinkList*L,inti,ElemTypee)
{intj=0;
LinkListp=*L,s;
while(p&&j {p=p->next; j++; } if(! p||j>i-1)//i小于1或者大于表长 return0; s=(LinkList)malloc(sizeof(structLNode));//生成新结点s->data=e插入L中 s->next=p->next; p->next=s; return1; } 3、链表的删除操作 还是举小朋友排队的例子来说明链表的删除是怎样实现的。 在这个比喻里面,每一个小朋友相当于一个结点,一个小朋友的手拉着另一个小朋友的手,相当于一个结点的指针域指向下一个结点。 如图2.3.1假设现有一对按大小个排好队的小朋友,小朋友“C”需要离开该队列。 这时候,他需要让前一个小朋友的手该拉着他后面小朋友的一只手,自己放开手。 这样,C小朋友就被从队伍里面删除了,并且这个队伍的小朋友还是按照身高顺序排列的,如图2.3.2。 实际链表的删除操作也就可以类似地实现。 图2.3.2C删除前的队伍 图2.3.2C删除后的队伍 算法的C语言描述 //在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 intListDelete(LinkList*L,inti,ElemType*e) {intj=0; LinkListp=*L,q; while(p->next&&j {p=p->next; j++; } if(! p->next||j>i-1)//删除位置不合理return0; q=p->next;//删除并释放结点 p->next=q->next; *e=q->data; free(q); return1; } 4、单链表的特点 链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指列表中的下一个结点。 三)设计的功能描述 利用FlashBuilder软件,制作一个动画,完成链表的删除、插入操作过程的演示。 用户可以通过点击插入按钮,进入到插入主页面,页面中提示用户需要手动的输入要插入的位置和数据,输入之后,点击插入就可以观看到整个插入过程,如果输入节点和位置不正确也会出现相关的提醒,点击确定按钮,再重来。 同样的道理,用户可以通过点击删除按钮,进入到删除的主页面,页面中提示用户需要手动的输入要删除的位置,输入之后,点击插入就可以观看到整个插入过程,如果输入节点和位置不正确也会出现相关的提醒,点击确定按钮,再重来。 四)设计思想 利用MornBuilder编辑资源,发布代码后,进入Flashbuilder软件编辑代码。 实现插入,删除动画。 ActionScript脚本语言得到完善,提供了按钮和MC两种可以出发事件的基本对象,使得我们做的动画能够实现与用户的交互。 用户与Flash动画的交互体现在用户能够直接对动画的播放进行控制和影响动画的内容。 用户对动画的播放进程的控制是比较容易实现的,主要是借助按钮对象以及在按钮上添加的动作语句来实现即可。 但是要实现用户对的输入对动画的影响必须考虑以下两个问题: (1)用户控制动画改变的权限不宜过大,也不可过小。 如果过大的话,那么实现过程就很困难,但是过小则无法体现交互性。 (2)应该结合具体情况来制定相应的实现策略。 固定的实现部分应采用模板组件或者库构件等可重用元素实现,来达到代码重用和可移植的目的。 在本设计中,是通过按钮按键来控制动画的播放效果,链表的插入动画中主要有三个按钮,插入按钮,重来按钮和当插入地址越界时的提醒知道了按钮。 为按钮添加ActionScript控制动画的播放,是在按钮动作面板中添加相应的动作脚本来实现的。 五)设计中的主要难点 1、鼠标点击事件 当点击插入按钮时,要完成插入动画,当点击删除按钮时,相应的进行删除操作,当点击退出时返回上层。 2、指针的移动 当点击删除或者插入按钮时,如何自动生成节点,和调用什么函数能够使指针的自动移动,以什么样的速度移动,移动范围。 三、过程论述 《数据结构》是计算机专业的重要课程之一,但是教学中普遍存在对算法理解上的困难,特别是以类C语言写的算法程序过程复杂,难以掌握,在这样一种情况下,本设计主要研究的是链表基本操作的动画演示,它能够帮助我们更直观的理解链表的一些基本操作。 体现多媒体教学的重要意义。 目前的一些高校和教学网站,出现的类似算法动画演示课件大多可分为两类: 一类是采用专用语言,如C或JAVA来开发,另一类则采用一些多媒体制作工具来设计,如PowerPoint,Authorware等.前者用程序设计语言来开发,周图1单链表的插入算法的动画界面期长,成本大,难以推广和维护;后者虽易开发,易使用,但因受其功能限制并不能制作出真正意义上的动画影片.而通常上述方法开发出的可执行文件尺寸较大,不宜于远程网络下的CAI教学.近年来,由于认识到Flash在制作网页动画中的突出性能,也出现了许多利用其开发的教学课件,不过这些教学课件通常只利用了Flash的动画制作能力,并未充分挖掘和实现ActionScript脚本的强大控制功能,所实现的均是同一种动画流程的播放: 即动画过程不能交互改变,动画内容在反复播放中也不能有所变化. 本文介绍的《数据结构》中的链表操作动画演示课件利用了ActionScript脚本编程的控制功能,来实现动画与用户的交互。 这个动画不紧需要我们了解链表基本操作的过程,而且需要将这个过程通过动画形象生动地表现出来,并实现与用户的交互性,使学者对算法过程得到全面深刻的理解。 下面以《数据结构》链表的插入和删除算法动画为例,说明其具体实现过程和步骤。 一)平台搭建和初步准备工作 1、环境要求 WindowsXp以上cpu1g内存2g 2、准备工具 编程工具: flashbuilder4.6 素材编辑工具: MornBuilder 类库swc: greensock.swc和MornUILib.swc 图片资源: 略 3、创建项目 打开flashbuilder-->文件-->新建actionscript项目-->项目名写入zuoye-->文件夹d: /-->应用程序类型选择web(在AdobeFlashPlayer中运行)-->FlexSDk版本选择使用flex4.6.0-->下一步-->添加swc把准备的greensock.swc和MornUILib.swc添加进来-->完成 4、编辑资源 打开MornBuilder-->项目-->新建项目-->项目名称-->写上Zuoye-->项目位置浏览到你刚才用flashbuilder新建项目的根目录下-->确定 将你准备的图片资源导入到项目根目录\morn\assets\comp下-->刷新资源列表 页面-->新建页面-->宽高设置为750*550,新建Main、Insert、Delete、Cell、UpArrow这几个页面,主界面见图示3.1 图3.1 插入操作界面如图3.2 图3.2 删除操作界面如图3.3 图3.3 Cell如图3.4 图3.4 UpArrow如图3.5 图3.5 二)动画实现 除了主类ZuoYe.as已存在,另外还要新建其他几个类 MainView.as对插入按钮和删除按钮进行控制,点击插入按钮进入“单链表节点的插入”界面,点击删除按钮进入“单链表节点的删除”界面 InsertView.as此为“单链表节点的插入”界面 DeleteView.as此为“单链表节点的删除”界面 CellView.as此为单元链表界面 UpArrowView.as此为向上箭头的界面 主类ZuoYe.as中先初始化整个项目 App.init(this);//启动项目 App.loader.loadAssets(["assets/comp.swf"],newHandler(loaded),newHandler(loading)); 在资源加载完成事件中添加显示对象MainView view=newMainView();//新建主界面 addChild(view);//在舞台上加载主界面 1、主界面代码设计 MainView.as中先初始化并为InsertView类和DeleteView类实例化对象,然后为两个按钮添加鼠标click事件,以达到点击按钮进入某个界面的效果。 核心代码如下: overrideprotectedfunctioninitialize(): void { view_insert=newInsertView();//新建一个插入视图 addChild(view_insert);//把插入视图添加到主界面中 view_delete=newDeleteView();//新建一个删除操作 addChild(view_delete);//把删除视图添加到主界面中 view_insert.visible=view_delete.visible=false;//设置初始可见度 view_insert.addEventListener(ChildClassEvent.Back,showSth);//为插入视图添加按钮点击事件view_delete.addEventListener(ChildClassEvent.Back,showSth);//为删除视图添加按钮点击事件 btn_1.addEventListener(MouseEvent.CLICK,onClicked); btn_2.addEventListener(MouseEvent.CLICK,onClicked); } 2、插入操作代码设计 (1)在InsertView.as初始化方法中对元件初始化 核心代码如下: for(vari;inti=0;i<5;i++){ arrArrow.push(this[“arrow_”+i]);//将五个箭头push到arrArrow数组中 } arrow_up.scaleX=0;//设置朝上箭头元件为0 arrow_p.visible=false;//设置指针元件不可见 btn_insert.addEventListener(MouseEvent.CLICK.onClicked); btn_redo.addEventListener(MouseEvent.CLICK.onClicked);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 操作 动画 演示
![提示](https://static.bingdoc.com/images/bang_tan.gif)