基本的数据结构理解

基本的数据结构理解

数组

  • 存储有序的对象
  • 从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)
  • 阅读资料

  • 后进先出的概念

哈希表

  • 也就是python中的字典概念
  • 关系表,map的感念
  • 优势:快速的查询里面的元素,可变的键值,自由增长
  • 缺点:无序的,比如要查找其中最小的键,必须遍历整个哈希表;要查询指定键的值,也需要遍历整个表;都是o(n)
  • 阅读资料

  • 有层次的数据结构,每个元素都是一个节点,每个节点可以连接n个节点,n>=0
  • 叶节点指的是最底层的节点,后面没有节点与它相连了,个数也就是最下面元素的个数
  • 高度指的是最底层的节点到根部的距离
  • 查找分为广度优先和深度优先

二叉查找树

  • 是一个有一定规则的二叉树
  • 左边的节点一定比当前的节点小,右边的节点一定比当前的节点大
  • 优势:整体表现更好,广度优先算法是可以排序的
  • 缺点:如果该树不是平衡的,表现很差;没有o(1)的操作,最少都是o(log(n))
  • 详细资料

  • 网路中的节点组成图
  • 每个节点都是通过边缘连接
  • 优势:展示了每个节点的连接关系
  • 缺点:扩展很费时间
  • 详细资料