说链表之前,我们先大概说一下线性表:
线性表是一种最基本,最简单也是最常用的一种数据结构。线性表数据元素之间是一对一的关系,也就是说除了首位和末尾,其他的元素都是首位相连的。线性表有两种存储方式,一种是顺序结构,另一种是链式存储结构。
- 顺序结构
顺序存储结构就是说两个相邻的元素在内存上也是相邻的。
优点:
查询时候的时间复杂度为O(1),通过首地址和偏移量就可以直接访问到某元素。查找的时候最快可以达到O(logn)。
缺点:
- 插入和删除的时间复杂度最差可以达到0(n)
- 当你不确定元素的数量时,你开的数组必须保证能够放下元素最大数量,遗憾的是如果实际数量比最大数量少很多时,你开的数组没有用到的内存就只能浪费掉了。
- 链式存储结构
两个相邻的元素在内存中可能不是相邻的,每一个元素都有一个指针域,指针域一般是存储着到下一个元素的指针。
优点:
是插入和删除的时间复杂度为O(1),不会浪费太多内存,添加元素的时候才会申请内存,删除元素会释放内存,。
缺点:
是访问的时间复杂度最坏为O(n),关于查找的算法很少,一般只能遍历,这样时间复杂度也是线性(O(n))的了,频繁的申请和释放内存也会消耗时间。