作者 | 韩小乐  责编 | 张文

头图 | CSDN 下载自东方 IC

来源 | 乐享Coding(ID:hhl_1393603513)

英雄联盟里的数据结构

程序=数据结构+算法

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

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

数据结构

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

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

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

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

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

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

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

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

数据结构

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

2.1 逻辑结构

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

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

线性结构

树形结构

图形结构

如何去理解逻辑结构

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

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

2.2 物理结构

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

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

抽象数据类型

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

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

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

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

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

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

更多精彩推荐☞虚拟偶像出道,技术「造星」推动下的粉丝经济 ☞酷派奖励程序员10 万股期权!因代码贡献受 Linux 之父亲自点名赞赏☞前端的魔爪已经伸到后端了,颤抖吧后端!☞常年“盘踞”数据库前五的 MongoDB,在中国有哪些新动向?☞平行链启动在即,波卡DeFi价值与风险并存☞开发者实测 M1 芯片报告:除了大型应用程序启动慢点,整体性能优秀☞APISIX 温铭:开源的本质是要拿开发者的杠杆|人物志☞Salesforce 为什么要收购 Slack?
点分享点点赞点在看

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

  1. Docker在英雄联盟游戏中的实践探索(五)

    本文讲的是Docker在英雄联盟游戏中的实践探索(五),[编者的话] 这篇博客是Riot的Docker实践系列博客的第五篇,主要讨论了如何从头创建你的Docker镜像. 在以前的帖子中,我们讲解了如何 ...

  2. Docker在英雄联盟游戏中的实践探索(二)

    本文讲的是Docker在英雄联盟游戏中的实践探索(二),[编者的话]这篇博客是Riot的Docker实践系列博客的第二篇,主要内容是:基于Cloudbees镜像创建新的Dockerfile,设置了一个 ...

  3. Docker在英雄联盟游戏中的实践探索(四)

    本文讲的是Docker在英雄联盟游戏中的实践探索(四),[编者的话]这篇博客是Riot的Docker实践系列博客的第四篇,主要讨论了如何添加一个基于Nginx的代理容器,以及如何用Compose来管理 ...

  4. Docker在英雄联盟游戏中的实践探索(一)

    本文讲的是Docker在英雄联盟游戏中的实践探索(一), [编者的话]Riot将Docker和Jenkins相结合,以此来构建流水线(Pipeline).这篇博客是Riot实践Docker的系列博客的 ...

  5. 为什么yamlp中没有cplex_在《英雄联盟》中,为什么有些T1英雄并没有我们想象中那么强势?...

    相信玩<英雄联盟>的玩家或多或少都听过"OP.GG"这个数据库网站,里面收集了大量的<LOL>对战数据,主要数据来源是韩服铂金以上的对局.理论上,我们可以通 ...

  6. lol最克制诺手的英雄_《英雄联盟》中什么英雄最克制诺克萨斯之手?

    本人最高分段郊区宗师,峡谷之巅最高钻一崽,各个号加起来三千到四千场诺手,主玩上单位,只凭一手诺克上分. 也打过很多号,都是从黄铜白银开始打到钻石,有诺手选的话只选诺手.单排上路平均胜率75到80. 本 ...

  7. 关于英雄联盟中的英雄是如何寻找最佳路径的

    LOL的玩家都知道,当您的召唤师随便点击地图上的某一块区域时,小地图便会自动为您画出一条最短路径.比如1级的时候,您想在男爵河道上开个1级小团,只需在河道上点一下,您的英雄便会按照最短路径朝目标区域前 ...

  8. 英雄联盟世界的地图抓取与分析

    0.背景 S11比赛正在如火如荼的举行.作为一个S3赛季的老玩家和地理人,我想从另外个角度带你了解LOL的世界. 1.数据获取 1.1数据初探 英雄联盟推出了其世界地图网页版,访问地址为:https: ...

  9. 用 Python 详解《英雄联盟》游戏取胜的重要因素!

    作者 | DeepHub IMBA 责编 | 王晓曼 介绍 在过去的几年里,电子竞技社区发展迅速,曾经只是休闲娱乐的电子竞技产业,到2022年有望创造18亿美元的收入. 虽然在这个生态系统中有很多电子 ...

最新文章

  1. 【Linux】Linux简单操作之文件管理
  2. multi task训练torch_Multi-task Learning的三个小知识
  3. MATLAB读取txt文件的数据
  4. JDK5.0新特性系列---11.5.3线程 同步装置之CyclicBarrier
  5. 前端学习之HTML基本标签介绍
  6. NFine.Framework框架去除cookie后门
  7. 不定积分/定积分——三角函数n次方不定积分公式(包含sec^nx与csc^nx不定积分公式)
  8. 金蝶ERP学习之路--财务知识
  9. 谁更胜一筹?技德Remix VS 凤凰OS
  10. PMP子过程定义总结
  11. .net mysql 博客_asp.net搭建博客,使用BlogEngine.NET+MySql搭建博客
  12. SpringBoot快速入门--基础版(包含整合常用框架、跨域)
  13. Jmockit使用详解之Mocking
  14. [分享] Hyper-V 安装Win7激活后黑屏
  15. 谷歌--高德地图定位失败geolocation time out
  16. 小米4手机选择图库发送图片时崩溃
  17. H5+微信公众号扫二维码页面跳转功能 vue实现
  18. 台式计算机硬盘的安装位置,台式主机扩大存储,7步教你完美安装机械硬盘
  19. kali liunx使用心得之命令行模式下如何配置连接无线网络
  20. C# 请求外部服务的办法

热门文章

  1. 【爱有失落时】风与渊
  2. java 传址或传值
  3. 各种系统扫描磁带驱动器的操作方法
  4. 【洛谷】P1052 过河(状压dp)
  5. EF中关于TransactionScope的使用
  6. sublime text 2 学习(一):快捷键
  7. Php AES加密、解密与Java互操作的问题
  8. linux内核模块的程序结构
  9. 安装Mirantis OpenStack Fuel 9.0
  10. [论文阅读] A Late Fusion CNN for Digital Matting