顺序表与单链表的比较
来源:互联网 发布:电脑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.
而对于顺序表,如果我们的插入和删除操作,在不考虑存储空间额分配这个死角的话(即存储空间可以动态的申请,不考虑溢出), 都是在对最后的一个元素进行操作,那不是也很好,即删除和插入都是在表尾进行,那么就不用移动大量元素了。
- 顺序表与单链表的比较
- 顺序表与单链表的比较
- 顺序表与链表的比较
- 顺序表与链表的比较
- 顺序表与链表的比较
- 顺序表与链表的比较
- 顺序表和单链表的比较
- 顺序表和单链表的比较
- 顺序表和单链表的比较
- 【数据结构】顺序表、单链表的 比较+总结
- 数据结构--顺序表和单链表的比较
- 顺序存储结构与链式存储结构的比较(也可以说的顺序表与链表的比较)
- 顺序存储结构与链式存储结构的比较(也可以说的顺序表与链表的比较)
- 顺序存储结构与链式存储结构的比较(也可以说的顺序表与链表的比较)
- 顺序存储结构与链式存储结构的比较(也可以说的顺序表与链表的比较)
- 数据结构学习:单链表,顺序表和链表的比较
- 线性表的顺序存储结构与链式存储结构的比较
- 顺序表和链表的比较
- leetcode 557.:Reverse Words in a String III
- MySQL在Innodb和MyISAM中的二级索引
- Android 自定义控件xml设置属性
- VBA代码来破解工作表保护
- crontab相关命令
- 顺序表与单链表的比较
- 微信小程序压缩实践
- 初来乍到
- centos下/etc/sysconfig/下找不到iptables文件
- Dynamic Web Module 3.0与JDK1.7的版本配置
- Struts2-paramsPrepareParamsInterceptor拦截器栈和prepareInterceptor拦截器
- 经典软件设计模型
- iOS-76-解决WKWebView底部总有一块不显示问题
- TextInputLayout和AppCompatButton简单用法