极客时间算法训练营第三期

451 阅读2分钟

Download:百度网盘

提取码:45on

李煜东完结无秘线性数据结构 数组 数组的随机访问特性,支持O(1)时间复杂度的查询操作,可以充分利用cpu缓存;以及合理使用System.arraycopy移动数组位置(重置数组开始索引),往往在应对一些题目时(比如差分)代码书写起来比较简单; 当然数组也是一些其他数据结构的载体,比如完全二叉树一般来说用数组存储比较合理,再比如并查集;数组的一些基本操作:增、删、改、查

链表 链表不受存储空间限制,支持O(1)时间复杂度的插入、删除操作,操作链表时要先加保护节点(哨兵节点),减少特判;链表的基本操作:插入节点、删除节点、查询节点(删除节点和修改节点值的操作是基于查询的);链表细分又可以分为

  • 单链表

  • 循环链表

  • 双向链表

  • 双向循环列表

v2-313cd3f8ad80c6f2f7fe06dde3b9c596_1440w.jpg

栈 栈满足先进后出,凡是最近相关的可以用栈来处理,比如解决逆波兰式(后缀表达式)求值问题,验证括号是否有效,以及前缀最小值问题,浏览器前进后退问题等等,通常栈可以用队列来实现

队列 队列满足先进先出(FIFO)

集合 集合分为有序集合,无序集合,有序集合比如java中的TreeSet,无序集合比如java中的HashSet

非线形数据结构 树形数据结构 抽象来讲树分为多叉树和二叉树; 满足某些特性的树又称为完全二叉树、满二叉树;针对二叉树满足某些特性又可称为二叉搜索树;二叉搜索树的递归定义

满足 (1)节点的左子树只包含小于当前节点的数

(2)节点的右子树只包含大于当前节点的数

(3)所有左右子树自身必须也是二叉搜索树

树的存储方式:可以使用数组也可以使用链表