数据结构 第三章 线性表(四)

🚀 写在最前: 在前面几篇文章中,实现了线性表的顺序存储------顺序表,以及实现了线性表的链式存储------链表,同时呢还实现了双链表;这篇文章将了解循环链表、循环双链表和静态链表,同时呢将顺序表和链表的进行一个全面的对比。

🚀 每日一句考研英语好句:

Clearly, the cartoon reveals a very common problem in our society.

🚀 卑微博主在线求关注😁

循环链表

循环链表非常简单,就是在单链表的基础上做了点变化,它将单链表的最后一个节点的指针域指向头节点,而不再指向 NULL,而是指向第一个节点(注意下图是绘制的没有带头节点的链表)

循环双链表

循环双链表也十分简单,就是在双链表的基础上改变,同样的将最后一个节点的后指针域改成指向第一个节点,还需要将头节点的前指针域指向最后一个节点。

静态链表

静态链表是使用数组来描述链式存储结构的,有数组开辟的一个固定的空间的大小,其中每一个节点都和链表类似,拥有数据域和指针域,只不过在静态链表中节点的指针域不在存放指针,而是存放游标,即下一个节点的数组下标。

对于循环链表、循环双链表和静态链表不是考研考察的重点,其一些基础的运算方法,这里就不给出,等考完研,再来补充!!!

顺序表和链表的对比

对于线性表两种不同的存储结构,他们之间各有优缺点,以下将从三个方面来比较顺序表和链表。

  • 🚀 从逻辑结构来看:

他们的逻辑结构都是线性表,所以在逻辑结构这个层面来说,他们是相同的

  • 🚀 从存储结构来看:

对于顺序表: 它在物理结构上,其也是按着顺序存放的,即可以随机存储,同时每个一个节点都用来存储数据,即它的存储密度高,但是容量固定,不容易扩展容量。
对于链表: 存储位置随机,改变容量就比较方便,但是由于随机存储,即不可以随机存储,同时由于每个结构还需要花费一定的空间来存储指针域,所以存储密度是比较低的。

  • 🚀 从运算来看:

初始化操作: 顺序表初始化需要大片连续的空间,而链表是随机存储。

增删: 顺序表增删一个元素,会造成其后面的元素都要挪动位置,时间复杂度为O(n),链表增删元素的时候,要先找到第n-1个位置的节点,所以它的时间复杂度为O(n),但是不可否认的事实是,挪动位置的O(n)显然比先找到第n-1个位置节点的代价要大。

查找: 顺序表按位查找一个元素的时间复杂度为O(1),直接数组下标就能得到,若数据存储有序,按着值查找,顺序表的查找时间复杂度为O(logn),链表无论是按位查找还是按值查找元素,仍然是按着指针的顺序依次找,时间复杂度为O(n)。

总结来看:

对于长度不固定,需要经常性的增删数据,选用链表✅

对于表长可以预估,且查询操作次数较多的,选用顺序表✅

相关推荐
程序趣谈9 分钟前
算法随笔_36: 复写零
数据结构·python·算法
轩情吖21 分钟前
二叉树-堆(补充)
c语言·数据结构·c++·后端·二叉树··排序
爱是小小的癌2 小时前
Java-数据结构-优先级队列(堆)
java·前端·数据结构
sjsjs112 小时前
【数据结构-字典树】力扣14. 最长公共前缀
数据结构·leetcode
iqay5 小时前
【C语言】填空题/程序填空题1
c语言·开发语言·数据结构·c++·算法·c#
makabaka_T_T6 小时前
25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表
数据结构·c++·算法·leetcode·链表·矩阵
wclass-zhengge7 小时前
04树 + 堆 + 优先队列 + 图(D1_树(D6_B树(B)))
数据结构·b树
qq_433618449 小时前
哈夫曼树
数据结构·算法
励志成为美貌才华为一体的女子10 小时前
python算法和数据结构刷题[4]:查找算法和排序算法
数据结构·算法·排序算法
tt55555555555511 小时前
每日一题-判断是不是完全二叉树
数据结构·算法