在英雄联盟地图中寻找“数据结构的大门”

百家 作者:CSDN 2020-12-05 19:45:55

作者 | 韩小乐  责编 | 张文
头图 | CSDN 下载自东方 IC
来源 | 乐享Coding(ID:hhl_1393603513)


英雄联盟里的数据结构


程序=数据结构+算法

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

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

数据结构

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

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

总结如下:
术语例子
数据元素(组成数据,有一定意义的基本单位,可以由很多数据项组成也被称为记录)某个具体英雄
数据结构(相互之间存在一种或多种特定关系的数据元素的集合。)地形
算法(解决特定问题求解步骤的描述)策略
数据项(数据元素的属性)英雄的属性
数据(描述客观事物的符号,是计算机可以操作的对象,能够被识别并输入给计算机处理)英雄
数据对象(性质相同的数据元素的集合,是数据的子集)上单英雄
关系图解如下:

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

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

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

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

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


数据结构


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

2.1 逻辑结构

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

集合结构数学学过,不能重复,各个平等
线性结构一对一,糖葫芦
树形结构一对多,有层次,倒着的树
图形结构多对多,网状结构
逻辑图象:
集合
线性结构
树形结构
图形结构

如何去理解逻辑结构

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

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

2.2 物理结构

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

顺序存储结构连续(one by one)
链式存储结构不连续,数据中包含指针,指向下一数据地址

抽象数据类型

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

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

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

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

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

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

更多精彩推荐

  ☞虚拟偶像出道,技术「造星」推动下的粉丝经济 

  酷派奖励程序员10 万股期权!因代码贡献受 Linux 之父亲自点名赞赏

  前端的魔爪已经伸到后端了,颤抖吧后端!

  ☞常年“盘踞”数据库前五的 MongoDB,在中国有哪些新动向?

  平行链启动在即,波卡DeFi价值与风险并存

  开发者实测 M1 芯片报告:除了大型应用程序启动慢点,整体性能优秀

  ☞APISIX 温铭:开源的本质是要拿开发者的杠杆|人物志

 Salesforce 为什么要收购 Slack?

点分享
点点赞
点在看

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接