AS3的数据结构知识(参考Nshen的文章)
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的文章)相关推荐
- GitHub标星3w+的项目,全面了解算法和数据结构知识
作者 | 程序员小吴 来源 | 五分钟学算法(ID: CXYxiaowu) 导语:今天分享一个开源项目,里面汇总了程序员技术面试时需要了解的算法和数据结构知识,并且还提供了相应的代码,目前 GitHu ...
- java数组、集合和数据结构知识*
为什么80%的码农都做不了架构师?>>> 一.数据结构知识.数据结构分为逻辑结构和物理结构,下面是百度百科的数据结构知识. 数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结 ...
- eps倾斜摄影矢量化采集毕业设计_eps倾斜摄影矢量化dlg采集#知识参考
eps倾斜摄影矢量化dlg采集#知识参考 一.背景1.倾斜摄影测量倾斜摄影测量和我们传统影像的区别:从数据采集的方式来看,传统影像是通过飞机上搭载的航摄仪对地面连续摄取相片,而后经过一系列的内业处理得 ...
- 【数据结构】数据结构知识思维导图
From:https://blog.csdn.net/flowing_wind/article/details/81431354 思维导图源文件: 链接:https://pan.baidu.com/s ...
- 搜索用计算机弹奏9277的数字,计算机基础知识参考试题(含答案)
计算机基础知识参考试题(含答案) 计算机基础知识参考试题及答案解析 一.单选题 1.1946年诞生的世界上公认的第一台电子计算机是( ENIA). 2.第一台计算机在研制过程中采用了哪位科学家的两点改 ...
- 使用计算机需要准备硬件和什么,2017年计算机硬件知识参考试题
2017年计算机硬件知识参考试题 高效率的复习方法能让考生们更快地进入备考状态,下面是百分网小编为大家准备的2017年计算机硬件知识参考试题,下面是百分网小编分享的一些相关资料,供大家参考. 一. 单 ...
- DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总
DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...
- 广东工业大学数据结构AnyView参考答案
广东工业大学数据结构AnyView参考答案 觉得还行,请点赞关注,您的点赞,我的动力! 1.第一章 #include "allinclude.h" //DO NOT edit th ...
- 2022-02-18 Android app 二维码扫描demo,用zxing库,实测ok,记录一下所参考有价值的文章,有生成二维码的demo,但没有亲测。
一.Android中二维码扫描的最常用库是zxing和zbar,这里用zxing. 二.实测效果图,扫描完成后会以Toast方式显示结果. 三.测试代码的架构 四.代码不细说,想看源码的可以downl ...
最新文章
- clientcontainerThrift Types
- OpenCV(二十)模板匹配
- “智慧血联网平台”亮相军民融合技术装备博览会
- 反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux
- Git图形化管理工具
- 简单的css缩放动画,仿腾讯新闻的分享按钮和美团app底部的图标样式
- [vue] 有使用过vue吗?说说你对vue的理解
- 五种线程池的对比与使用
- 南华大学计算机学院吴取劲,一种基于图深度优先搜索的基本路径集自动生成优化算法-南华大学学报.PDF...
- Airflow 中文文档翻译和改进活动 | ApacheCN
- connect()在UDP连接中的应用一例
- 蓝桥杯2016年第七届C/C++省赛B组第一题-煤球数目
- 搜狗浏览器连接海康摄像头,无法显示画面
- 文章整理 - 匠人精神
- 学会配色-色彩配色表
- 计算机程序是指为解决某一问题,在计算机中为解决某一特定问题二设计的指令程序是...
- jQuery淡入浅出
- 崩坏3水晶计算 关于日期的计算篇 下
- 画画怎么配色好看?怎样才能画好色彩搭配?
- 计算机毕业设计Java苹果酒店住房管理(源码+系统+mysql数据库+lw文档)