顺序表和链表的区别(考研)
王道考研笔记
顺序表和链表的比较我们可以从以下三个方面去思考
1.逻辑结构
2.物理结构/存储结构
3.数据的运算/基本操作
1.逻辑结构
无论是顺序表还是链表都属于线性表,都是线性结构有着一对一的关系。

2.存储结构
顺序表:顺序存储每个结点分配的大小是相等的,因此我们只需要知道顺序表的起始地址就能很快找到表中的第i个元素,所以顺序表有随机存储的特性。
顺序表各个元素的结点只需存储数据本身不会存储其他的冗余信息,所以存储密度非常高。但是缺点在于顺序表的存储需要一开始就申请一大片的内存空间,分配上十分不方便且不能改变容量大小。
链表:由于各个结点可以离散的存储在内存当中,所以每次添加一个新的结点我们只需要malloc函数动态的申请一小片的内存空间就可以了,因为每个结点的存储不要求连续,所以改变容量也会方便一些。
但是缺点由于不能随机存储的特性,每次查找元素的时候只能从链表的起始位置开始查找。因为链表每个结点不只是存储数据本身,它还需要花费一点点的内存存储指针。所以存储密度低

3.数据的运算/基本操作
顺序表和链表创建表的不同:顺序表创建必须申请一整片的内存空间,但之后想扩展内存空间就比较困难。而链表的创建只需要申请一个头结点即可,链表的扩展只需要malloc函数申请空间。

顺序表和链表销毁操作的不同:链表的销毁操作只需改变指针的指向,通过free函数释放掉即可。顺序表的销毁操作需要将Length=0,使顺序表当前变成一个空表,但是此时并没释放掉内存空间。
如果顺序表的分配采用的是静态分配的方式的话,那么系统会自动回收。如果使用的是动态数组分配的方式,那么则需要手动释放。

顺序表和链表的增删操作:顺序表因为每个结点都是一个接着一个紧挨着,所以无论插入还是删除都需要移动大量的元素。链表的增删就显得非常人性化,只需修改指针即可。

顺序表和链表的查找操作:查找操作有两种方式“按位查找”和“按值查找”。顺序表按位查找的时间复杂度为O(1),因为它具有随机存储的特性。链表的按位查找的时间复杂度为O(n)因为只能从表头一个个查找
顺序表的按值查找如果元素的排列本来就是无序的,那么就只能从第一个元素依次往后对比,若是表内元素有序,可在O(log2^n)时间内找到。而链表的按值查找无论元素有序还是无序查找的时间复杂度都是
O(n)这个时间。

顺序表or链表的优劣对比:


浙公网安备 33010602011771号