本篇文章主要来介绍什么是数据结构。

首先让我们来看一张图片:

数据存储于计算机的内存中。内存如上图所示,形似排成 1 列的箱子,1 个箱子里存储 1 个数据。

数据存储于内存时,决定了数据顺序和位置关系的便是数据结构。

其实在我们生活中用到很多数据结构的知识,那么举一个我们生活中的栗子:

首先举一个从上往下顺序添加举个简单的例子。假设我们有1个电话簿——虽说现在很多人都把电话号码存在手机里,但是这里我们考虑使用纸质电话簿的情况——每当我们得到了新的电话号码,就按从上往下的顺序把它们记在电话簿上。

假设此时我们想给张飞打电话,但是因为数据都是按获取顺序排列的,所以我们并不知道张飞的号码具体在哪里,只能从头一个个往下找(虽说也可以从后往前找或者随机查找,但是效率并不会比从上往下找高)。如果电话簿上号码不多的话很快就能找到,但如果存了500个号码,找起来就不那么容易了。

再比如我们可以按姓名的拼音顺序对电话簿进行排列,接下来,试试以联系人姓名的拼音顺序排列吧。因为数据都是以字典顺序排列的,所以它们是有结构的。

使用这种方式给联系人排序的话,想要找到目标人物就轻松多了。通过姓名的拼音首字母就能推测出该数据的大致位置。

那么,如何往这个按拼音顺序排列的电话簿里添加数据呢?假设我们认识了新朋友柯南并拿到了他的电话号码,打算把号码记到电话簿中。由于数据按姓名的拼音顺序排列,所以柯南必须写在韩宏宇和李希之间,但是上面的这张表里已经没有空位可供填写,所以需要把李希及其以下的数据往下移1行。

此时我们需要从下往上执行将本行的内容写进下一行,然后清除本行内容的操作。如果一共有500个数据,一次操作需要10秒,那么1个小时也完成不了这项工作。

总的来说,数据按获取顺序排列的话,虽然添加数据非常简单,只需要把数据加在最后就可以了,但是在查询时较为麻烦;以拼音顺序来排列的话,虽然在查询上较为简单,但是添加数据时又会比较麻烦。

虽说这两种方法各有各的优缺点,但具体选择哪种还是要取决于这个电话簿的用法。如果电话簿做好之后就不再添加新号码,那么选择后者更为合适;如果需要经常添加新号码,但不怎么需要再查询,就应该选择前者。

我们还可以考虑一种新的排列方法,将二者的优点结合起来。那就是分别使用不同的表存储不同的拼音首字母,比如表L、表M、表N等,然后将同一张表中的数据按获取顺序进行排列。

这样一来,在添加新数据时,直接将数据加入到相应表中的末尾就可以了,而查询数据时,也只需要到其对应的表中去查找即可。

因为各个表中存储的数据依旧是没有规律的,所以查询时仍需从表头开始找起,但比查询整个电话簿来说还是要轻松多了。

数据结构方面的思路也和制作电话簿时的一样。将数据存储于内存时,根据使用目的选择合适的数据结构,可以提高内存的利用率。

到这里,我相信你对数据结构有了一定的了解,下一篇我们将对数据结构中最常用的-链表进行讲解。

参考

《我的第一本算法书》

