顺序表和链表的区别和联系

1.线性表

在介绍顺序表和链表之前,先介绍一下线性表;

线性表是N个具有相同特性的数据元素的有限序列。线性表是一种常见的数据结构,常见的有顺序表,链表,栈,队列,字符串等等…

线性表顾名思义是一种连续的直线结构,但是这种线性结构只是在逻辑上。在物理结构上不一定是线性结构。在物理存储上通常以数组和链式结构进行存储;

2.顺序表

顺序表是用一段物理地址连续的存储单元,依次进行元素存储的线性结构,通常用数组存储;
即顺序表在本质上面就是数组;

顺序表可以分为两种:
一种为使用固定数组进行存储,另外一种是使用动态开辟的数组进行存储;

顺序表的优点:
1.尾插尾删时间复杂度为O(1);
2.可以随机访问;
3.缓存命中率较高(相对于链式),物理空间连续,预加载有优势;
在这里插入图片描述

顺序表缺点:
1.中间和头部的插入和删除的时间复杂度为O(N);
2.增容需要增长空间,就会需要拷贝数据,会产生消耗;
3.空间的浪费:扩容一般以两倍的速度扩容,这是因为不会因为扩容太小而频繁扩容,也不至于太大浪费太多空间,但是在整体上来说还是会有一定的空间浪费;

3.链表

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针链接次序实现的;

链表的产生是为了弥补顺序表的不足,但是不能替代顺序表,每种结构都有自己的优势和不足,呈现一种互补的状态;

链表的结构多达8种,由下列所述情况排列组合而成:
1.单向,双向;
2.带头,不带头;
3.循环,非循环;

常用的有两种类型:
1.不带头不循环的单向链表:
结构简单,不会单独用来存储数据,更多是应用于OJ题中,作为数据结构的子结构,如哈希表,图等等…
2.双向带头循环链表:
结构虽然复杂,应用简单,非常方便,大多作为链表结构使用,STL中就是这种结构;

4.总结——顺序表和链表的区别和联系

4.1顺序表的优缺点

顺序表的优点:
1.结构简单,尾插尾删时间复杂度为O(1);
2.可以随机访问;
3.缓存命中率较高(相对于链式),物理空间连续,预加载有优势;

顺序表缺点:
1.中间和头部的插入和删除的时间复杂度为O(N);
2.增容需要增长空间,就会需要拷贝数据,会产生消耗;
3.空间的浪费:扩容一般以两倍的速度扩容,这是因为不会因为扩容太小而频繁扩容,也不至于太大浪费太多空间,但是在整体上来说还是会有一定的空间浪费;

适用场景:
适合频繁访问的场景;

4.2链表的优缺点

链表的优点:
1.不会造成空间浪费,用一个节点开辟一个节点;
2.双向链表在任意位置的插入删除都是O(1);

链表的缺点:
1.以节点为存储单位,不支持随机访问;
2.非连续结构,结构较为复杂;
3.缓存命中率低,并且容易造成内存碎片;

适用场景:
频繁插入删除的场景;

5.实战运用

5.1顺序表的运用(附博客链接点击进入)

1.动态增长空间的通讯录
2.固定大小的通讯录
3.旋转数组的四种解法

5.2链表的运用

1.双向循环链表的增删查减
2.单链表奇偶节点分离组合
3.链表节点删除的一些细节
4.反转链表
5.环形链表
6.对链表插入排序
7.链表的递归

猜你喜欢

转载自blog.csdn.net/ych9527/article/details/112004414
今日推荐