三十五、数据结构

数据存储的常用结构有:栈、队列、数组、链表、树、哈希表。

1、栈结构

概述:

栈:stack,又称堆栈,它是运算受限的线型表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加,删除等操作

特点: 先进后出。

有两个名词:

  • 压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。
  • 弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。

2、队列

概述:

队列queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行取出并删除。

特点:先进先出

3、数组

特点:查询快,增删慢

4、链表

特点:增删快,查询慢

添加数据

查询数据

双向列表

5、二叉树

树的组成

名词 含义
节点 指树中的一个元素
节点的度 节点拥有的子树的个数,二叉树的度不大于2
叶子节点 度为0的节点,也称之为终端结点
左子节点 节点指向左边的是左子节点
右子节点 节点指向右边的是右子节点
左子树 节点左侧部分的树 为左子树
右子树 节点右侧部分的树 为右子树
高度 叶子结点的高度为1,叶子结点的父节点高度为2,以此类推,根节点的高度最高
根节点在第一层,以此类推
父节点 若一个节点含有子节点,则这个节点称之为其子节点的父节点
子节点 子节点是父节点的下一层节点
兄弟节点 拥有共同父节点的节点互称为兄弟节点

概述:

如果树中的每个节点的子节点的个数不超过2,那么该树就是一个二叉树

5.1 二叉查找树

二叉查找树又称 二叉排序树、二叉搜索树

二叉查找树的特点:

  1. 左子树上所有的节点的值均小于等于他的根节点的值
  2. 右子树上所有的节点值均大于或者等于他的根节点的值
  3. 每一个子节点最多有两个子树

注意:

二叉查找树存在的问题:会出现"瘸子"的现象,影响查询效率

5.2 平衡二叉树

概述:

为了避免出现"瘸子"的现象,减少树的高度,提高我们的搜素效率,又存在一种树的结构:"平衡二叉树"

平衡二叉树的特点:

  1. 它的左右两个子树的高度差不超过1
  2. 并且左右两个子树都是一棵平衡二叉树

如图所示:

6、哈希表

JDK1.8之前,哈希表底层采用【数组 + 链表】实现,即使用数组处理冲突,同一hash值的链表都存储在一个数组元素里(如果内容也一样就进行删除)。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。

而JDK1.8中,哈希表存储采用【数组 + 链表 + 红黑树】实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。

posted @ 2021-06-27 16:03  火烧云Z  阅读(95)  评论(0)    收藏  举报