
数据结构
文章平均质量分 58
数据结构
lewjin
这个作者很懒,什么都没留下…
展开
-
数据结构:栈
1、栈的介绍栈的英文为 stack)栈是一个先入后出(HILO- First In Last Out)的有序列表。栈( stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底( Bottom)。根据栈的定义可知,最先放入中元素在栽底,最后放入的元素在栽顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除图解方式说明出栽(pop)和入(push)的概念2、 栈的应原创 2022-03-16 19:35:32 · 1252 阅读 · 0 评论 -
数据结构:二叉排序树
1、二叉排序树二叉排序树:BST( Binary Sort( Search)Tree,又称二叉查找树(Binary Search Tree),亦称二叉搜索树。对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点比如针对前面的数据(7,3,10,12,5,1,9),对应的二叉排序树为:2、二叉排序树的创建和遍历一个数组创建成对应的二叉排序树,并使用中序遍历二叉排序树,比如:数组为Aray(7原创 2022-03-15 17:24:22 · 1646 阅读 · 0 评论 -
数据结构:单链表和双向链表
1、链表链表是有序的列表,但是它在内存中是存储如下小结:链表是以节点的方,来存储是链式存储每个节点包含data域,next域:指向下一个节点如图:发现链表的各个节点不一定是连续存储链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表(带头结点)逻辑结构示意图如下2、单链表的应用使用带head头的单向链表实现-水浒英雄排行榜管理完成对英雄人物的増删改査操作,第一种方法在添加英雄时,直接添加到链表的尾部第二种方式在添加英雄时,根据排名将英雄插入到指定位置(如果原创 2022-03-12 21:25:40 · 2776 阅读 · 0 评论 -
数据结构:队列
1、什么是队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列是一种操作受限制的线性表,进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是一个有序列表,可以用数组和链表来实现遵循先入先出的原则。即先存入的数据,先取出,后存入的要后取出2、数组模拟队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中 maxSize是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,原创 2022-03-09 20:36:54 · 692 阅读 · 0 评论 -
数据结构:稀疏数组
基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少不同的值把具有不同值的元素的行列以及值记录在一个小规模的数组中,从而缩小程序的规模代码实现package com.jl.sparsearray;import java.io.*;/** * Create with IntelliJ IDAE * * @Author: JINLEI * @Description: 二维数组转换为稀疏数组原创 2022-03-08 20:05:25 · 389 阅读 · 0 评论 -
数据结构(Java)-哈希表
哈希表1. 基本概念哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我想我举个例子你就会明白了,最典型的的例子就是字典,大家估计小学的时候也用过不少新华字典吧,如果我想要获取“按”字详细信息,我肯定会去根据拼音an去查找 拼音索引(当然也可以是偏旁索引),我们首先去查an在字典的位置,查了一下得到“安”,结果如下。这过程就是键码映射,在公式里面,就是通过key去查找f(key)。其中,按就是关键字(key),f()就是字典索引,也就是转载 2021-07-16 16:24:54 · 138 阅读 · 0 评论 -
力扣-复制带随机指针的链表
给一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如: 有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个原创 2021-06-26 22:14:23 · 184 阅读 · 3 评论 -
常见的排序算法(面试经常碰到)
1.直接插入排序直接插入排序(Straight Insertion Sort) 是一种最简单的排序方法。它的基本思想是每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。代码实现:/** * * @param array */ public static void insertSort(int[] array){ int tmp = 0; for (int i = 1;原创 2021-05-17 16:54:00 · 198 阅读 · 1 评论 -
Java-优先级队列(堆)
1. 二叉树的顺序存储1.1 存储方式使用数组保存二叉树的结构,方式即将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示。1.2 下标关系已知双亲(parent)的下标,则:左孩子(left)下标 = 2 * parent + 1;右孩子(right)下标 = 2 * parent + 2;已知孩子(不区分左右)(child)下标,则:双亲(parent)下标 = (child - 1) / 2;2. 堆(heap转载 2021-05-12 11:20:34 · 173 阅读 · 0 评论 -
Java-二叉树
1、树形结构1.1、概念 *树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树 。1.2、概念 ***节点的度: 一个节点含有的子树的个数称为该节点的度;树的度: 一棵树中,最大的节点的度称为树的度;**叶子节点或终端节点:**度为0的节点称为叶节点;双亲节点或父节点: 若一个节点含有子节转载 2021-05-08 15:26:02 · 98 阅读 · 0 评论 -
力扣-二叉树的层序遍历
给一个二叉树,请返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。参考代码(利用队列实现):class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> ret = new LinkedList<>(); if (root == null){原创 2021-05-04 20:10:46 · 226 阅读 · 2 评论 -
力扣-二叉树的前序遍历
给一个二叉树的根节点 root ,返回它节点值的 前序遍历。例如:输入:root = [1,null,2,3]输出:[1,2,3]输入:root = []输出:[]参考代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * Tree原创 2021-04-26 10:53:21 · 149 阅读 · 1 评论 -
力扣-最小栈
题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。其中:push(x) :将元素 x 推入栈中。pop() : 删除栈顶的元素。top() :获取栈顶元素。getMin() : 检索栈中的最小元素。参考代码:class MinStack { private Stack<Integer> stack; private Stack<Integer> minStack; /** initialize原创 2021-04-21 10:51:47 · 98 阅读 · 1 评论 -
力扣-用队列实现栈
题目描述:仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。其中:push:将元素 x 压入栈顶pop:移除并返回栈顶元素top:返回栈顶元素empty:如果栈是空的,返回 true ;否则,返回 false参考代码:class MyStack { private Queue<Integer> queue1; private Queue<Integer> queue2;原创 2021-04-20 23:57:50 · 271 阅读 · 3 评论 -
Java-栈和队列
1.栈(Stack)1.1 什么是栈?栈: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出的原则。压栈: 栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈: 栈的删除操作叫做出栈。出数据在栈顶。1.2 实现栈利用顺序表实现,即使用尾插 + 尾删的方式实现(简单)利用链表实现,则头尾皆可参考代码:public class MyStack { // 此处不考虑扩容问题了 private原创 2021-04-18 10:31:58 · 245 阅读 · 2 评论 -
Java-顺序表和链表
1、线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。2、顺序表2.1 概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组转载 2021-04-07 22:33:09 · 109 阅读 · 0 评论