链表动画毕业论文.doc 33页

  • 374.50 KB
  • 2022-04-22 11:39:24 发布

链表动画毕业论文.doc

  • 33页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'******学院 毕业设计(论文)学生工作手册拟定题目:链表基本操作动画演示姓名学号院(系)专业指导教师年月日 摘要随着科技的发展,教学方式也越来越先进,现在已经不止有传统课本教学方式,还有多媒体教学方式。这样一种情况下,动画教学更受大众亲睐。动画的直观和方便更能清楚明白的表达人们用言语阐述不清的一些理论和算法。这样,设计好一个动画演示就非常的有意义。本设计主要研究的是链表基本操作的动画演示,通过用flashbuilder中的actionscript编程做一个链表基本操作的交互式动画,能够帮助我们更直观的理解链表的一些基本操作,主要是删除节点、插入节点,很多复杂的数据结构都包含链表结构。关键词:flash,链表,删除,插入,动画AbstractWiththedevelopmentofscienceandtechnology,isbecomingmoreandmoreadvancedteachingmethods,nowhasmorethanthetraditionaltextbookteachingmethods,andmultimediateachingmethods.Suchacase,theanimationteachingmorefavorbythepublic.Animationintuitiveandconvenientandcanclearlyunderstandtheexpressionofpeoplewithwordsofsometheoriesandalgorithms.Inthisway,designagoodanimationdemoisverymeaningfulWidespreadunderstandingalgorithmdifficultiesinteaching,insuchacase,thisdesignresearchisalistofthebasicoperationofananimateddemo,throughtheuseofflashinalistofbasicoperationofinteractiveanimation,canhelpusmoreintuitiveunderstandingoflinkedlistssomeofthebasicoperation,mainly,insert,deletenode,manycomplicateddatastructurecontainsliststructure.Keywords:flash,list,delete,insert,animation 目录前言1一、选题意义及背景1二、方案及论证2一)、动画软件FlashBuilder概述21、FlashBuilder简介22、脚本语言ActionScript简介23、ActionScript3.0的优点3二)数据结构之链表41、链表概述42、链表的插入操作53、链表的删除操作64、单链表的特点7三)设计的功能描述7四)设计思想7五)设计中的主要难点81、鼠标点击事件82、指针的移动8三、过程论述8一)平台搭建和初步准备工作81、环境要求92、准备工具93、创建项目94、编辑资源9二)动画实现111、主界面代码设计:122、插入操作代码设计123、删除操作的代码设计14三)动画运行17四、存在的问题和不足18五、结语18六、谢辞18七、参考文献19 前言数据结构课程是计算机学科中一门重要的基础课程,是进行程序设计的理论和技术基础,学好该课程对于计算机其他课程的学习有着深远的意义。但在教学中普遍存在对算法理解上的困难,在这样一种情况下,本设计主要研究的是链表基本操作的动画演示,它能够帮助我们更直观的理解链表的一些基本操作,比如删除节点、插入节点、修改节点、链表的逆置等等,很多复杂的数据结构都包含链表结构,因此,学好链表对于我们学习其他数据结构有很大的帮助。同时,在进行设计的同时,让我们能够学会如何独立的设计一个完整的演示动画,也对我们编程技术的一种锻炼。在做这次毕业设计之前,本人在图书馆借阅了《FlashBuilder4&Flex4宝典》、《FlashActionScript3殿堂之路》、《动画制作与创意典型实例》《数据结构C语言版》等书。在这次的毕业设计过程中,吴海涛老师给了我很大的帮助,在此表示感谢。本设计主要是基于FlashBuilder平台的动画设计,就是用Flash将链表生动的表现出来。用Flash做出来的链表能够更加生动地反映出链表的构成,和对链表的删除操作。做好这次的毕业设计,本人认为是非常有必要的。在进行设计的时,让我们能够学会如何独立的设计一个完整的演示动画,也对我们编程技术的一种锻炼。Flashbuilder是集动画、声音和交互于一体的软件,因此在做这个设计的时候,要考虑到动画的播放模式,以及交互的应用,加入按钮可以与浏览者互动,在此过程中我们又可以学会按钮的创建、按钮中的动画以及加入到按钮中的ActionScript代码知识。在遇到不会的时候,一方面向指导老师询问,另一方面,自己也可以到网上去查阅。毕业设计是每个专业的学习、实践和创新的实践性教学环节,做好毕业设计,也是对自己所学的知识的一次系统性的总结。有助于对自己经行查漏补缺,巩固以前所学的知识,这样,也是对自身的一次升华。21 一、选题意义及背景动画演示这种教学方式的出现使我们的教学进入了一个全新的时代,动画教学的交互性的控制性强,能够使我们直接参与进去。使我们的教学变得更加的轻松。在其他教学方式中具有无法比拟的优势。传统的教学方式与动画教学方式相比,有很多的缺点,比如在传统的教学过程中,一切都是由教师决定的从教学内容、教学策略、教学方法、教学步骤甚至学生做的练习都是教师事先安排好的,学生只能被动地参与这个过程,即处于被灌输的状态。将动画结合到教学中,可以避免传统教学的一些缺点。使学生能够主动接受,慢慢理解。动画演示链表的基本操作对于我们对于链表的结构和基本操作算法有非常大的帮助,另外,链表是数据结构中比较基础的一种结构,学好链表对于我们学习其他的结构有很大的帮助。二、方案及论证一)、动画软件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)来编译执行的。ActionScript21 代码通常被编译器编译成"字节码格式"(是一种由计算机编写且能够为计算机所理解的编程语言),字节码嵌入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全面支持异常处理机制。21 二)数据结构之链表1、链表概述链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。它可以和随意的在其任意一个位置进行插入和删除操作,这对于动态的数据处理十分的有利。比如,有的班级有200人,而有的班只有30人,如果要用同一个数组先后存放不同班级的学生数据,则必须定义长度为200的数组。如果实现难以确定一个班的最多人数,则必须把数组定得足够大,以能存放任何班级的学生数据,数组大小确定后不可改变,需要连续的内存空间,显然这将会浪费内存。然而链表则没有这种缺点,它并不需要连续的内存空间,它是根据需要开辟内存单元。图2.1.1表示最简单的一种链表的结构。图2.1.1链表的结构可以看到链表中各元素在内存中可以不是连续存放的。要找到某一元素,必须先找到上一个元素,根据它提供的下一元素地址才能找到下一元素。如果不提供“头指针”(head),则整个链表都无法访问。2、链表的插入操作链表能够方便地实现结点的插入操作,这也是链表结构具有动态分配存储空间的体现,也是它优于数组的地方之一。还是举小朋友排队的例子来说明链表的插入是怎样实现的。在这个比喻里面,每一个小朋友相当于一个结点,一个小朋友的手拉着另一个小朋友的手,相当于一个结点的指针域指向下一个结点。如图2.2.1假设现有一对按大小个排好队的小朋友,又来一个小朋友“C”需要加入该队列。这时候,他需要插入B于D两个小朋友之间。然后,把这两个小朋友的手分开,让前一个小朋友的手该拉着新来小朋友的一只手,新来小朋友的另一只手拉着后一个小朋友的一只手。这样,新来的小朋友就被插入到这个队伍里面了,并且这个队伍的小朋友还是按照身高顺序排列的,如图2.2.2。实际链表的插入操作也就可以类似地实现。21 图2.2.1原来的队伍图2.2.2C插入后的队伍算法的C语言描述//在带头结点的单链线性表L中第i个位置之前插入元素eintListInsert(LinkList*L,inti,ElemTypee){intj=0;LinkListp=*L,s;while(p&&jnext;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”21 需要离开该队列。这时候,他需要让前一个小朋友的手该拉着他后面小朋友的一只手,自己放开手。这样,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&&jnext;j++;}if(!p->next||j>i-1)//删除位置不合理return0;q=p->next;//删除并释放结点p->next=q->next;*e=q->data;free(q);return1;}4、单链表的特点21 链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指列表中的下一个结点。三)设计的功能描述利用FlashBuilder软件,制作一个动画,完成链表的删除、插入操作过程的演示。用户可以通过点击插入按钮,进入到插入主页面,页面中提示用户需要手动的输入要插入的位置和数据,输入之后,点击插入就可以观看到整个插入过程,如果输入节点和位置不正确也会出现相关的提醒,点击确定按钮,再重来。同样的道理,用户可以通过点击删除按钮,进入到删除的主页面,页面中提示用户需要手动的输入要删除的位置,输入之后,点击插入就可以观看到整个插入过程,如果输入节点和位置不正确也会出现相关的提醒,点击确定按钮,再重来。四)设计思想利用MornBuilder编辑资源,发布代码后,进入Flashbuilder软件编辑代码。实现插入,删除动画。ActionScript脚本语言得到完善,提供了按钮和MC两种可以出发事件的基本对象,使得我们做的动画能够实现与用户的交互。用户与Flash动画的交互体现在用户能够直接对动画的播放进行控制和影响动画的内容。用户对动画的播放进程的控制是比较容易实现的,主要是借助按钮对象以及在按钮上添加的动作语句来实现即可。但是要实现用户对的输入对动画的影响必须考虑以下两个问题:(1)用户控制动画改变的权限不宜过大,也不可过小。如果过大的话,那么实现过程就很困难,但是过小则无法体现交互性。(2)应该结合具体情况来制定相应的实现策略。固定的实现部分应采用模板组件或者库构件等可重用元素实现,来达到代码重用和可移植的目的。在本设计中,是通过按钮按键来控制动画的播放效果,链表的插入动画中主要有三个按钮,插入按钮,重来按钮和当插入地址越界时的提醒知道了按钮。为按钮添加ActionScript控制动画的播放,是在按钮动作面板中添加相应的动作脚本来实现的。五)设计中的主要难点1、鼠标点击事件21 当点击插入按钮时,要完成插入动画,当点击删除按钮时,相应的进行删除操作,当点击退出时返回上层。2、指针的移动当点击删除或者插入按钮时,如何自动生成节点,和调用什么函数能够使指针的自动移动,以什么样的速度移动,移动范围。三、过程论述《数据结构》是计算机专业的重要课程之一,但是教学中普遍存在对算法理解上的困难,特别是以类C语言写的算法程序过程复杂,难以掌握,在这样一种情况下,本设计主要研究的是链表基本操作的动画演示,它能够帮助我们更直观的理解链表的一些基本操作。体现多媒体教学的重要意义。目前的一些高校和教学网站,出现的类似算法动画演示课件大多可分为两类:一类是采用专用语言,如C或JAVA来开发,另一类则采用一些多媒体制作工具来设计,如PowerPoint,Authorware等.前者用程序设计语言来开发,周图1单链表的插入算法的动画界面期长,成本大,难以推广和维护;后者虽易开发,易使用,但因受其功能限制并不能制作出真正意义上的动画影片.而通常上述方法开发出的可执行文件尺寸较大,不宜于远程网络下的CAI教学.近年来,由于认识到Flash在制作网页动画中的突出性能,也出现了许多利用其开发的教学课件,不过这些教学课件通常只利用了Flash的动画制作能力,并未充分挖掘和实现ActionScript脚本的强大控制功能,所实现的均是同一种动画流程的播放:即动画过程不能交互改变,动画内容在反复播放中也不能有所变化.本文介绍的《数据结构》中的链表操作动画演示课件利用了ActionScript脚本编程的控制功能,来实现动画与用户的交互。这个动画不紧需要我们了解链表基本操作的过程,而且需要将这个过程通过动画形象生动地表现出来,并实现与用户的交互性,使学者对算法过程得到全面深刻的理解。下面以《数据结构》链表的插入和删除算法动画为例,说明其具体实现过程和步骤。一)平台搭建和初步准备工作1、环境要求WindowsXp以上cpu1g内存2g2、准备工具21 编程工具: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新建项目的根目录下-->确定将你准备的图片资源导入到项目根目录mornassetscomp下-->刷新资源列表页面-->新建页面-->宽高设置为750*550,新建Main、Insert、Delete、Cell、UpArrow这几个页面,主界面见图示3.1图3.1插入操作界面如图3.221 图3.2删除操作界面如图3.3图3.321 Cell如图3.4图3.4UpArrow如图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));在资源加载完成事件中添加显示对象MainViewview=newMainView();//新建主界面addChild(view);//在舞台上加载主界面1、主界面代码设计MainView.as中先初始化并为InsertView类和DeleteView类实例化对象,然后为两个按钮添加鼠标click事件,以达到点击按钮进入某个界面的效果。核心代码如下:overrideprotectedfunctioninitialize():void{view_insert=newInsertView();//新建一个插入视图21 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;//设置朝上箭头元件为0arrow_p.visible=false;//设置指针元件不可见btn_insert.addEventListener(MouseEvent.CLICK.onClicked);btn_redo.addEventListener(MouseEvent.CLICK.onClicked);btn_return.addEventListener(MouseEvent.CLICK.onClicked);timer.addEventListener(TimeEvent.TIMER.onTimer);timer.addEventListener(TimeEvent.TIMER_COMPLETE.timerCompleteEvent);(2)在鼠标事件方法中对插入按钮作相应效果,如果点击插入按钮,就进行指针的动画过程,如果点击重来按钮,就重新返回插入的主界面。核心代码如下:switch(e.target){casebtn_insert:doAction();//播放动画break;casebtn_redo://当按下“重来”按钮时,初始化整个舞台timeLineLite.kill();//停止播放器21 icon.alpha=1;//设置角元件为可见arrow_up.scaleX=0;//设置朝上箭头的水平比例为0arrow_p.x=arrPosX_arrow_p[0];//初始化指针的坐标arrow_p.visible=false;//设置指针为不可见input_1.text=input_2.text="";//清空输入框文本if(index<5){arrArrow[index].rotation=0;//初始化箭头角度arrArrow[index].scaleX=1;//初始化箭头比例}if(contains(cell))removeChild(cell);//清除链表单元btn_insert.mouseEnabled=btn_return.mouseEnabled=true;//设置按钮为可用break;casebtn_return:visible=false;//隐藏Insert界面dispatchEvent(newChildClassEvent(ChildClassEvent.Back));//派发返回主界面事件break;default:break;(2)鼠标点击之后,对插入的地址做出相应的判断,如果地址小于5,使用appen函数指针做出缓动,生成一个节点,完成插入过程。核心代码:privatefunctiontimerCompleteEvent(e:TimerEvent):void{cell.alpha=1;//设置链表单元透明度为最大timeLineLite=newTimelineLite();//创建播放器实例timeLineLite.append(newTweenLite(cell,2,{y:PosY_cell}));//链表单元从存储池下降到这个位置timeLineLite.append(newTweenLite(cell,index*1,{x:arrPosX_cell[--index]}));//链表单元左移if(index<5){timeLineLite.append(new21 TweenLite(cell.arrow,2,{scaleX:1}));//设置链表单元箭头的水平比例为1timeLineLite.append(newTweenLite(arrArrow[index],2,{scaleX:0,onComplete:function():void{(arrArrow[index]asImage).rotation=-90}}));//将链表单元的箭头角度改为-90,使其朝上timeLineLite.append(newTweenLite(arrArrow[index],2,{scaleX:1}));//设置前一个链表箭头的水平比例为1}else{timeLineLite.append(newTweenLite(cell.icon,1,{alpha:1}));//设置链表单元角的透明度为最大timeLineLite.append(newTweenLite(icon,1,{alpha:0}));//设置前一个链表角的透明度为最小timeLineLite.append(newTweenLite(arrow_up,2,{scaleX:1}));//设置朝上箭头的水平比例为最大}}3、删除操作的代码设计(1)界面初始化,在InsertView.as初始化方法中对元件初始化,生成各节点核心代码如下:for(varj:int=0;j2;//后面两个链表单元的角元件可见if(j==3)cell.icon.alpha=0;//第四个链表单元的角设为透明cell.arrow.visible=cell.img.visible=false;//隐藏链表单元不相关的元件cell.arrow_right.visible=j!=4;//设置最后一个链表单元的箭头为可见}btn_delete.addEventListener(MouseEvent.CLICK,onClicked);btn_recome.addEventListener(MouseEvent.CLICK,onClicked);21 btn_return.addEventListener(MouseEvent.CLICK,onClicked);timer.addEventListener(TimerEvent.TIMER,onTimer);timer.addEventListener(TimerEvent.TIMER_COMPLETE,timerCompleteEvent);(2)在鼠标事件方法中对插入按钮作相应效果,如果点击删除按钮,则进行指针动作,完成删除动画。如果点击重来按钮,返回到主删除界面。核心代码如下:privatefunctiononClicked(e:MouseEvent):void{switch(e.target){casebtn_delete:doAction();//播放动画break;casebtn_recome:vara:Array=[,0,1,2,3,4];//设置索引器timeLinelite.kill();//停止播放器的工作arrow_P.visible=false;//隐藏指针arrow_P.x=arrPosX_arrow_P[0];//初始化指针坐标arrow_curve.scaleX=0;//初始化弯曲箭头的水平比例if(index>1)(arrCell[a[index-1]]asCellUI).arrow_right.scaleX=1;//初始化链表单元朝右箭头的水平比例(arrCell[a[index]]asCellUI).arrow_right.scaleX=1;//设置链表单元右箭头的水平比例(arrCell[a[index]]asCellUI).alpha=1;///设置链表单元右箭头的透明度(arrCell[a[index]]asCellUI).x=arrPosX_cell[a[index]];//初始化X坐标(arrCell[a[index]]asCellUI).y=146;//初始化Y坐标(arrCell[a[index]]asCellUI).txt.alpha=1;//显示链表单元文本内容container.alpha=1;//设置容器的透明度container.scaleY=0;//设置容器的水平比例container.y=228;//设置容器的Y坐标arrow_0.scaleX=1;//初始化第一个链表单元的水平比例btn_delete.mouseEnabled=btn_return.mouseEnabled=true;21 //将按钮设为可用break;casebtn_return:visible=false;//设置当前界面不可见dispatchEvent(newChildClassEvent(ChildClassEvent.Back));//派发返回主界面事件break;default:break;}}(3)指针移动动画实现:privatefunctiontimerCompleteEvent(e:TimerEvent):void{vara1:Array=[,,0,1,2,3,4];//前一个单元链表的索引(对要移除的单元链表而言)vara2:Array=[,0,1,2,3,4];//要移除的单元链表的索引varoffsetPoint:Point=newPoint();timeLinelite=newTimelineLite();//创建播放器container.x=arrPosX_container[a2[index]];//初始化容器的坐标offsetPoint.x=container.x-arrCell[a2[index]].x;//设定箭头容器的x坐标(要移除的单元链表下面的)offsetPoint.y=container.y-arrCell[a2[index]].x-24;timeLinelite.append(newTweenLite(container,2,{scaleY:1}));if(index==5)timeLinelite.append(newTweenLite((arrCell[a2[index]]asCellUI).icon,1,{alpha:0}));//最后一个单元链表的角消失if(index==1){timeLinelite.append(newTweenLite(arrow_0,2,{scaleX:0}));//如果移除的是第一个单元链表将前面棕色的单元链表的指向右的箭头缩短}else{21 timeLinelite.append(newTweenLite((arrCell[a1[index]]asCellUI).arrow_right,2,{scaleX:0}));}if(index==5)timeLinelite.append(newTweenLite((arrCell[a1[index]]asCellUI).icon,1,{alpha:1}));//倒数第二个单元链表的角显示if(index!=5)timeLinelite.append(newTweenLite(arrow_curve,2,{scaleX:1,onStart:function():void{arrow_curve.x=arrPosX_curveArrow[index]}}));//上面那个大的弯曲的箭头伸展if(index!=5)timeLinelite.append(newTweenLite((arrCell[a2[index]]asCellUI).arrow_right,2,{scaleX:0}));//除最后一个其他的单元链表指向右的箭头缩短timeLinelite.appendMultiple([newTweenLite(arrCell[a2[index]],1,{y:PosY}),newTweenLite(container,1,{y:PosY+78})]);}//要移除的单元链表连同下面黄色弯曲的箭头一起向下移动timeLinelite.appendMultiple([new TweenLite(arrCell[a2[index]],2,{alpha:0,y:389}),new TweenLite((arrCell[a2[index]] as CellUI).txt,0.5,{alpha:0}),new TweenLite(container,2,{alpha:0,y:389+78})]);//要移除的单元链表连同下面黄色弯曲的箭头一起向下移动至存储池二)动画运行在2位置插入数据为5的节点之后,我们能够观看到的动画是插入节点的指针先指向a2节点,a1的后继指向插入节点,整个插入操作就完成了,完成后的界面如图3.621 图3.6删除第三个位置上的节点,首先P指针找到第二个节点,然后a2的后继指向它后继的后继,删除后的节点进入存储池,整个删除操作完成之后的界面如图3.721 图3.7四、存在的问题和不足一)在整体设计中,界面设计不是那么美观,有待改进。二)动画中没能实现声音功能,在教学演示中如果边演示动画边有声音播放,对于理解会有很大的帮助,由于本次设计时间和能力有限,未能够实现这部分的功能。三)当插入的位置越界时,没有提醒插入位置不正确提示框弹出。四)只能进行一次性的插入和删除操作。五、结语教学动画的制作仍有不足的地方,但经过这次的设计,我学会了如何独立的进行21 一个动画设计,了解了常见的图形和动画程序的实现方法,并且实现了链表基本操作的动画演示,在此期间无论是对ActionScript脚本编程还是对数据结构都有了更深的理解,编程能力有了很大的提高,对于MornBuilder和FlashBuilder软件的使用更加的熟悉。在设计的过程中遇到过很多问题,比如安装MornBuilder时不能正常运行,需要安装Java之后才能正常运行,timeLinelite类中的append、insert等方法是使用不是太会,这些问题都是以前没有遇到过的,通过查阅书籍和询问同学老师解决,这次的毕业设计进行的时间比较长,主要是因为对于as3.0语言不太熟悉,并且没有用过FlashBuilder软件,但最终还是设计出来了。本论文对于链表操作的动画演示在教学中能够帮助我们更好的学习数据结构,在未来的教学过程中会有很大的发展前景,作者会对其继续研究和探讨,相信在未来还可以做得更好。此类动画演示必将随着自身技术和设计上的更大的进步,展现出更为广阔的前景和未来。六、谢辞在本论文的写作过程中,遇到过很多问题,比如,链表操作演示动画用哪种软件设计,开始绕了很多弯路,后来确定用FlashBuilder做之后进行得也不太顺利,对于ActionScript脚本语言的不熟悉,也使得毕业设计进行的比较慢,在这样一种情况下,多亏指导老师吴海涛对我的详细指导和耐心沟通,使得我能够比较顺利地完成本次的毕业设计,无论是从选题到开题报告,还是从写作提纲到一遍又一遍的指出每稿中的具体问题指导老师都给予了我非常大的帮助,指导老师的严格把关,循循善诱,严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。没有这样的关心帮助和熏陶,我是不会这么顺利地完成毕业设计,在此我向吴海涛指导老师表示衷心的感谢。同时,我还要对在大学四年期间给我极大关心和支持的各位老师以及关心我的同学和朋友表示由衷的谢意,感谢四年来对我的关心和帮助。四年的交大生活给予我许多珍贵的财富,教会我许多难能的品质。写作毕业论文是一次再次系统学习的过程,毕业论文的完成,对于我们今后的工作会有很大的帮助,通过这次毕业设计,我们不紧学会了很多的基础知识,编程知识,更重要的是,我们学会了自主学习的能力,这种能力对于离开学校即将步入社会的大学生是非常重要的。毕业设计的完成不紧是对于整个大学的生活画上的完美句号,同样意味着新的学习生活的开始。在今后的人生道路上,我们应该秉着精勤求学,敦笃励志,果毅力行,忠恕任事,坚持不懈,精益求精的态度勇敢地不断前行。七、参考文献[1]严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,2003.[2]严蔚敏,吴伟民.数据结构题集(C语言版).北京:清华大学出版社,2004.[3]NellB.Dale.C++PlusDataStructures,ThirdEdition.JonesandBartlettPublishers,Inc.,2003.[4]RickParent.刘祎译.张鹏.计算机动画算法与技术(第2版).北京:清华大学出版社,2007.12[5]雍俊海.计算机动画算法与编程基础.北京:清华大学出版社,2008.7[6]DavidGeary.爱飞翔译.HTML5Canvas核心技术:图形、动画与游戏开发.北京:机械工业出版社,2013.221 [8]黄同成,周红波.程序设计基础教程(c语言)[M].长沙:湖南人民出版社,2012.1[9]黄同成,黄磊.程序设计实践教程(c语言)[M].长沙:湖南人民出版社,2012.1[10]谭浩强.c程序设计(第三版)[M].北京:清华大学出版社,2005[11]耿国华.数据结构--用c语言描述[M].北京:高等教育出版社,2011.6[12]唐策善.数据结构--用c语言描述[M].北京:高等教育出版社,1995[13]苏德富.数据结构语言(C语言)[M].重庆:重庆大学出版社,2001[14]陈维兴,林小茶.C++面向对象程序设计教程(第三版)[M].清华大学出版社,2009[15]李根强.数据结构(第2版)[M].中国水利水电出版社,2009[16]AtallahBlanton.General_Concepts_and_Techniques_2nd,1995[17]AhoAV,HopcroftJE,UllmanJD.DataStructuresandAlgorithms[M].American:Addison-WesleyPublishingCompany,1983,18-96[18]BaronRJ,ShapiroLG.DataStructuresandtheirImplementation[M].American:VanNostrandReinholdCompany,1980:32-110.源文件联系八幺零幺久久八八六(Q)21 本科毕业设计(论文)开题报告学生姓名学号专业班级指导教师职称单位课题性质设计□论文□课题来源科研□教学□生产□其它□毕业设计(论文)题目开题报告(阐述课题的目的、意义、研究现状、研究内容、研究方案、进度安排、预期结果、参考文献等)一、论文研究的目的、意义1、现实意义:指出现实当中存在这个问题,需要去研究,去解决,本课题的研究有什么实际作用。2、理论意义:论文的理论和学术价值。二、研究现状1、国内研究现状:(国内对此课题研究到了什么程度)2、国外研究现状:(国外对此课题研究到了什么程度)三、研究内容此部分即为论文大纲(大纲格式如下:)绪论(论文研究的目的、意义论文研究的内容论文的研究方法)1.。。。。。(只写该标题的名称即可)1.1.。。。1.1.1.。。。。1.2.。。。。1.2.1.。。。。2.1.。。。2.1.1.。。四、研究方案此部分内容为研究方法,即通过何种途径完成本篇论文。如观察法、调查法、实验法、 经验总结法、个案法、比较研究法、文献资料法等。在介绍方法时简单写一下通过此方法研究出了什么内容。五、进度安排在毕业任务书中有,粘贴过即可。六、预期结果本部分为你的论文预期达到什么程度。(即达到本科毕业论文答辩水平)七、参考文献参考文献的格式一定要写对。1、期刊格式:[序号]主要责任者.文献题名[J].刊名,年,卷(期):起止页码.如:[1]周颖,王姣.谈邮政储蓄银行对银行业竞争格局的影响[J].商业时代,2006[2]景玉琴.构建中小企业政策性金融支持体系[J].上海金融学院学报,20042、著作格式:[序号]主要责任者.文献题名[文献类型标识].出版地:出版者,出版年.起止页码.如:[1]陈晓红.中小企业融资[M]北京.中国金融出版社,20013、报纸文章:[序号]主要责任者.文献题名[N].报纸名,出版日期(版次).4、电子文献:[序号]主要责任者.电子文献题名[电子文献及载体类型标识].电子文献的出处或可获得地址,发表或更新日期/引用日期(任选). 指导教师意见:指导教师签名:年月日教研室意见:审查结果:同意□不同意□教研室主任签名:年月日 电子科技大学毕业设计(论文)成绩考核表题目:教学中心:学生姓名:学号:专业:指导教师:职称:所在单位: 指导教师意见:签字:年月日评审意见:评阅人:年月日 答辩意见:答辩小组组长签名:年月日毕业设计(论文)成绩1.设计说明书(论文报告)分总分:(等级:)2.答辩分3.平时成绩分学校意见:年月日1.学生毕业设计(论文)正本存教学中心。2.本表一式两份,一份存入学生档案,一份学校存档。3.此表须用钢笔填写。 附件2:2008级统招本科生毕业论文(设计)中期检查表(学生用表)学院检查时间年月日论文题目指导教师学生姓名专业班级学号目前已完成的任务是否符合任务书要求的进度是否尚需完成的任务能否按期完成任务能不能存在的问题及拟采取的办法存在的问题拟采取的办法对指导教师的建议学生(签名):年月日 本科生毕业论文(设计)中期检查表(教师用表)学院检查时间年月日论文题目指导教师学生姓名专业班级学号指导情况指导方式工作进度完成情况提前完成按计划完成延期完成没有完成质量评价(学生前期已完成的工作的质量情况)优良中差工作态度情况(学生对毕业论文的认真程度、纪律及出勤情况)认真较认真一般不认真选题是否有变化有无选题变化原因目前存在的问题,拟采取解决问题的方案及措施对该同学阶段性工作的评价指导教师(签名):年月日(此表一式两份,一份学院存档,一份交教务处实践科存档。) 致谢我历时将近两个月时间终于把这篇论文写完了,在这段充满奋斗的历程中,带给我的学生生涯无限的激情和收获。在论文的写作过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了。在校图书馆查找资料的时候,图书馆的老师给我提供了很多方面的支持与帮助,尤其要强烈感谢我的论文指导老师—XX老师,没有她对我进行了不厌其烦的指导和帮助,无私的为我进行论文的修改和改进,就没有我这篇论文的最终完成。在此,我向指导和帮助过我的老师们表示最衷心的感谢! 同时,我也要感谢本论文所引用的各位学者的专著,如果没有这些学者的研究成果的启发和帮助,我将无法完成本篇论文的最终写作。至此,我也要感谢我的朋友和同学,他们在我写论文的过程中给予我了很多有用的素材,也在论文的排版和撰写过程中提供热情的帮助! 金无足赤,人无完人。由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和同学批评和指正!'