线性表Ⅳ- 小结
想看博主whywait的更多同系列查漏补缺必看文?点击传送门,点击关注不迷路哦
在此系列的前面文章中我们学习了线性表的基础知识、顺序存储以及链式存储。如前文所说,我们将在总结里介绍一下线性表的两种表达方式的优劣以及他们的使用场景。
顺序存储结构和链式存储结构的优缺点
表示方法 | 优点 | 缺点 |
---|---|---|
顺序存储结构 | 逻辑关系上相邻的2个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单、直观的公式来表示。 | 在做插入或删除操作时,需移动大量元素。 |
链式存储结构 | 由于他不要求逻辑上相邻的元素在物理位置上也相邻,因此没有顺序存储结构所具有的弱点 | 没有顺序表可随机存取的优点。 |
强化版 VS
因为顺序表示方法通常以‘数组’实现,所以在题目中顺序表和链表的比较通常以“数组VS链表”的形式展开。
所以后文中都以数组VS链表的形式开展。
下面是我在牛客网刷题中总结而得,一大批干货来袭,你做好准备了吗?
数组静态分配内存,链表动态分配内存。
数组在内存中连续,链表不一定连续。
数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);
数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。
链表:顺序存取,随机存储;
顺序表:随机存取,顺序存储。
加深强化
在前面的一大波(好像也没有很多,但也都是精髓呀)中,我们了解到了顺序表和链表的一些区别,下面我们来强化一下我们对链表相关知识的理解。
在链表中删除一个结点需要知道它的前继。
举例:已知单链表的头尾指针分别为p, q, 删除尾部元素会受到单链表的长度影响。
这条性质的适用对象不只是我们刚刚在学的单链表、循环链表、双向链表,对于其他链表比如我们之后在《树》这一部分将要学的二叉链表和三叉链表也是比较重要的性质。如果编程题中疏忽了这条性质,造成的后果往往是埋下了一颗自己怎么也排不掉的雷。
再举例:已知循环链表的尾指针p
,删除的链表头结点的时间复杂度为
O
(
1
)
O(1)
O(1)。
一点小说明:循环链表尾结点的指针域中的next指针指向链表的头结点(这是循环链表的性质)。所以不论是删除链表头结点,还是在循环链表尾部添加新结点,时间复杂度都是 O ( 1 ) O(1) O(1)。
想看博主whywait的更多同系列查漏补缺必看文?点击传送门,点击关注不迷路哦
内容参考:《数据结构 (C语言版)》 严蔚敏、吴伟民