码迷,mamicode.com
首页 > 编程语言 > 详细

数组、链表、跳表

时间:2020-02-27 00:50:48      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:存储   bst   删除   指定元素   ade   sea   mic   stack   search   

数组、链表、跳表

数组、链表、跳表基本实现和特性

Array(数组)

  • java,c++: int a[100];//初始化的时候先定义好容量
  • Python: list=[]//直接定义一个数组
  • JavaScript: let x=[1,2,3]

时间复杂度

方法 复杂度
prepend O(n)
append O(1)
lookup O(1)
insert O(n)
delete O(n)

成员函数

  • 元素访问
    • at?访问指定元素,同时进行越界检查
    • operator[]?访问指定的元素
    • front?访问第一个元素
    • back?访问最后一个元素
    • data?返回指向内存中数组第一个元素的指针
  • 迭代器
    • begin?返回容器第一个元素的迭代器
    • end?返回指向容器尾端的迭代器
    • rbegin?返回指向容器最后元素的逆向迭代器
    • rend?返回指向前端的逆向迭代器
  • 容量
    • empty?检查容器是否为空
    • size?返回容纳元素数
    • max_size?返回可容纳的最大元素数
  • 操作
    • fill?以指定值填充容器
    • swap?交换内容

链表

class Node {
    int data;
    Node next;
}
class LinkedList {
    Node head; /
    Node (int d) { data = d;}
}

时间复杂度

方法 复杂度
prepend O(1)
append O(1)
lookup O(n)
insert O(1)
delete O(1)

成员函数

  • 元素访问
    • front?访问第一个元素
    • back?访问最后一个元素
  • 迭代器
    • begin?返回指向容器第一元素的迭代器
    • end?返回指向容器尾端的迭代器
    • rbegin?返回指向容器尾端的迭代器
    • rend?返回指向前端的逆向迭代器
  • 容量
    • empty?检查容器是否为空
    • size?返回容纳的元素数
    • max_size?返回可容纳的最大元素数
  • 修改器
    • clear?清除内容
    • insert?插入元素
    • emplace?原位构造元素
    • erase?擦除元素
    • push_back?将元素添加到容器末尾
    • emplace_back?在容器末尾就地构造元素
    • pop_back?移除末元素
    • push_front?插入元素到容器起始
    • emplace_front?在容器头部就地构造元素
    • pop_front?移除首元素
    • resize?改变容器中可存储元素的个数
    • swap?交换内容
  • 操作
    • merge?合并二个已经排序列表
    • splice?从另一个list中移动元素
    • remove/remove_if?移除满足特定标准的元素
    • reverse?将该链表的所有元素的顺序反转
    • unique?删除连续的重复元素
    • sort?对元素进行排序

跳表

技术图片

时间复杂度

  • 跳表查询的时间复杂度分析:
    n/2、n/4、n/8、第k级索引结点的个数就是n/(2^k) 假设索引有h级,最高级的索引有2个结点。
    n/(2^h) = 2,从而求得 h = log2(n) - 1

  • 时间复杂度 O(logn)
    • 优化
      • 升维 :空间换时间
    • 应用
      • LRU Cache - Linked list: LRU 缓存机制
      • Redis - Skip LIst

        1.Stack:先入后出;添加、删除皆为O(1)
        2.查询为 O(n)

        时间复杂度

        方法 复杂度
        Access O(n)
        Search O(n)
        Insertion O(1)
        Deletion O(1)

        成员函数

  • 元素访问
    • top?访问栈顶元素
  • 容量
    • empty?检查底层的容器是否为空
    • size?返回容纳的元素数
  • 修改器
    • push?向栈顶插入元素
    • emplace?于顶原位构造元素
    • pop?删除栈顶元素
    • swap?交换内容

队列

1.Queue:先入先出;添加、删除皆为O(1)
2.查询为 O(n)

时间复杂度

方法 复杂度
Access O(n)
Search O(n)
Insertion O(1)
Deletion O(1)

成员函数

  • 元素访问
    • front?访问第一个元素
    • back?访问最后一个元素
  • 容量
    • empty?检查底层的容器是否为空
    • size?返回容纳的元素数
  • 修改器
    • push?像队列尾部插入元素
    • emplace?于尾部原位构造元素
    • pop?删除栈顶元素
    • swap?交换内容

      扩展

  • 双端队列
    • 简单理解:两端可以进出的
    • 插入和删除都是O(1)操作
    • QueueDeque - double ended queue
  • 优先队列
    • 插入操作:O(1)
    • 取出操作:O(logN) - 按照元素的优先级取出
    • 底层具体实现的数据结构较为多样和复杂:heap、bst(二叉搜索树)、treap

数组、链表、跳表

标签:存储   bst   删除   指定元素   ade   sea   mic   stack   search   

原文地址:https://www.cnblogs.com/liugangjiayou/p/12369998.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!