数据结构专题(一)——数组与链表

为了锻炼自己的思维,巩固计算机基础,特地做一个数据结构的专题。说到数据结构其实就是探讨数据存储的方式问题,以及一些对数据的增删改查操作问题。如果能用故事的形式把数据结构讲出来,那么数据结构将不会那么枯燥了。

故事一:数组与链表的前世今生

计算机先生有许多员工,其中有一位名字叫做memory manager(可以称呼他为内存先生),内存先生的日常工作就是管理着一堆储物柜子(内存),每次计算机先生收到一些需要保存的数据时就会告诉内存先生把这些数据放到储物柜子里面,等后面需要使用的时候再从柜子中取出来。柜子数量众多,为了管理方便,每个柜子都有自己的编号,有一次王老板买了五双不同的AJ球靴,但想要把他们存放起来,于是找到了计算机先生。

王老板:“计算机先生,我这五双鞋子不好带在身边,要不就先存到你的公司里吧?”

计算机先生:“OK,我这就通知内存先生给你开五个小的储物柜子,每个柜子放一双鞋吧。”

于是计算机先生打了电话给内存先生:“给我开五个储物柜用来放客户的鞋子。”

内存先生查看了储物柜的情况发现有五个连续的柜子6,7,8,9,10号柜子正好是空的,于是就把王老板的鞋子一双双放到了这五个柜子里。内存先生比较懒,最讨厌在记录本上写下非常完整的信息,觉得这样浪费自己的时间,于是他自己形成了一套记录方法,那就是只记录五个储物柜中第一个储物柜编号,以及用户用的总的储物柜数目,那么记录本上就有了一条新记录“#6 5 王先生”,意思就是从6号柜子开始的五个连续柜子里的东西都是王先生的,计算机先生交代的任务就这么完成了。

以上的连续储物柜其实就是计算机科学中数组的原型。数组的定义为计算机内存空间中一段连续的存储空间,现在看这段定义是不是非常的清晰明了?

随着存放物品的客户数量增加,内存先生发现连续的存储柜子越来越少了,这可能会影响后来的客户存放东西呢。果然,没过多久问题来了,一个大客户说要存100瓶酒,但是内存先生看了记录本发现没有连续的100个柜子,但是有很多零零散散的柜子,这可怎么办呢?能不能把这些零散的柜子利用起来,并且不改变我记录本的书写方式呢?

内存先生虽然懒但是他是个聪明人,要不玩个“找宝藏”的游戏吧。他在第一个柜子里放入了一瓶酒和一张纸条,纸条上写了第二瓶酒存的柜子编号。。。以此类推,第99瓶酒存放的那个柜子里还有一张写了第100瓶酒存放的储物柜编号。而记录本上依旧只写了第一瓶酒存放的储物柜号码。这样的存储方式就不用再考虑连续的柜子了,可以非常完美的把所有的柜子利用起来呢。

这种离散的存储方式就是传说中的链表了,链表的每个节点都包含两个部分,一部分是存放的数据,另一部分就是下一个节点的地址。

数组与链表是计算机内存存储方式的基石,理解了他们对后续的数据结构以及算法学习大有好处,比如把链表的增删方式做一些限制就能形成所谓的队列和栈结构,并且链表在图与树结构的存储中也大有用处。

下一步就是代码实现各种数据结构了,此专题将使用Java进行实现。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章