基本的数据结构理解
数组
- 存储有序的对象
- 从0开始的索引
- 优点:快速查询,快速排序,以及append都是o(1)的时间度
- 缺点:大小是固定的,利用索引来插入,删除数据的话,是o(n)的时间复杂度
- 阅读资料
动态数组
- 可变数组,python中的列表就类似这种数据形式
- 可以自动调节大小
- 主要就是不必要在定义数组之前就设定大小,它会根据你值的长度来重新定义数组的大小
- 优点:可变的大小,快速查询
- 缺点:append,delete,insert操作很费时,o(n)的时间复杂度
- 阅读资料
链表
- 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)
- 元素在链表中被称作节点,头节点被称为head,尾节点被称为tail
- 和顺序表不同,在内存中存储的位置,相邻的数据并不是挨着的
- 优点:在头尾操作都很快,可变的大小
- 缺点:查询需要花费大量时间
- 阅读资料
队列
- 先进先出的概念
- 优点:所有的操作都是很快的,o(1)
- 阅读资料
栈
- 后进先出的概念
- 优点:操作都是很快的,o(1)
- 阅读资料
哈希表
- 也就是python中的字典概念
- 关系表,map的感念
- 优势:快速的查询里面的元素,可变的键值,自由增长
- 缺点:无序的,比如要查找其中最小的键,必须遍历整个哈希表;要查询指定键的值,也需要遍历整个表;都是o(n)
- 阅读资料
树
- 有层次的数据结构,每个元素都是一个节点,每个节点可以连接n个节点,n>=0
- 叶节点指的是最底层的节点,后面没有节点与它相连了,个数也就是最下面元素的个数
- 高度指的是最底层的节点到根部的距离
- 查找分为广度优先和深度优先
二叉查找树
- 是一个有一定规则的二叉树
- 左边的节点一定比当前的节点小,右边的节点一定比当前的节点大
- 优势:整体表现更好,广度优先算法是可以排序的
- 缺点:如果该树不是平衡的,表现很差;没有o(1)的操作,最少都是o(log(n))
- 详细资料
图
- 网路中的节点组成图
- 每个节点都是通过边缘连接
- 优势:展示了每个节点的连接关系
- 缺点:扩展很费时间
- 详细资料