首页  韩国资源  酷站加油  我的展厅  设计名站  古典元素  推荐下载  设计欣赏  每周专访  招募精英  人才专区  网页教程  平面设计  编程开发  设计竞赛
当前位置:首页 > 网页教程 > Flash教程 > 正文
Google
双向链表(AS3)
来源:闪吧 作者:makyoo 2008年02月25日 17:52 网友评论:0条 点击:

数据结构中的双向链表,用AS3写成了类,很有用的东西,可能有些非程序出身的flasher 并不了解的数据结构。如果把数组理解为把数据排成队,那么链表就是手拉手的排队,不过每个人只知道自己,还有自己的前面与后面,如果用类的思想来理解就是:有三个数据属性的对象:1、自己 2、自己后面的人 3、自己前面的人 和对这些属性进行操作的方法。希望对大家有用 这样的结构在频繁 删除和插入数据时效率会比数组高很多。
makyoo 2008.1
----
www.makyoo.cn

package { //makyoo QQ:84407979 [url]http://www.makyoo.cn[/url]
    public class DoubleNode {
        //双向链表, double list node
        private var _data:*;
        private var _prev:DoubleNode;
        private var _next:DoubleNode;
        //标志是否已在链表中
        private var _hasIN:Boolean=false;
       
//@initData:结点初始值, the node’ data;
        public function DoubleNode(initData:*) {
            _data = initData;
            _prev = _next = null;
        }
        //this node has in link
        public function get hasIN():Boolean {
            return _hasIN;
        }
        public function set hasIN(boolean:Boolean):void {
            _hasIN=boolean;
        }
        //后继节点
        public function get next():DoubleNode {
            return _next;
        }
        //前驱节点
        public function get prev():DoubleNode {
            return _prev;
        }
        //设定后继
        public function set next(newNode:DoubleNode):void {
            _next = newNode;
        }
        //设定前驱
        public function set prev(newNode:DoubleNode):void {
            _prev = newNode;
        }
        //取得当前结点数据, return the node’s data
        public function get nodeData():* {
            return _data;
        }
        //设置当前结点数据, set the node‘s data
        public function set nodeData(newData:*):void {
            _data = newData;
        }
        //在当前节点后插入结点, append a new node after current node
        public function addAfter(newNode:DoubleNode):void {
            newNode.next = _next;
            newNode.prev = this;
            if (_next!=null) {
                _next.prev = newNode;
            }
            _next = newNode;
            newNode.hasIN=true;
        }
        //在当前节点前插入结点, append a new node before current node
        public function addBefore(newNode:DoubleNode):void {
            newNode.next = this;
            newNode.prev = _prev;
            if (_prev!=null) {
                _prev.next = newNode;
            }
            _prev = newNode;
            newNode.hasIN=true;
        }
        //返回当前数组长度, get the length of the node
        public function get nodeLength():uint {
            var cursor:DoubleNode;
            var length:uint = 1;
            for (cursor = _prev; cursor != null; cursor = cursor.prev) {
                length++;
            }
            return length;
        }
        //从双向链表中脱离。 get out of link to the double-node
        public function unlink():void {
            if (_prev!=null) {
                _prev.next = _next;
            }
            if (_next!=null) {
                _next.prev = _prev;
            }
            _next = _prev = null;
            _hasIN=false;
        }
        //描述当前double-node, rerurn a string represent the double-node
        public function toString():String {
            return "[DoubleNode, data=" + _data + "]";
        }
    }
}

上一篇:线条效果(AS)   下一篇:利用flash实现产品分类检索
收藏此页】【打印】【关闭
 相关文章  我要点评

免责声明:本站刊载此文不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。对本文有任何异议,请联络:68design#163.com
转载要求:作者及来源信息必需保留。转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印。



关于我们 | 在线反馈 | 广告报价 | 友情链接 | 联系我们 | 免责声明 | 在线投稿 | 网站地图
Copyright © 2003-2007 68design.net, All Rights Reserve 【找网页设计师,当然上网页设计师联盟】