归志宁无五亩园,读书本意在元元。这篇文章主要讲述java基础 - 数据结构相关的知识,希望能为你提供帮助。
一、栈(stack)栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶
(top)。它是后进先出(LIFO)的。对栈的基本操作只有 push(进栈)和 pop(出栈)两种,
前者相当于插入,后者相当于删除最后的元素。
【java基础 - 数据结构】
二、队列(queue)队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
三、链表(Link)链表是一种数据结构和数组同级。比如,java 中我们使用的 ArrayList,其实现原理是数组。而
LinkedList 的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。
四、散列表(Hash)散列表(Hash table,也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据
元素)的比较操作。
散列表算法希望能尽量做到不经过任何比较,通过一次存取就能得到所查找的数据元素,因而必须要在数据元素的存储位置和它的关键字(可用 key 表示)之间建立一个确定的对应关系,使每个关键字和散列表中一个唯一的存储位置相对应。因此在查找时,只要根据这个对应关系找到给定关键字在散列表中的位置即可。这种对应关系被称为散列函数(可用 h(key)表示)。
用来构造散列函数的方法有:
五、排序二叉树
首先如果普通二叉树每个节点满足:左子树所有节点值小于它的根节点值,且右子树所有节点值于它的根节点值,则这样的二叉树就是排序二叉树。
插入操作
首先要从根节点开始往下找到自己要插入的位置(即新节点的父节点),具体流程是:
?
删除操作
删除操作主要分为三种情况,即要删除的节点无子节点,要删除的节点只有一个子节点,要删除的节点有两个子节点:?
查询操作
查找操作的主要流程为:先和根节点比较,如果相同就返回,如果小于根节点则到左子树中
递归查找,如果大于根节点则到右子树中递归查找。因此在排序二叉树中可以很容易获取最
大(最右最深子节点)和最小(最左最深子节点)值。
六、红黑树(RB-Tree)全称是 Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每
个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。它的特点是:
6.1、左旋
对 x 进行左旋意味着,将“x 的右孩子”设为“x 的父亲节点”;
即,将 x 变成了一个左节点(x
成了为 z 的左孩子)!。 因此,左旋中的“左”,意味着“被旋转的节点将变成一个左节点”。
6.2、右旋
x 进行右旋意味着,将“x 的左孩子”设为“x 的父亲节点”;
即,将 x 变成了一个右节点(x
成了为 y 的右孩子)! 因此,右旋中的“右”,意味着“被旋转的节点将变成一个右节点”。
6.3、插入
将红黑树当作一颗二叉查找树,将节点插入,将插入的节点着色为"红色"。
根据被插入节点的父节点的情况,可以将"当节点 z 被着色为红色节点,并插入二叉树"划分为三种情况来处理。
最后,通过一系列的旋转或着色等操作,使之重新成为一颗红黑树。
6.4、删除
将红黑树当作一颗二叉查找树,将节点删除,这和"删除常规二叉查找树中删除节点的方法是一样的"。分 3 种情况:
最后,通过"旋转和重新着色"等一系列来修正该树,使之重新成为一棵红黑树。
删除节点之后,可能会违背红黑树的特性。所以需要通过"旋转和重新着色"来修正
该树,选择重着色 3 种情况。
七、平衡树(B-Tree)B-tree 又叫平衡多路查找树。一棵 m 阶的 B-tree (m 叉树)的特性如下(其中 ceil(x)是一个取上限
的函数):
一棵 m 阶的 B+tree 和 m 阶的 B-tree 的差异在于:
八、位图(bit)位图的原理就是用一个 bit 来标识一个数字是否存在,采用一个 bit 来存储一个数据,所以这样可
以大大的节省空间。 bitmap 是很常用的数据结构,比如用于 Bloom Filter 中;
用于无重复整数的
排序等等。bitmap 通常基于数组来实现,数组中每个元素可以看成是一系列二进制数,所有元素
组成更大的二进制集合。
推荐阅读
- FAQ调用应用内支付SDK时报错,如何用tag对问题进行排查和分析
- 麒麟系统开发笔记(制作安装麒麟系统的启动U盘物理机安装麒麟系统以及搭建Qt开发环境)
- 网站服务器如何选配
- 智慧园区效果不满意(请收下ThingJS这份秘籍)
- 形参与实参的区别,原来形参是庶子所以不得宠
- Navicat 16 for MySQL软件安装包和安装教程
- 前后端分离的好处有哪些()
- NBI可视化平台快速入门教程数据可视化编辑器介绍
- JVM 输出 GC 日志导致 JVM 卡住,我 TM 人傻了