java是什么数据结构_什么是数据结构?相关推荐

  1. 数据结构Java版实验五_实验五数据结构综合应用 20162310

    分析系统架构 Sprite精灵类 ISprite精灵类是所有类的父类 CombatAircraft战斗机类 首先确保战斗机完全位于Canvas范围内,每隔7帧发射单发黄色子弹. protected v ...

  2. java 红黑树用法_女朋友学数据结构:红黑树

    前言 红黑树的本质:红黑树就是2-3-4树,请看下图: 我们知道2-3-4的插入.删除.查找元素的原理是相当简单的,那么,我们是不是可以利用2-3-4树来记忆红黑树呢? 答案是肯定的,本节,我们就来看 ...

  3. 树的结构 数据结构_段树| 数据结构

    树的结构 数据结构 What is a segment tree? 什么是段树? A segment tree is a full binary tree where each node repres ...

  4. 通用程序算法和数据结构_了解通用数据结构

    通用程序算法和数据结构 In this article, I am going to walk you through the concepts of the common Data Structur ...

  5. 四大金刚 数据结构_学习JavaScript数据结构与算法(三):集合

    集合(Set遇新是直朋能到) 说起集合,就想起刚进高中时,数学第一课讲的就是集合.因此在学习集合这种数据结构时,倍感亲切. 集合的基本性质有一条: 集合中元素是不重复的.因为这种性质,所以我们选用了对 ...

  6. 信号放大器数据结构_[11/11]数据结构 二叉树应用(树型信号放大器,file transfer,遍历的非递归实现)...

    树型分布网络信号放大器 森林和二叉树的相互转换 并查集 例题:File transfer #include <iostream> using namespace std; //typede ...

  7. 哈希表数据结构_算法与数据结构-哈希表

    前面我们已经讲到了数组和链表,数组能通过下标 O(1) 访问,但是删除一个中间元素却要移动其他元素,时间 O(n). 循环双端链表倒是可以在知道一个节点的情况下迅速删除它,但是吧查找又成了 O(n). ...

  8. java set第n位_数据结构与算法——常用数据结构及其Java实现

    本文采用Java语言来进行描述,帮大家好好梳理一下数据结构与算法,在工作和面试中用的上.亦即总结常见的的数据结构,以及在Java中相应的实现方法,务求理论与实践一步总结到位. 常用数据结构 数组 数组 ...

  9. java 固定长度队列_如何彻底搞懂 Java 数据结构?|CSDN 博文精选

    作者 | 张振华.Jack 责编 | 郭芮 出品 | CSDN 博客 本文和大家一起来重温<Java数据结构>经典之作. Java数据结构 要理解Java数据结构,必须能清楚何为数据结构? ...

最新文章

  1. Eclipse新建Work set管理工程
  2. CocoaPods使用 主要带图。转载。
  3. Object-C与Swift混合开发
  4. Learn Python The Hard Way(20)
  5. 三十五、数据仓库的设计和应用
  6. 3d需要学linux_我的脑子—从核磁共振图像到3D打印
  7. 代码实现sql编译器_TiDB-Wasm 原理与实现 | Hackathon 优秀项目介绍
  8. iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
  9. 牛顿新定律:凭本事得到的,凭什么要还?
  10. java通用异常_Java常用异常整理
  11. 用心摘种一树技能,植树节送3本书
  12. 人才第一!英伟达大幅扩大深度学习学院(DLI)规模
  13. linux 下的emoji在MariaDB中的字符集修改
  14. Proteus仿真错误解决方法:No power supply specified for net 5V in Power Rail Configuration.
  15. Linux 命令行连接蓝牙
  16. 浮动时间怎么计算_软考学习第21天-----软考案例分析的计算题
  17. 事务的隔离级别2 (TRANSACTION ISOLATION LEVEL)
  18. Coding and Paper Letter(八十五)
  19. 基于IS-LM模型的宏观经济政策成效分析:弹性视角
  20. 09年国内外免费杀毒软件大收罗

热门文章

  1. 你们天天都在说的“祖传引擎”,到底能干吗?
  2. 困扰前端的像素相关概念:PPI、DPI、设备像素、独立像素
  3. RabbitMQ-使用消息队列实现分布式事务
  4. 搜狐镜像提高下载软件速度
  5. 浣洗与顺丰同城联合布局洗护服务新模式 实现30分钟上门取衣
  6. php cros跨域处理,CORS跨域问题解决方案
  7. WPS根据章节编号依次排序
  8. Vue开发实战一:FormData参数传递
  9. 联通校园先锋队素拓方案
  10. 小米2 android版本更新,小米2手机怎么升级MIUI系统?小米2在线升级的教程