赞
踩
单链表
单链表作为一种基本的数据结构,它的的优点与缺点往往要与顺序表进行比较。
下面先说结论:
2、可以随时申请和释放空间、而顺序表需要扩容。(这个很重要,但对于顺序表来讲这个也不是太大的问题,因为顺序表会随着容量变大的扩容频率会越来越低)
1、不支持随机访问(如下标访问)。
2、Cpu高速缓存命中率低,因为内存分配不连续(这个学了计算机组成相关知识会有所了解,不要求过多注意)
2、下标随机访问(因为内存分配连续)
3、CPU高速缓存命中率高,因为内存分配连续(与上面同理解释)。
2、空间不够,需扩容,用不完会浪费空间(影响不是那么致命)。
图解
如果都给Node1-Node3都附加上一个地址的话,那可以更加直观的理解链表的结构。
所以next指向的是一个地址,而且还是结构体的地址。
结构体为:
-
- typedef int Nodedata
-
- typedef struct Node
- {
- Nodedata value;
- struct Node* next;
- }Node;
应用方面:如队列的实现等,对于需要用到链表的时候都先优先考虑不带头节点的单链表,因为结构简单,满足需求就可以了。
图解:
与不带头单链表的不同点:在部分情况下,可以达到很好的效果,看题分析,只要经常出来头节点是否为空时候,就用带头的。
图解:
结构体为:
- typedef int Nodedata
-
- typedef struct Node
- {
- Nodedata value;
- struct Node* next;
- struct Node* prev;
- }Node;
图解:
结构体为:
- typedef int Nodedata
-
- typedef struct Node
- {
- Nodedata value;
- struct Node* next;
- struct Node* prev;
- }Node;
图解:
结构体为:
- typedef int Nodedata
-
- typedef struct Node
- {
- Nodedata value;
- struct Node* next;
- struct Node* prev;
- }Node;
应用方面:无论是中间插入还是删除都十分简单,C++的STL的list就是基于这种类型的链表,使用起来十分方便,但是就是结构复杂,当做题时,使用单链表还是不能满足需求时,可以考虑使用这种数据结构。
单链表的增删查改 · hylprogramming/数据结构的各类型代码实现 - 码云 - 开源中国 (gitee.com)
循环链表的实现 · hylprogramming/数据结构的各类型代码实现 - 码云 - 开源中国 (gitee.com)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。