AS2.0中实现数据结构-哈希表
2008-04-02 10:55:53来源:互联网 阅读 ()
在游戏制作中我们经常需要存储一些离散的对象数据,比如道具箱里的道具,经常需要执行插入和删除操作,而且道具之间没有联系是无序排列的.有些人会说直接用数组不就得了,但是有大量数据存储时的数组的删除插入操作的效率是很低的。
因此我们需要哈希表这样的能够提供快速的插入和删除,查找操作的数据结构,不论哈希表中有多少数据,插入和删除操作只需要接近常量的时间:即O(1)的时间级。
既然这么好那么我们的AS能够实现吗?当然能够!AS发展到AS2.0,已成为在语法上更接近于Java Pascal的面向对象的语言.如今,伴随着Flash8的发行,使得这种脚本语言添加了运行速度更加快捷,后台技术连接的更加方便等长处.因此我们完万能够用AS来实现一些常用数据结构。
首先我们先要实现有序链表,顾名思义,链表就是一种像链相同的数据结构,类似数组,但是不同的是链表每个节点一般都至少包括一个数据项和一个指向下个节点的指针,而且有序链表的数据是按顺序排列的。
建议大家把类都放到包里,这样便于以后查找和使用,这里我把这些类放在名为util的包里面.
有序链表的实现:
链表结点类:
{
publicvariData;//dataitem(key)
publicvardData;
publicvarnext:util.Link;//nextlinkinlist
//------------------------------------------------------------
publicfunctionLink(id,dd)//constructor
{
iData=id;//(’next’isautomatically
dData=dd;
}//settonull)
//------------------------------------------------------------
publicfunctiondisplayLink():Void//displayourself
{
trace("{" iData "," dData "}");
}
}//endclassLink
import util.Link;//注意要导入我们前边的Link类!
{
privatevarfirst:Link;//reftofirstlistitem
//------------------------------------------------------------
publicfunctionSortedList()//constructor
{first=null;}
//------------------------------------------------------------
publicfunctioninsert(theLink:Link):Void//insertlink,inorder
{
varkey=theLink.iData;
varprevious:Link=null;//startatfirst
varcurrent:Link=first;
//untilendoflist,
while(current!=null&&key>current.iData)
{//orcurrent>key,
previous=current;
current=current.next;//gotonextitem
}
if(previous==null)//ifbeginningoflist,
first=theLink;//first-->newlink
else//notatbeginning,
previous.next=theLink;//prev-->newlink
theLink.next=current;//newlink-->current
}//endinsert()
publicfunctiondeleteD(key):Void//deletelink
{//(assumesnon-emptylist)
varprevious:Link=null;//startatfirst
varcurrent:Link=first;
//untilendoflist,
while(current!=null&&key!=current.iData)
{//orkey==current,
previous=current;
current=current.next;//gotonextlink
}
//disconnectlink
if(previous==null)//ifbeginningoflist
first=first.next;//deletefirstlink
else//notatbeginning
previous.next=current.next;//deletecurrentlink
}//enddelete()
//------------------------------------------------------------
publicfunctionfind(key):Link//findlink
{
varcurrent:Link=first;//startatfirst
//untilendoflist,
while(current!=null&¤t.iData<=key)
{//orkeytoosmall,
if(current.iData==key)//isthisthelink?
returncurrent;//foundit,returnlink
current=current.next;//gotonextitem
}
returnnull;//didn’tfindit
}//endfind()
//------------------------------------------------------------
publicfunctiondisplayList():Void
{
trace("List(first-->last):");
varcurrent:Link=first;//startatbeginningoflist
while(current!=null)//untilendoflist,
{
current.displayLink();//printdata
current=current.next;//movetonextlink
}
trace("");
}
}//endclassSortedList
哈希表类:
importutil.Link;//注意要导入我们前边的Link类!
importutil.SortedList;//注意要导入我们前边的SortedList类!
classutil.HashTable
{
privatevarhashArray:Array;//arrayoflists
privatevararraySize:Number;
//------------------------------------------------------------
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 涂鸦板块使用详解
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash