1. 数组,链表,跳表
数组:在内存中开辟连续的内存地址,存储元素
链表:当前Node对象存储当前节点值与下一节点内存地址
调表:带有调表索引的链表,只能用于元素有序的情况下,用来取代平衡树二分查找
左append | 右append | 查询 | 插入 | 删除 | |
---|---|---|---|---|---|
数组 | O(1) | O(1) | O(1) | O(n) | O(n) |
普通链表 | O(1) | O(1) | O(n) | O(1) | O(1) |
跳表 | O(1) | O(1) | O(log n) | O(log n) | O(log n) |
空间复杂度上,数组最少,普通链表第二,跳表最高,但,都是O(n)。
链表应用:LRU Cache
跳表应用:Redis
2.栈和队列
栈(stack):先入后出(LIFO/FILO)
队列(Queue):先入先出(FIFO)
左append | 右append | 查询 | 插入 | 删除 | |
---|---|---|---|---|---|
栈 | - | O(1) | O(n) | - | O(1) |
队列 | - | O(1) | O(n) | - | O(1) |