http://www.nshen.net/dataStructure/2011/08/25/AS3-DataStructure.html

上面是nshen原文的链接,由于本人是软件工程软件维护方向,所以最近关注一下代码的积累与重用,同时也是为了以后正式走向开发岗位做些练习,可以将nshen总结的数据结构直接积攒起来以后重用:),我读了这篇文章,感觉写的很好,尤其是其中对游戏sprite的四叉树碰撞检测,这个在我当年直研考试曾经弄过一把四叉树,所以感觉很实用。下面是基于这篇文章做些个人的修改。

首先双向链表部分的get()方法,由于是双向链表,那么在遍历的时候就有正向遍历和反向遍历之分,在获取某个位置的元素时,如果该元素的index在链表的前一半,用正向遍历效率较高,后一半用反向遍历,所以我修改了get()方法如下。当然在链表很大的时候这样分别遍历效率会提高很多,如果链表较小则无所谓了

public function get(Index:uint):*
{if(this._length <=0 || Index<0 || Index>this._length-1){return null;}var n:DListNode;
/**
*优化了一下,根据index为前一半还是
*后一半选择正向遍历还是反向遍历
**/if(Index <= _length/2){n = this.head;var i:uint = 0;while(i<Index){i++;n=n.next;}}else {n = this.tail;var i:uint = _length-1;while(i > Index){i--;n=n.prev;}}return n.data;
}

另外nshen的代码中将tree转化成xml的时候,有个toXML方法,之前代码如下(我做过一点修改,下面会说)

/*** 输出xml能直接赋值给Flex的Tree组件的dataProvider属性** 这段代码谁能看懂我服他,我自己都看不太懂,有好方法记得通知我。。。*/public function toXML(Node:Tree = null):XML{var xmlStack:Array=[ ];if(Node == null)Node = this;var stack:Array = [Node];var s:String = "";while(stack.length>0){var t:* = stack.pop();if(t is String){s+=t;}else{t = Tree(t);s+="<node label='"+t.data+"'>";if(t.children.length>0){stack.push("</node>");}else{s+="</node>";}var itr:DListIterator = t.children.getIterator();itr.end();while(itr.hasPrev()){stack.push(Tree(itr.node.data))itr.prev();}}}return new XML(s);}

nshen提出了求好方法,于是我就献丑下。

发现其实那个方法是用栈来实现递归,由于xml文件的特殊性(需要一对标签),所以非递归的实现方式逻辑上就复杂了点,要将 入栈还要判断出栈的是否为字符串,于是我实现了个递归的方式。用栈实现非递归因为栈的后进先出特性,所以用的逆向遍历以达到和构建的树一样的节点顺序,用递归我就改成了正向遍历,关于字符串的+=和concat()的效率问题,我暂时假定的是不考虑+=效率是否低下。

所以说递归用在树形遍历真是舒服:)

另外nshen中toxml方法有个参数,感觉不太舒服,于是我修改成了参数默认值为null,如果默认值为null,下面用if(Node == null)Node = this;判断改成this。这样如果只是想将树的某棵子树toxml就传参好了,否则就像调用toString()一样直接调用,默认将本实例toxml。

我用递归实现的toxml方法如下:

        public function toXML2():XML{var s:String = "";s = genXML(this);return new XML(s);}protected function genXML(t:Tree):String{var s:String = "";s += "<node label='"+t.data+"'>";var itr:DListIterator = t.children.getIterator();itr.start();while(itr.hasNext()){s+=genXML(Tree(itr.node.data));itr.next();}s += "</node>";return s;}

代码改的匆匆,跑了下nshen的测试用例,发现没错误就没有再检查,如果有程序有其他错误请联系我:)

