Java数据结构与算法系列
文章平均质量分 71
主要记录数据结构与算法相关的面试题
后端技术那点事
这个作者很懒,什么都没留下…
展开
-
图数据结构以及深度、广度遍历方式
1、什么是图?图是一种数据结构,其中结点可以具有零个或多个相邻元素。如下图顶点(vertex):每一个连接点叫做顶点。边(edge):两个结点之间的连接称为边。路径:两个顶点之间的连接叫做路径,例如A-> B.无向图: 顶点之间的连接没有方向,比如A-B,即可以是 A-> B 也可以 B->A .有向图: 顶点之间的连接有方向,比如A-B,只能是 A-> B 不能是 B->A .带权图:这种边带权值的图也叫网.2、图的表示方式图的表示方式有两种:二转载 2021-05-04 17:00:08 · 634 阅读 · 0 评论 -
B树、B+树、红黑树
1、B树B树属于多叉树又名平衡多路查找树(查找路径不只两个)规则:(1)排序方式:所有节点关键字是按递增次序排列,并遵循左小右大原则;(2)子节点数:非叶节点的子节点数>1,且<=M ,且M>=2,空树除外(注:M阶代表一个树节点最多有多少个查找路径,M=M路,当M=2则是2叉树,M=3则是3叉);(3)关键字数:枝节点的关键字数量大于等于ceil(m/2)-1个且小于等于M-1个(注:ceil()是个朝正无穷方向取整的函数 如ceil(1.1)结果为2);(4)所有叶子节点均原创 2021-05-04 11:14:33 · 7119 阅读 · 0 评论 -
常用的四类查找算法
查找算法1、顺序查找(线性查询)package com.example.datastructureandalgorithm.datastructure.search;public class SeqSearch { public static void main(String[] args) { int arr[] = { 1, 9, 11, -1, 34, 89 };// 没有顺序的数组 int index = seqSearch(arr, -11); if(index == -1原创 2021-05-04 10:17:18 · 184 阅读 · 0 评论 -
二叉排序树、平衡二叉树以及多路查找树
1、二叉排序树二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的 任何一个非叶子节点,要求 左子节点的值比当前节点的值小, 右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点比如针对前面的数据 (7, 3, 10, 12, 5, 1, 9) ,对应的二叉排序树为:2、一个数组创建、中序遍历二叉排序树//创建Node结点class Node { int value; Node left; Node righ原创 2021-05-03 22:06:39 · 182 阅读 · 0 评论 -
二叉树的前序、中序、后序遍历以及查询
1、遍历前序遍历: 先输出父节点,再遍历左子树和右子树中序遍历: 先遍历左子树,再输出父节点,再遍历右子树后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点小结: 看输出父节点的顺序,就确定是前序,中序还是后序//先创建 HeroNode 结点class HeroNode { private int no; private String name; private HeroNode left; //默认 null private HeroNode righ原创 2021-05-02 21:20:51 · 153 阅读 · 0 评论 -
Java实现8种常见的排序算法
1、 排序算法的分类2.1、冒泡排序冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的前一个元素比后一个元素大就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。例如:将原始数据 3,9,-1,10,20 进行冒泡排序代码实现public class BubbleSort { public static void main(String[]原创 2021-05-02 12:20:59 · 245 阅读 · 0 评论 -
第三章、链表的面试题
1、单链表的面试题1.1、获取到单链表的节点的个数(如果是带头结点的链表,需求不统计头节点)?// 方法:获取到单链表的节点的个数(如果是带头结点的链表,需求不统计头节点)/** * * @param head 链表的头节点 * @return 返回的就是有效节点的个数 */public static int getLength(HeroNode head) { if (head.next == null) { // 空链表 return 0; } int length = 0;原创 2021-04-15 00:03:48 · 90 阅读 · 0 评论 -
第三章、链表
1、链表1.1、内存结构内存上来看:链表存储空间不连续(不像数组)逻辑上来看:链表属于线性结构1.2、特点链表是以节点的方式来存储,是链式存储data 域存放数据,next 域指向下一个节点链表分带头节点的链表和没有头节点的链表, 根据实际的需求来确定1.3、定义nodenode 实体no :英雄编号name :英雄名字nickName :英雄昵称next :指向下一个 HeroNode 节点//定义HeroNode , 每个HeroNode 对象就是一个节点cla转载 2021-04-15 00:01:03 · 97 阅读 · 0 评论 -
第二章、数组实现环形队列
1、数组实现队列1.1、队列介绍队列是一个有序列表, 可以用数组或是链表来实现。遵循先入先出的原则, 即: 先存入队列的数据, 要先取出,后存入的要后取出。1.2、队列使用场景银行排队叫号1.3、使用数组模拟队列示意图1.4、思路分析maxSize :队列容量(数组的长度)arr :模拟队列的数组front :指向队列头部元素,初始值为 0rear :指向队列尾部元素的后一个元素,初始值为 01.5、常用方法队列判空:front == rear队列判满:为何要在 re原创 2021-04-12 21:59:06 · 290 阅读 · 0 评论 -
第一章、稀疏数组
1、稀疏数组1.1、实际需求:下列五子棋程序中存在的问题:因为该二维数组的很多值是默认值 0 ,因此记录了很多没有意义的数据,我们将其转为稀疏数组进行存储。1.2、稀疏数组1.2.1、什么是稀疏数组?稀疏数组也是二维数组,行数由原数组的数据个数决定,列数一般为 3 列,稀疏数组把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。1.2.2、稀疏数组的处理方法?稀疏数组的第一行记录原数组一原创 2021-04-11 23:16:43 · 100 阅读 · 0 评论