[算法]常见的数据结构_D1

71 阅读1分钟

数据结构

1 Array 创建数组的时候计算机会分配一个内存管理器 插入: 按照指定index位置(index不等于倒数第二个的情况下)向数组插入元素的操作,时间复杂度0(n)。 删除: 删除指定位置的元素之后,后续的元素会相应的挪动位置index-1。

-- 引出垃圾回收机制 以上场景可以参考java数组操作源代码,developer.classpath.org/doc/java/ut… 比如ensureCapacity方法的视线内容。

总结:数组避免大量频繁的新增和删除操作。

2 LinkedList 定义一个class,常常叫做node。 tail的next指针一般为空,如果tail的next指针指向了头部head,那这就是一个循环链表。

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

添加删除操作: 添加是常数次的,插入指定位置的pre节点指向target node,target node连接原来的next node。

image.png

3 跳表 skip list 基于链表,1989年出现。只能用于链表的元素有序的情况下,对标平衡树和二分查找。插入删除搜索都是O(logn)的数据结构。

维护成本很高,新增和删除都需要遍历索引。

加速有序链表 -> 升维度。 image.png

学习资料: www.zhihu.com/question/20… leetcode.cn/problems/lr…