AS3的数据结构知识(参考Nshen的文章)相关推荐

  1. GitHub标星3w+的项目,全面了解算法和数据结构知识

    作者 | 程序员小吴 来源 | 五分钟学算法(ID: CXYxiaowu) 导语:今天分享一个开源项目,里面汇总了程序员技术面试时需要了解的算法和数据结构知识,并且还提供了相应的代码,目前 GitHu ...

  2. java数组、集合和数据结构知识*

    为什么80%的码农都做不了架构师?>>>    一.数据结构知识.数据结构分为逻辑结构和物理结构,下面是百度百科的数据结构知识. 数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结 ...

  3. eps倾斜摄影矢量化采集毕业设计_eps倾斜摄影矢量化dlg采集#知识参考

    eps倾斜摄影矢量化dlg采集#知识参考 一.背景1.倾斜摄影测量倾斜摄影测量和我们传统影像的区别:从数据采集的方式来看,传统影像是通过飞机上搭载的航摄仪对地面连续摄取相片,而后经过一系列的内业处理得 ...

  4. 【数据结构】数据结构知识思维导图

    From:https://blog.csdn.net/flowing_wind/article/details/81431354 思维导图源文件: 链接:https://pan.baidu.com/s ...

  5. 搜索用计算机弹奏9277的数字,计算机基础知识参考试题(含答案)

    计算机基础知识参考试题(含答案) 计算机基础知识参考试题及答案解析 一.单选题 1.1946年诞生的世界上公认的第一台电子计算机是( ENIA). 2.第一台计算机在研制过程中采用了哪位科学家的两点改 ...

  6. 使用计算机需要准备硬件和什么,2017年计算机硬件知识参考试题

    2017年计算机硬件知识参考试题 高效率的复习方法能让考生们更快地进入备考状态,下面是百分网小编为大家准备的2017年计算机硬件知识参考试题,下面是百分网小编分享的一些相关资料,供大家参考. 一. 单 ...

  7. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  8. 广东工业大学数据结构AnyView参考答案

    广东工业大学数据结构AnyView参考答案 觉得还行,请点赞关注,您的点赞,我的动力! 1.第一章 #include "allinclude.h" //DO NOT edit th ...

  9. 2022-02-18 Android app 二维码扫描demo,用zxing库,实测ok,记录一下所参考有价值的文章,有生成二维码的demo,但没有亲测。

    一.Android中二维码扫描的最常用库是zxing和zbar,这里用zxing. 二.实测效果图,扫描完成后会以Toast方式显示结果. 三.测试代码的架构 四.代码不细说,想看源码的可以downl ...

最新文章

  1. clientcontainerThrift Types
  2. OpenCV(二十)模板匹配
  3. “智慧血联网平台”亮相军民融合技术装备博览会
  4. 反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux
  5. Git图形化管理工具
  6. 简单的css缩放动画,仿腾讯新闻的分享按钮和美团app底部的图标样式
  7. [vue] 有使用过vue吗?说说你对vue的理解
  8. 五种线程池的对比与使用
  9. 南华大学计算机学院吴取劲,一种基于图深度优先搜索的基本路径集自动生成优化算法-南华大学学报.PDF...
  10. Airflow 中文文档翻译和改进活动 | ApacheCN
  11. connect()在UDP连接中的应用一例
  12. 蓝桥杯2016年第七届C/C++省赛B组第一题-煤球数目
  13. 搜狗浏览器连接海康摄像头,无法显示画面
  14. 文章整理 - 匠人精神
  15. 学会配色-色彩配色表
  16. 计算机程序是指为解决某一问题,在计算机中为解决某一特定问题二设计的指令程序是...
  17. jQuery淡入浅出
  18. 崩坏3水晶计算 关于日期的计算篇 下
  19. 画画怎么配色好看?怎样才能画好色彩搭配?
  20. 计算机毕业设计Java苹果酒店住房管理(源码+系统+mysql数据库+lw文档)

热门文章

  1. 使用excel服务器开发的重中之重
  2. Effective C++读书笔记(4)
  3. 计算机中的总线是不是传递数据用的数据线,组织学类型表现为呼吸性细支气管炎,其对应的临床-放射-病理学诊断是...
  4. 图片转字符图片工具类
  5. Java中的Map【二】SortedMap接口
  6. 【从零起步学Python】Day01-Python环境搭建变量数据类型
  7. 一家SaaS公司是怎么搞垮的?
  8. hdu acmsteps 1.3.6
  9. 2020-2021中国门窗百强榜单正式公布
  10. 漫画 | 垃圾回收实在是太垃圾了!