数据结构
文章平均质量分 64
shy_black
18710905225@163.com
展开
-
关于redis跳表skipList实现的理解
Redis 跳表:skipList的原理:先谈谈有序双向链表:redis很快,为什么快?因为内存操作+单线程(redis6.0之前)吗,不全是1.从有序链表到跳表有序双向链表查询的时间复杂度为O(n),效率并不高,有什么办法可以提高查询效率呢?,试试二分法在做增删改操作时,每隔一个节点,维护一个二层指针,用来提高查询效率,eg.查询值为9时,单层有序链表查询过程为:1->3->5->7->9二层有序链表查询过程为:1->5->9效率有所提升既然尝到原创 2021-09-05 17:29:08 · 126 阅读 · 0 评论 -
二叉树的非递归 先序,中序,后序,层序遍历
//前序递归遍历 public void preOrderTraverse() { //输出根节点值 if (root != null) { System.out.print(root.value + "--"); //对左子树先序遍历 //构建一个二叉树,根是左子树的根 ...原创 2019-04-23 18:06:27 · 735 阅读 · 0 评论 -
二分搜索树删除最大最小元素节点
移除最小元素节点:首先我们知道,二分搜索树的结构是每一个节点的左子树值都比该节点小,右子树的值都比该节点大,所以,一颗二分搜索树的最小元素节点必定在他的最左端节点。相同的,一颗二分搜索树的最大元素节点必定在他的最右端节点,删除最小元素节点:我们只需要先找到该树的最左端元素节点判断该节点有没有右子树,如果有,则将其右子树先保存起来,再将其从二分搜索树断开,,最后返回该右子树节点(返回该右子树...原创 2019-04-24 13:38:01 · 380 阅读 · 0 评论 -
二叉搜索树的删除指定元素节点操作
//提供一个给用户方便使用的方法,在这个方法中调用私有方法 public void remove(E e) { remove(root,e); } //删除以node为根的二分搜索树中值为e的节点,递归算法 //返回删除节点后新的二分搜索树的根 /** * * @param node * @param e...原创 2019-04-24 18:42:21 · 365 阅读 · 1 评论 -
堆排序
/**@author shy_black@date 2019/4/29 16:07@Description:堆排序原理(过程):1.先将数组转化为堆的形式2.循环:每次将堆顶元素与数组末尾元素交换,将数组大小减一然后进行shifDown操作(还原剩余数组的堆形式,使得堆顶元素还是最大)细节:shifDown:寻找当前节点的较大子节点,找到后交换当前元素与子节点的位置,更新当...原创 2019-04-29 16:37:07 · 110 阅读 · 0 评论 -
堆的基本操作
堆:逻辑上是一颗完全二叉树物理上是数组的形式 ,顺序存储作用:找数组中的前K大的值特点: 大顶堆:任意一个root的值>=左右子树的值 小顶堆:任意一个root的值<=左右子树的值–要调整root所在的节点前提:root的左右子树都已满足堆的性质如果root所在的节点已经是叶子结点,调整结束找到左右孩子中较小的一个min堆的基本操作(以大顶堆为例)查找堆元素的...原创 2019-04-25 17:31:23 · 171 阅读 · 0 评论 -
剑指offer--翻转单词顺序列
/** * @author shy_black * @date 2019/7/31 23:18 * @Description: * 使用String的一个方法--trim(),它的作用是去除字符串俩边的空格 * 首先判断str去除字符串俩边空格后是否为""即空字符串,将trim以 * " "空格分为一个个单词,反向遍历split数组,在每次遍历时都在其后边加上 * " "空格,最后将...原创 2019-07-31 23:24:57 · 107 阅读 · 0 评论 -
剑指offer--二叉树的下一个结点
思路:(1) 若该节点存在右子树:则下一个节点为右子树最左子节点(如图节点 B )(2) 若该节点不存在右子树:这时分两种情况:2.1 该节点为父节点的左子节点,则下一个节点为其父节点(如图节点 D )2.2 该节点为父节点的右子节点,则沿着父节点向上遍历,知道找到一个节点的父节点的左子节点为该节点,则该节点的父节点下一个节点(如图节点 I ,沿着父节点一直向上查找找到 B ( B 为其...原创 2019-07-31 23:43:19 · 82 阅读 · 0 评论 -
剑指offer--把二叉树打印成多行
import java.util.*;/** * @author shy_black * @date 2019/7/28 17:09 * @Description: * 首先明确--> 需求为将二叉树的每一层节点值放入一个链表中, * 每一层节点又可以作为一个链表进行存储,所有先创建一个ArrayList<ArrayList<Integer&...原创 2019-07-28 19:47:45 · 82 阅读 · 0 评论 -
_46_全排列
import java.util.ArrayList;import java.util.List;/** * @author shy_black * @date 2019/8/20 19:02 * @Description: */public class _46_全排列 { public List<List<Integer>> permut...原创 2019-08-20 19:27:00 · 99 阅读 · 0 评论 -
并查集相关知识
并查集 :是一种树形的数据结构,用于处理一些不想交的集合的合并和查询问题。长藏在使用中以森林来表示。作用:可以判断网络中的节的连接状态。对一组数据主要支持两个动作:union(p,q)//将p,q所在的集合合并为同一集合isConnected(p,q)//查看p,q是否是同一集合的元素find( p )//查找元素所在的集合,即根节点代码实现:``//并查集接口public in...原创 2019-04-22 19:22:36 · 142 阅读 · 0 评论 -
包含min函数的栈
import java.util.Stack;/** * @author shy_black * @date 2019/3/19 9:45 * @Description:主要是借助辅助栈min解决问题 * push方法: * 将node节点push,当该元素是stack中第一个push的元素或该元素小于min栈的顶部元素的 * 将该元素也push到min栈中,否则,就将min栈的...原创 2019-03-19 09:52:21 · 97 阅读 · 0 评论 -
静态顺序表的初始化,基本操作及冒泡,选择排序应用
静态顺序表主要掌握顺序表的基本操作和初始化顺序表,是初学数据结构者遇见的第一种存储结构,后续如果有什么想法的话会持续更新…//2018.9.19head.h#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;assert.h&gt;#include&lt;string.h&gt;#原创 2018-09-19 15:47:58 · 656 阅读 · 0 评论 -
删除单链表中指定元素
解题思路:1.判断头结点是否为需要删除的元素,为防止链表开头有多个元素均为指定元素,所以使用while循环判断2.判断头结点是否为空,3.声明一个prev节点,prev.next节点为当前判断的节点,如果当前节点的值等于指定元素,那么直接用prev.next.next替换prev.next;如果不相等,则执行prev = prev.next,判断的下一个节点;public class ...原创 2019-03-05 20:19:35 · 9375 阅读 · 5 评论 -
LeetCode 206. 反转链表
public class 逆置单链表_02 { // Definition for singly-linked list. public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class ...原创 2019-03-06 00:35:01 · 78 阅读 · 0 评论 -
回文链表
public class 回文链表_03 {// Definition for singly-linked list. public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class S...原创 2019-03-06 22:19:25 · 77 阅读 · 0 评论 -
链表中倒数第k个节点
public class 链表中倒数第k个节点_04 { public ListNode FindKthToTail(ListNode head, int k) { //判断链表是否为空 if (head == null) return head; //判断k是否为0 i...原创 2019-03-07 14:56:02 · 63 阅读 · 0 评论 -
合并俩个有序链表
public class 合并俩个有序链表_06 { // Definition for singly-linked list. private class ListNode { int val; ListNode next; ListNode(int x) { val = x; ...原创 2019-03-07 17:42:07 · 75 阅读 · 0 评论 -
相交链表
public class 相交链表_09 { public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public ListNode getIntersectionNode(Lis...原创 2019-03-07 19:32:40 · 82 阅读 · 0 评论 -
俩个栈实现队列
import java.util.Stack;/**@author shy_black@date 2019/3/19 8:49@Description:1.s1看做真队列,s2看为辅助队列2.每次push操作时,先把s1中的元素依次放入s2中,将要push的元素压入s1,最后再把s2中的元素依次压入s1中,保证了每次压入的元素在栈s1(队列)中的最低下3...原创 2019-03-19 08:55:39 · 133 阅读 · 0 评论 -
栈的压入_弹出序列
import java.util.*;/** * @author shy_black * @date 2019/3/19 9:18 * @Description: * 使用一个辅助栈, * 1.循环入栈,循环比较-->当当前栈顶元素与预期出栈队列中的index下标元素相等时,将相等的元素出栈,index++ * 2.当pushA元素入栈完成后,如果popA中还有元素未进行比较,...原创 2019-03-19 09:25:27 · 146 阅读 · 0 评论 -
动态顺序表相对于静态顺序表变了些什么?
head.h#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;assert.h&gt;#include&lt;string.h&gt;#define DataType int #define MAX 50typedef struct SeqList{ DataType原创 2018-09-18 11:27:30 · 256 阅读 · 0 评论