数组,链表,跳表(总结)

Array(数组)

image.png
image.png
image.png

1.优点:无论访问哪一个元素,时间复杂度都是 O(1);
2.缺点:删除,增加元素,时间复杂度高,需要遍历前后移动下标,所以是 O(n)的时间复杂度。删除时,调用垃圾回收机制size-1。

Linked List(链表)

image.png

时间复杂度

image.png

1.每个元素都有两个属性,Value和Next 。它的每一个元素一般用class定义。Next指向下一个元素。串在一起形成了一个链表。
2.如果只有一个指针就叫做单链表,
3.可以往前或者往后指,往前指它的先前指针就做(previous)这样就叫做双向链表。
4.头指针用Head表示,尾指针用Tail。最后一个指针它的Next指向空,因为没有Next指针了。Tail的Next指针也可以指回到Head来。这个就叫做循环链表。

添加删除操作

image.png

image.png

1.增加或删除节点的话,没有引起整个链表的群移操作,也不需要复制元素,挪动元素到新的位置,所以它移动的效率和修改的操作效率非常高,复杂度为O(1)
2.这个结构导致了访问链表中的任何一个位置,操作就不再简单了,复杂度为O(n)

Skip List(跳表)

特点

1.只能用于元素有序的情况。(跳表里的元素始终必须是有序的)不然没发用跳表。
所以,跳表(Skip List)对标的是平衡树(AVL Tree)和二分查找,是一种插入/删除/搜索 都是 O(log n)的数据结构。1989年出现。
优点:原理简单,容易实现,方便扩展,效率更高。因此在一些热门的项目用来替代平衡树,如Redis,LevelDB 等。


image.png

给有序链表加速

1,升纬,添加一级索引


image.png

2.如果再快加二级索引


image.png

3.以此类推可以加更多的索引
image.png

image.png

现实中跳表的形态

image.png

维护成本相对较高,如果增加一个元素或者删除一个元素,都需要把它的索引都更新一遍,在这个过程中,它的时间复杂度就回编程了logn了

空间复杂度分析

image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容