算法学习(2)--数组、链表和跳表的基本实现与特性

一、数组

  1. 数组是一段连续地址的内存,使用内存管理器(memory controller)访问,访问的时间复杂度为O(1)。
  2. 增(删)元素:插入(删除)一个元素,该位置后元素全部后移(前移),时间复杂度为O(n)。
  3. 数组扩张时,如果原有内存大小不能满足需求,则开辟一块原来大小两倍的内存,用以复制旧数组。

 

二、链表

  1. node,有单链表、双向链表、循环链表,pHead/pTail/构造函数。
  2. 增删不涉及群移操作,移动和修改操作的时间复杂度为O(1)。
  3. 访问元素节点的时间复杂度为线性复杂度O(n)。
  4. LRU cache利用链表。

 

三、跳表

  1. Skip List,只能用于元素有序的情况。
  2. 跳表对标的是平衡树AVL和二分查找,是一种插入/删除/搜索都是O(logn)的数据结构。
  3. 优势是原理简单、容易实现、方便拓展、效率高,在一些热门的项目中来替代平衡树,如Redis,LevelDB(Google,Jeff Dean)
  4. 跳表是一维数组升维实现的,在思考提升链表插座的效率的过程中,原链表如下:

建立第一级索引:

建立第二级索引:

建立多级索引:

5. 现实中跳表的形态

6.跳表查找的时间复杂度为O(logn);增加和删除需要维护更新索引,时间复杂度为O(logn),空间复杂度为O(n)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值