java八股复习指南-数据结构篇

线性存储结构

数组

特点:

容量有限;长度固定;提供随机访问

链表

特点:

内存动态管理;但由于存放节点,会占用更多的空间;不提供随机访问

特点:

只允许在一端进行加入(push)数据和移除(pop)数据,按照后进先出的原理进行,push和pop操作均在栈顶进行

队列

特点:

只允许在尾部(rear)加入数据(入队),在头部(front)移除数据(出队)。按照先进先出的原理进行。


简单来说,图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为:G(V,E),其中,G 表示一个图,V 表示顶点的集合,E 表示边的集合。

图的存储

邻接矩阵

简单直接、获取顶点之间的关系效率高效、浪费存储空间

邻接表

使用链表存储每个顶点的所有后继相邻顶点。

图的搜索

广度优先搜索

使用队列:

  1. 将要搜索的源节点放入队列
  2. 取出队首节点,将该节点所有后继节点(未访问)加入队列,依次进行直到队列为空

深度优先搜索

使用栈:

  1. 将要搜索的源节点放入队列
  2. 取出栈顶元素,将所有后继节点(未访问)放入栈,依次进行直到栈为空

分类

满二叉树

full-binary-tree

每一层结点数达到最大值

完全二叉树

complete-binary-tree

除最后一层外,其余层都是满的,并且最后一层只有右侧有若干缺失的节点。

特点是:父结点与子结点序号存在对应关系,因此可以利用数组存储,最大节省空间

平衡二叉树

balanced-binary-tree

左右子树相差最多不超过一层

存储方式

链式存储

与链表类似,每个结点通过左右指针指向左右结点

顺序存储

适用于完全二叉树

遍历方式

先序遍历

根左右

中序遍历

左根右

后序遍历

左右根

堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。或者说,任意一个节点的值都大于等于(或小于等于)所有子节点的值。分最大堆、最小堆,类似三角形、倒三角形。

通常用完全二叉树表示

堆的操作

插入元素,以最大堆

  1. 将插入元素放到队列最后
  2. 与父结点比较大小,如果大,则与父结点交换位置

删除堆顶元素

删除堆顶元素,将队列末尾的元素放在堆顶,然后自顶向下进行堆化

堆排序

分为两步:

  1. 建堆:将一个无序的数组建立为一个堆。具体做法是:对非叶子结点进行堆化(自顶向下)

为什么只用堆化非叶子结点?

因为叶子结点是在最后一层,只要把最后一层往上的关系都确定了,最后一层的关系不用管。

  1. 堆排序:重复取出堆顶元素,对剩下的元素进行堆化。

红黑树

posted @ 2024-07-18 16:59  forest-pan  阅读(6)  评论(0编辑  收藏  举报