什么是数据结构?

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

首先让咱们来看一张图片:数据结构

数据结构

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

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

其实在咱们生活中用到不少数据结构的知识,那么举一个咱们生活中的栗子:图片

首先举一个从上往下顺序添加举个简单的例子。假设咱们有1个电话簿——虽然说如今不少人都把电话号码存在手机里,可是这里咱们考虑使用纸质电话簿的状况——每当咱们获得了新的电话号码,就按从上往下的顺序把它们记在电话簿上。内存

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

再好比咱们能够按姓名的拼音顺序对电话簿进行排列,接下来,试试以联系人姓名的拼音顺序排列吧。由于数据都是以字典顺序排列的,因此它们是有结构的。方法

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

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

此时咱们须要从下往上执行将本行的内容写进下一行,而后清除本行内容的操做。若是一共有500个数据,一次操做须要10秒,那么1个小时也完成不了这项工做。

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

虽然说这两种方法各有各的优缺点,但具体选择哪一种仍是要取决于这个电话簿的用法。若是电话簿作好以后就再也不添加新号码,那么选择后者更为合适;若是须要常常添加新号码,但不怎么须要再查询,就应该选择前者。

咱们还能够考虑一种新的排列方法,将两者的优势结合起来。那就是分别使用不一样的表存储不一样的拼音首字母,好比表L、表M、表N等,而后将同一张表中的数据按获取顺序进行排列。

表L

表M

表N

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

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

数据结构方面的思路也和制做电话簿时的同样。将数据存储于内存时,根据使用目的选择合适的数据结构,能够提升内存的利用率

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

参考

《个人第一本算法书》