Skip to content

itinytree/data-structure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

数据结构与算法

模块 描述
01-Arrays 数组
02-Stacks
03-Queues 队列
04-LinkedList 链表
05-Recursion 递归
06-Binary-Search-Tree 二叉查找树
07-Set-and-Map 集合和映射
08-Heap 最大二叉堆

数组

  1. 线性结构
  2. 内存中连续存储
  3. 支持随机访问,复杂度O(1)
  4. 增、删非尾元素,涉及到元素的迁移,复杂度 O(n)

链表

  1. 线性结构
  2. 物理上非连续、非顺序存储
  3. 不支持随机访问,访问为头节点,复杂度 O(n)
  4. 增、删节点,复杂度 O(1)

  1. 线性表
  2. 后进先出 LIFO

队列

  1. 线性表
  2. 先进先出 FIFO

二叉查找树

  1. 非线性表
  2. 根的左边节点都小于根,右边节点都大于根
  3. 遍历方法
    1. 深度优先
      1. 先序遍历 根 > 左 > 右
      2. 中序遍历 左 > 根 > 右
      3. 后序遍历 左 > 右 > 根
    2. 广度优先

集合

  1. 无序
  2. 元素不可重复

映射

  1. 键值对

二叉堆

二叉堆是一种特殊的堆,二叉堆是完全二叉树或者近似完全二叉树。
当父节点的键值总是大于或等于任何一个子节点的键值时为"最大堆"。
当父节点的键值总是小于或等于任何一个子节点的键值时为"最小堆"。

二叉堆一般用数组来表示。如果根节点在数组中的位置是1,第n个位置的子节点分别在2n和 2n+1。因此,第1个位置的子节点在2和3,第2个位置的子节点在4和5。以此类推。这种基于1的数组存储方式便于寻找父节点和子节点。

如果存储数组的下标基于0,那么下标为i的节点的子节点是2i + 1与2i + 2;其父节点的下标是⌊floor((i − 1) ∕ 2)⌋

如下图的两个堆:

             1                                11                          
         /        \                        /        \ 
       2           3                    9           10
    /     \      /     \             /     \      /     \ 
   4      5   6       7             5      6     7      8
  / \     / \                      / \     / \
 8  9 10 11                       1   2   3   4 

将这两个堆保存在以1开始的数组中:

位置: 1 2 3 4 5 6 7 8 9 10 11
左图: 1 2 3 4 5 6 7 8 9 10 11
右图: 11 9 10 5 6 7 8 1 2 3 4

About

数据结构与算法分析Java语言描述笔记

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages