最基础的动态数据结构:链表
本章主要内容:
从底层实现单链表
并依托链表实现队列和栈,并对链表进行一些改进=
链表
链表 : 是真正的动态数据结构
动态数组、栈(数组实现)、队列(数组实现):这三个底层都是依托静态数组,靠resize解决固定容量问题
栈(链表实现)、队列(链表实现):这两个底层依托动态链表,不需要resize了
线性数据结构: 数组、栈、队列、链表
链表的重要性:
链表是最简单的动态数据结构
我们后续还会学习的更高级的动态数据结构:二分搜索树(拓展后的平衡二叉树、AVL、红黑树),Trie
链表是学习更高级的数据结构的基础
链表可以使深入理解引用(指针)
链表本身也有清晰的递归结构,可以帮助理解递归机制
链表的功能:
可以组合成更复杂的数据结构:图、哈希表、栈和队列也可以用链表实现
链表LinkedList的结构:
数据存储在“节点”(Node)中:
e存储内容本身,而next又是一个node节点,指向的是当前节点的下一个节点的引用地址
class Node {
E e;
Node next;
}
最后一个节点的next存储的内容是空
链表的优缺点和使用
链表优点:真正的动态,不需要处理固定容量的问题
链表缺点:丧失了随机访问的能力,比如,数组给一个索引,立即拿出数据,但链表必须一个个next找到
数组最好用于索引有语义的情况,最大的优点是支持快速查询
但并不是所有数组都是有语义的,也不是所有有有语义的情况都适合数组,如身份证号
链表不适合索引有语义的情况
最大的优点:动态
要区分情况,适当选择用数组还是链表