数组与链表的对比
来源:互联网 发布:微积分搜题软件 编辑:程序博客网 时间:2024/06/06 20:22
特点对比:
1、存取方式上,数组可以顺序存取或者随机存取,而链表只能顺序存取;
2、存储位置上,数组逻辑上相邻的元素在物理存储位置上也相邻,而链表不一定;
3、存储空间上,链表由于带有指针域,存储密度不如数组大;
4、按序号查找时,数组可以随机访问,时间复杂度为O(1),而链表不支持随机访问,平均需要O(n);
5、按值查找时,若数组无序,数组和链表时间复杂度均为O(n),但是当数组有序时,可以采用折半查找将时间复杂度降为O(logn);
6、插入和删除时,数组平均需要移动n/2个元素,而链表只需修改指针即可;
7、空间分配方面,数组在静态存储分配情形下,存储元素数量受限制,动态存储分配情形下,虽然存储空间可以扩充,但需要移动大量元素,导致操作效率降低,而且如果内存中没有更大块连续存储空间将导致分配失败;链表存储的节点空间只在需要的时候申请分配,只要内存中有空间就可以分配,操作比较灵活高效;
数组应用场景:
1、注重存储密度;
2、经常做的运算是按序号访问数据元素;
3、数组更容易实现,任何高级语言都支持;
4、构建的线性表较稳定。
链表应用场景:
1、对线性表的长度或者规模难以估计;
2、频繁做插入删除操作;
3、构建动态性比较强的线性表。
1、存取方式上,数组可以顺序存取或者随机存取,而链表只能顺序存取;
2、存储位置上,数组逻辑上相邻的元素在物理存储位置上也相邻,而链表不一定;
3、存储空间上,链表由于带有指针域,存储密度不如数组大;
4、按序号查找时,数组可以随机访问,时间复杂度为O(1),而链表不支持随机访问,平均需要O(n);
5、按值查找时,若数组无序,数组和链表时间复杂度均为O(n),但是当数组有序时,可以采用折半查找将时间复杂度降为O(logn);
6、插入和删除时,数组平均需要移动n/2个元素,而链表只需修改指针即可;
7、空间分配方面,数组在静态存储分配情形下,存储元素数量受限制,动态存储分配情形下,虽然存储空间可以扩充,但需要移动大量元素,导致操作效率降低,而且如果内存中没有更大块连续存储空间将导致分配失败;链表存储的节点空间只在需要的时候申请分配,只要内存中有空间就可以分配,操作比较灵活高效;
数组应用场景:
1、注重存储密度;
2、经常做的运算是按序号访问数据元素;
3、数组更容易实现,任何高级语言都支持;
4、构建的线性表较稳定。
链表应用场景:
1、对线性表的长度或者规模难以估计;
2、频繁做插入删除操作;
3、构建动态性比较强的线性表。
0 0
- 数组与链表的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- Perl的数组与hash表使用的对比
- [zt] 指针与数组的对比
- 7.3 指针与数组的对比
- 【对比】指针与数组
- 字符数组与整型数组的初始化和赋值对比
- 字符数组与整型数组的初始化和赋值对比
- 字符数组与整型数组的初始化和赋值对比
- 链表与顺序表的对比
- c++编译 (.obj, .lib, .dll, .exe的关系(附:lib和DLL的区别))
- 关于 Ajax中返回json类型数据为什么使用? eval()
- android 子线程向主线程发送消息
- Java实现对MongoDB的AND、OR和IN操作
- AsyncTask
- 数组与链表的对比
- 此证书的签发者无效
- Android 热修复原理
- 50个常用的sql语句
- MongoDB学习笔记(查询)
- Windows上借助msys2编译并调试FFmpeg源码
- Linux下MySQL 5.5/5.6的修改字符集编码为UTF8
- 循环队列实现
- C++primer 第四版部分习题的解答