`
hereson
  • 浏览: 1449713 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

flash as3打造双向链表

阅读更多

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

package {

    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 + "]";
        }
    }
}

分享到:
评论

相关推荐

    支持类模版的C++双向链表

    在C++编程中,双向链表是一种非常重要的数据结构,它允许在列表的任一位置进行插入和删除操作,而不必像数组那样依赖于索引。在这个“支持类模版的C++双向链表”中,我们将探讨如何利用C++的模板特性来实现一个灵活...

    创建双向链表_双向链表_

    3. 插入节点:在双向链表中插入节点有两种情况:在头部插入和在尾部插入。在头部插入时,新节点的`next`指针应指向当前头节点,而原头节点的`prev`指针则应指向新节点。在尾部插入时,需要找到当前尾节点,新节点的`...

    Linux内核双向链表简单分析

    ### Linux内核双向链表简单分析 #### 链表数据结构简介 链表作为一种基本且重要的数据结构,在操作系统及各种软件系统中扮演着至关重要的角色。尤其在Linux内核中,链表更是广泛应用于内存管理、进程调度、文件...

    双向链表的操作

    双向链表的操作问题 Time Limit: 1000MS Memory Limit: 10000KB Submissions: 111 Accepted: 41 Description 建立一个长度为n的带头结点的双向链表,使得该链表中的数据元素递增有序排列。(必须使用双向链表完成...

    数据结构-双向链表

    3. 访问操作:访问双向链表中的特定节点,可以通过从表头开始或表尾开始遍历,直到找到目标节点。由于双向链表可以双向遍历,因此访问速度较快。 4. 查找操作:在双向链表中查找特定元素,可以采用顺序查找,从表头...

    java 单链表和双向链表的实现

    本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...

    数据结构源代码之双向链表

    ### 数据结构源代码之双向链表 #### 概述 本文档主要介绍如何通过C语言实现双向链表的基本操作。继单链表之后,双向链表作为一种更灵活的数据结构,支持从前向后以及从后向前的遍历。双向链表在每个节点中除了包含...

    C++双向链表统计文章单词出现频率

    在这个特定的项目中,“C++双向链表统计文章单词出现频率”是一个涉及数据结构和算法的应用,目标是实现一个程序来分析文本文件,计算并显示文章中每个单词出现的次数。双向链表作为数据结构的核心,其特点是每个...

    双向链表双向链表双向链表

    双向链表是一种高级数据结构,它在计算机科学中被广泛应用于各种算法和程序设计中。与单链表相比,双向链表的主要特点是每个节点不仅包含指向下一个节点的指针,还包含一个指向前一个节点的指针。这种设计使得双向...

    数据结构 双向链表(C++)

    双向链表是一种特殊的数据结构,它在计算机程序设计中扮演着重要角色,特别是在C++这样的编程语言中。本节将深入探讨双向链表的概念、其结构、操作以及C++中的实现。 双向链表与单链表不同,它允许每个节点不仅有一...

    stm32f103 双向链表

    在这个项目中,我们讨论的是如何在STM32F103上实现一个双向链表的数据结构。双向链表是一种特殊的数据结构,它允许我们在列表中的节点之间进行前向和后向的移动,这在处理动态数据集合时非常有用。 首先,我们要...

    操作系统课设-线程安全的双向链表

    3. **遍历操作**:虽然遍历链表本身不需要锁定,但如果遍历过程中尝试修改链表(例如删除节点),则必须进行同步,确保遍历过程中链表不会被其他线程修改。 4. **条件变量**:在某些情况下,可能需要等待特定条件...

    C++经典算法 双向链表

    ### C++经典算法:双向链表 在计算机科学领域中,数据结构是极其重要的基础知识之一。其中链表作为一种常见的线性表实现方式,在各种应用场景中都有广泛的应用。本篇文章将根据给定的代码片段深入探讨双向链表的...

    双向链表.cpp 双向链表类定义及测试代码 c++

    双向链表类定义及测试文件 对应于数据机构与算法分析(c++版)第三版或第二版 Clifford A.Shaffer 重庆大学使用教材

    大数阶乘 双向链表

    3. **乘法算法**:我们需要设计一个算法来实现两个链表表示的大数相乘。可以采用类似于笔算乘法的方法,但需要考虑到链表的特性。这个算法可以分为以下几个步骤: - 分别遍历两个链表,记录当前遍历到的位数。 - ...

    双向链表的增删改查

    3. 删除操作:根据给定的值删除链表中的第一个匹配节点。删除节点时需要调整相邻节点的指针。 ```cpp void remove(int value) { Node* current = head; while (current) { if (current->data == value) { if ...

    双向链表的C++实现

    双向链表是一种重要的线性数据结构,与单链表不同,它在每个节点中都包含两个指针,一个指向前一个节点,另一个指向后一个节点。这种设计允许双向遍历,使得插入和删除操作更加灵活。在本主题中,我们将深入探讨如何...

    用双向链表做的n的阶乘

    在编程领域,双向链表是一种数据结构,它允许在列表中的元素之间进行前向和后向的导航。这种数据结构在处理需要频繁插入、删除或遍历操作的问题时特别有用。而“n的阶乘”是数学概念,表示1到n的所有整数的乘积,记...

    双向链表实现结点类

    定义、实现并测试一个双向链表结点类DNode。...编写主程序:输入不少于3组x、y整数,分别利用左侧和右侧插入结点函数组织数据为双向链表,测试输出链表中每个结点的左侧和右侧相邻节点内容,测试对左右侧结点的删除。

Global site tag (gtag.js) - Google Analytics