数据结构论坛

注册

 

发新话题 回复该主题

在英雄联盟地图中寻找数据结构的大门 [复制链接]

1#
北京治疗白癜风最有效的医院 http://baidianfeng.39.net/

作者

韩小乐责编

张文

头图

CSDN下载自东方IC

来源

乐享Coding(ID:hhl_)

英雄联盟里的数据结构

程序=数据结构+算法

不知各位有没有玩过《英雄联盟》或者《王者荣耀》?

这是“数据结构”的第一篇文章,主要想让大家对数据结构有个初步的了解。所以本篇文章会结合《王者荣耀》、《英雄联盟》这类游戏简单阐述数据结构。

数据结构

相互之间存在一种或多种特定关系的数据元素的集合。

如果我们把在游戏中控制英雄看作一个程序,那么英雄就可以成为一个数据对象,比如《英雄联盟》上单英雄武器大师贾克斯;同时,我需要地图(部分内存空间)来存储它,并且设计出适合贾克斯发育的上路地形(数据结构)。但是,上单除了贾克斯之外还有其他很多英雄,所以上路地形(数据结构)需要满足的条件是:既要满足贾克斯对上路的依赖需求,也要满足其他上单英雄对上路的依赖需求。除此之外,我们还需要研究敌方英雄的技能能否克制我方、我需要如何出装、如何释放技能等等,这些思路策略就等同于算法。

总结如下:

关系图解如下:

提问:如何去选择数据结构去存储数据?

回答:这里还是以游戏为例。英雄联盟的地图共有4种地形:上单、中单、下路、打野。这些地形都存储在一个地图上,每个地形都有对应位置的英雄,以上单英雄武器大师贾克斯(或王者荣耀花木兰)为例,在游戏中他虽然被标为上单英雄,但是你也可以用他们去下路,去中路或者打野。

同样的道理,存储数据也不一定只能用一种数据结构。现实就是这样的情况比较少,选择去上路的原因极大的是依靠上路的地形可以为自己建立一个很大的优势,而去别路或许就天生具有劣势。那么我们为什么不去选择上路这种地形呢?

存储一些数据我们可以使用单向链表存储,也可用顺序存储,但是到底该选哪一种呢?这就需要根据具体的功能而定。比如如果想要查询快的话(如购物的商品网页),当然是优先选择顺序存储,因为它速度更快,每一个都有索引,并且能根据索引立刻返回查询到的数据。

相比游戏英雄的例子,数据结构可能知识点会更多些,因为计算机中的数据元素种类很多,数量巨大,依赖关系十分复杂。

数据结构

数据结构分为逻辑结构和物理结构。

2.1逻辑结构

定义:数据对象中数据元素之间的相互关系。

逻辑图象:

集合

线性结构

树形结构

图形结构

如何去理解逻辑结构

相信各位都画过电路图,电路图其实就是电路的逻辑结构,我们画电路图就是为了减少无关影响,更加注重逻辑,还有一个例子就是质点。如图/p>

物理结构显而易见了,就是电路实际的样子,如图/p>

2.2物理结构

定义:数据的逻辑结构在计算机中的储存形式.

抽象数据类型

数据类型:一组性质相同的集合及定义在此集合上的一些操作的总称。

通俗:有范围的数据及操作规范。

抽象数据类型:指一个数学模型及定义在该模型上的一组操作。

通俗:可以自定义的数据类型。

描述抽象数据类型

ADT抽象数据类型名Data数据元素之间逻辑关系的定义Operation操作1操作结果描述操作2......操作nendDAT

举例:一个游戏人物(如马里奥)在初始时候只有跳、跑的操作,但是有的公司需要这个人物做打枪的动作,有的公司需要这个人物做趴下的动作,因此自定义的抽象数据类型就很重要!

分享 转发
TOP
发新话题 回复该主题