线性表的顺序存储和链式存储

顺序存储是分配了一块连续的内存,把这块内存平均分为N份,每份存放一个线性表的单元。从内存利用角度讲,顺序存储需要的是一块连续的内存。特点是查找节点容易,插入、 删除节点比较耗时。

链式存储是分配了几个零散的非连续单元,从内存利用角度讲,它能充分利用那些碎片化的内存。特点是查找节点慢,但插入删除节点快。

怎么理解呢?

下文说的酒店均没有客户记录,就是没有登记某个人住在某个房间。

顺序存储就和某个酒店的一层房间,比如在第一层有100个房间,从1号房间按顺序一致排到底100号房间。你去找一个人,打开1号房间的门,没有,再打开2号房间的门,这样依次进行,直到找到为止。而链式存储就不一样了,虽然也是100个房间,但它这100个房间可能是这样分布的,1号房间在酒店的第一层,2号房间在酒店的第50层,如果想找一个人,还没找到腿就跑断了,所以你理解了顺序存储方便查找而链式存储不方便查找的原因了吗?再看顺序存储的插入和删除,按照线性表的定义,1号房间的客人走了,那么2号房间的客人要挪到1号房间里面,3号房间的客人挪到2号房间,依次类推,1个客人离开要折腾99个客人,增加也是一样的道理。而链式存储的插入、删除操作就简单多了,比如要增加一个客人,先分配一个房间,客人住进来,再把线性表上个单元的房间号和下个单元的房间号写在这个房间的门上就可以了,不用惊动其它房间的客人。

说到线性表,又想到了哈希表,还是住酒店的问题,按照哈希表的定义,客人想住哪个房间不是说随便有个空房间你就去住吧,不是这样的,客人的房间号是算出来的,这个算法叫哈希函数,比如张三经过计算,它的房间号是80号,李四经过计算,它的房间号是12号。你说你想找张三,好,经过计算张三房间就在80号房,你去找吧,根本不用从1号房间打开门看一眼,哦 不是张三,再打开2号房间。。。这是顺序查找的方式,很明显哈希表要快的多。

原文地址:https://www.cnblogs.com/yfish/p/7089294.html