[AS2,数据结构]队列的实现: (Implementation Data Structure in ActionScript2.0---Queue)

[AS2,数据结构]队列的实现: (Implementation Data Structure in ActionScript2.0---Queue)

                                                                                                  By EmilMatthew   05/9/6

ActionScript2.0,一种在语法上接近于Java + Pascal的面向对象的脚本语言.如今,伴随着Flash8的发行,使得这种脚本语言添加了运行速度更加快捷,后台技术连接的更加方便等优点.

Flash Player的普及性及高传播性更是无庸置疑的.所以,只要你愿意的话,就可以在Flash中实现自己的梦想.

       今天,我要开始一个新的系列---数据结构及经典算法在AS2中的实现,置于数据结构及算法有什么用吗?呵呵,需要的人一定有用,不需要的人不学也无妨啊.感兴趣的朋友就请继续吧.

       1队列的解释:

       队列是什么?想像一下你排队买午饭的情形,如果没有人插队的话,应该项是先来的人先买饭,然后离开队伍,而后来的人呢,只能排在队伍的未尾.这样的一种情形,便是队列的最好说明.

       有关队列的一些细节上的内容请,请参考:

http://www.fosu.edu.cn/gong/schoolweb/class/023142/news/2004-3-31/200433118453.htm

http://zh.wikipedia.org/wiki/%E8%B2%AF%E5%88%97

我这里主要是给出我的队列在AS2中的实现:

       请参考我做的演示:

       http://www.flash8.net/bbs/UploadFile/2005-9/200596125130843.swf

a)首先给出的是结点类,由于AS2的很多机制和JAVA非常类似,所以,它构造的数据结构很大程度上非常接近JAVA风格的数据结构.

import eQueue.*;

class eQueue.eNode extends eObject

{

       public var mData:Object;

//充分利用动态语言的特性,得到一个什么都数据类型的数据都可以包含进去的队列,

       public var mNextNode:eNode;

      

       public function eNode(inData:Object)

       {

              if(inData==undefined||inData==null)//针对没有传入参数的处理

                     mData=0;

              else

                     mData=inData;

              mNextNode=null;

       }

}

b)第二个给出的是队列类的主类定义:

import eQueue.*;

class eQueue.eQueue extends eObject

{

       private var mFrontNode:eNode;

       private var mRearNode:eNode;

      

       public function eQueue(inData:Object)//Constructor

       {

              mFrontNode=new eNode(inData);

              mFrontNode.mNextNode=mRearNode;

       }

      

       public function isEmpty():Boolean

       {

              return mFrontNode==null;

       }

      

       public function front():Object

       {

              assertDebug(mFrontNode!=null,"the front node is null/n");

              return mFrontNode.mData;

       }

      

       public function last():Object

       {

              assertDebug(mRearNode!=null,"the last node is null/n");

              return mRearNode.mData;

       }

      

       public function enQueue(inData:Object):Void//进队列

       {

              if(mFrontNode==null)//front:null,rear:null

                     {

                            mFrontNode=new eNode(inData);

                     }

              else if(mRearNode==null)//front:unNull,rear:null

                     {

                            mRearNode=new eNode(inData);

                            mFrontNode.mNextNode=mRearNode;

                     }

              else //front:unNull,rear:unNull.

                     {

                            var tmpNode:eNode=new eNode(inData);

/*Aoply new mem for a node,注意,正是这种申请内存的方式可以实现,才导致这种基于链表的,具有极高柔韧性的队列得以实现.*/

                            mRearNode.mNextNode=tmpNode;

                            mRearNode=tmpNode;

                     }

       }

      

       public function deQueue():Object

       {

              assertDebug(mFrontNode!=null,"in dequeue,mFrontNode is null/n");

             

              var tmpData:Object=new Object();

              var tmpNode:eNode=new eNode(0);

             

              tmpNode=mFrontNode.mNextNode;

              tmpData=mFrontNode.mData;

             

              if(mFrontNode==mRearNode)

       {//if the queue only has one node,and both front and rear point to it.

 

                            delete mFrontNode;

                            delete mRearNode;

                            mFrontNode=null;

                            mRearNode=null;

                     }

              else         //norm condition,including front:unNull,rear:null

                     {

                            delete mFrontNode;//release the unused mem.

                            mFrontNode=tmpNode;

                     }

              return tmpData;

       }

      

      

       public function traversal():Void//遍历队列元素

       {

              var tmpNode:eNode=new eNode();

              tmpNode=mFrontNode;

              trace3("==starting of queue traversal==/n");

              while(tmpNode)

                     {

                            trace3(String(tmpNode.mData)+"/n");

                            tmpNode=tmpNode.mNextNode;

                     }

              trace3("==end of queue traversal==/n");

             

              tmpNode=null;

              delete tmpNode;

       }

      

       public function getLen():Number//返回队列长度

       {

              var tmpNode:eNode=new eNode();

              var num:Number=0;

             

              tmpNode=mFrontNode;

             

              while(tmpNode)

              {

                     tmpNode=tmpNode.mNextNode;

                     num++;

              }

             

              delete tmpNode;

              return num;

       }

      

      

       public function finallize():Void//release the queue mem,内存回收与释放.

       {

              var tmpNode:eNode=new eNode();

              //assertion if mFrontNode is null is  no needed.

              while(mFrontNode)

              {

                     tmpNode=mFrontNode.mNextNode;

                     mFrontNode=null;

                     delete mFrontNode;//free the mem.

                     mFrontNode=tmpNode;

              }

              delete mRearNode;

       }

      

}

 

c)好了,这就是我用AS2实现的最基本的队列这种数据结构了,如果你发现它有什么BUG或者有什么改进意见,请一定要告诉我哟~~~~

我的演示程序的源码下载:

http://free3.e-168.cn/as2forward/downloads/as2Queue.rar

//如果上面这个链接无法响应下载(有可能是被网站给屏蔽掉了),则可使用下载工具(如迅雷等)下载。

 

      

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值