顺序表与单链表的比较

来源:互联网 发布:电脑ip切换软件 编辑:程序博客网 时间:2024/04/28 17:36

http://blog.csdn.net/cherry_ermao/article/details/50958257

顺序表和单链表的优缺点对比: 

顺序表的优点,

无需为表示表中元素之间的逻辑关系而增加额外的存储空间; 

可以快速的存取表中的任意位置的元素。 

顺序表的缺点,

插入后删除操作需要移动大量元素; 

当线性表长度不稳定时,存储空间难确定,容易造成存储空间碎片。 

对于单链表 

链式存储即元素存储的内存单元可以是不连续,分散的。对于元素间如何来维护他们的关系(即逻辑结构,每个元素的前驱和后继。 

即用到一个指针域来存储他和前驱或是后继直接的关系。 

如上面的是一个单链表的指针结构,即每个元素中存储了他的后继元素的内存空间地址。

这里写图片描述 

应用场景选择 
由上图可以简单的知道数据的常见的操作,增,删,改,查时。 
对于数据操作偏向于查和改时,如游戏开发中用户的注册信息,绝大多数是读取:

顺序存储的速度是非常快的,而链表的话,则必须从头节点开始遍历查找。 

但是涉及到插入或是删除元素时,如游戏玩家的武器装备列表,会随时增加或删除:

顺序存储每次操作为了维护顺序,必须移动元素,而对于链表来说,只需新增一个存储单元后,对其中几个指针域中指针的指向做下改变就行。 

tips1. 

但是我们要注意的是, 表的插入和删除操作其实有两部分组成:遍历找到第i个元素,然后删除或插入。那其实顺序表这步的时间复杂度为 O(1), 

而单链表的时间复杂度为O(n),虽然后面的话顺序表需要将i后面的元素都往后移动一位,话费的时间相对来说就是O(n),而单链表无需移动元素, 时间就为O(1)。

看上去其实貌似扯平啊,这样单链表相对于线性表的顺序存储结构来说没什么大的优势。但是如果在第i点插入k个元素时,那么相对于链表来说只要第一遍历查找到了第i个元素后,之后的操作基本是是O(1),而顺序的操作的话,是每次都要移动n-i个元素,O(n), 效果就出来了。 

tips2.

而对于顺序表,如果我们的插入和删除操作,在不考虑存储空间额分配这个死角的话(即存储空间可以动态的申请,不考虑溢出), 都是在对最后的一个元素进行操作,那不是也很好,即删除和插入都是在表尾进行,那么就不用移动大量元素了。

原创粉丝点击