work hard work smart

专注于Java后端开发。 不断总结,举一反三。
随笔 - 1158, 文章 - 0, 评论 - 153, 阅读 - 186万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

随笔分类 -  M.数据结构

摘要:一、算法导论中的红黑树 1、每个节点或者是红色的,或者是黑色的 2、根节点是黑色的 3、每一个叶子节点(最后的空节点)是黑色的 4、如果一个节点是红色的,那么他的孩子节点都是黑色的 5、从任意一个节点到叶子节点,经过的黑色节点是一样的 二、2-3树 满足二分搜索树的基本性质 节点可以存放一个元素或者 阅读全文

posted @ 2021-02-17 20:37 work hard work smart 阅读(77) 评论(0) 推荐(0) 编辑

摘要:基于平衡二叉树实现Set public class AVLTreeSet<E extends Comparable<E>> implements ISet<E> { private AVLTree<E,Object> avl; public AVLTreeSet(){ avl = new AVLTr 阅读全文

posted @ 2021-02-14 21:56 work hard work smart 阅读(140) 评论(0) 推荐(0) 编辑

摘要:基于平衡二叉树实现Map public class AVLTreeMap<K extends Comparable<K>,V> implements IMap<K,V> { private AVLTree<K,V> avl; public AVLTreeMap(){ avl = new AVLTre 阅读全文

posted @ 2021-02-14 21:53 work hard work smart 阅读(146) 评论(0) 推荐(0) 编辑

摘要:平衡树与AVL 1、二分搜索树存在的问题 如果数据是顺序添加到二分搜索树,二分搜索树会退化成一个链表,这就好大大降低二分搜索树的效率。 如何解决这个问题呢? 需要添加一种机制,使得二分搜索树维持平衡二叉树的性质。AVL树就是一种经典的平衡二叉树。 2、AVL树介绍 AVL的名称来自俄罗斯两位科学的名 阅读全文

posted @ 2021-02-14 21:42 work hard work smart 阅读(335) 评论(0) 推荐(0) 编辑

摘要:一、优先队列场景:1、系统中动态选择优先级最高的任务执行2、医院根据患者的患病情况,选择哪个患者最先做手术。3、游戏中,士兵去攻击优先级最高的那个敌人。 二、优先队列底层数据结构复杂度对比 三、堆 1、二叉堆Binary Heap 使用二叉树表示的堆,二叉堆是一棵完全二叉树 完全二叉树: 把元素顺序 阅读全文

posted @ 2021-02-13 22:28 work hard work smart 阅读(146) 评论(0) 推荐(0) 编辑

摘要:1、什么是Map(映射) 存储( 键,值) 数据对的数据结构(Key,Value) 根据键(Key),寻找值(Value) 非常容易使用链表或者二分搜索树实现。 2、基于链表实现Map public class LinkedListMap<K,V> implements IMap<K,V>{ pri 阅读全文

posted @ 2021-02-12 22:46 work hard work smart 阅读(257) 评论(0) 推荐(0) 编辑

摘要:集合的典型应用: 客户统计 词汇量统计 1、基于二分搜索树的集合 定义接口ISet public interface ISet<E> { void add(E e); void remove(E e); boolean contains(E e); int getSize(); boolean is 阅读全文

posted @ 2021-02-12 13:58 work hard work smart 阅读(127) 评论(0) 推荐(0) 编辑

摘要:1、为什么要使用树结构 将数据使用树结构存储后,出奇的高效。 2、常用的数结构 二分搜索树(Binary Search Tree) 平衡二叉树: AVL; 红黑树 堆; 并查集 线段树; Trie(字典树,前缀树) 3、二叉树 和链表一样,动态数据结构 对于每一个节点,最多有两个孩子。 二叉树具有唯 阅读全文

posted @ 2021-02-11 21:17 work hard work smart 阅读(91) 评论(0) 推荐(0) 编辑

摘要:一、Leetcode中与链表向操作 203. 移除链表元素 删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 https://leetcode-cn.com/problems/remove-lin 阅读全文

posted @ 2021-02-11 10:41 work hard work smart 阅读(61) 评论(0) 推荐(0) 编辑

摘要:1、改进的链表(增加tail) 增加tail,指向链表尾部节点。这样在head和tail添加节点都很容易。 从tail端删除节点并不容易,因为无法找到tail之前的那个节点。在head端删除节点容易。 根据以上特性, head端作为队首, tail端最为队尾。 从head端删除元素,从tail端插入 阅读全文

posted @ 2021-02-09 10:57 work hard work smart 阅读(175) 评论(0) 推荐(0) 编辑

摘要:从上一篇博客链表( 自定义链表)知道,链表如果增删只对链表头操作O(1), 查找链表头元素O(1) ,这样的操作符合栈这个数据结构。 下面我们使用自定义链表实现自定义栈 1、前面定义的栈接口 public interface IStack<E> { int getSize(); boolean is 阅读全文

posted @ 2021-02-08 23:33 work hard work smart 阅读(133) 评论(0) 推荐(0) 编辑

摘要:1、什么是链表? 数据存储在“节点”(Node)中 Class Node{ E e; Node next; } 有点: 真正的动态,不需要处理固定容量的问题。 缺点: 和数组相比,丧失了随机访问的能力。 2、数组和链表的对比 数组最好用于索引有语义的情况,如scores[101], 学号为101的学 阅读全文

posted @ 2021-02-08 22:59 work hard work smart 阅读(279) 评论(0) 推荐(0) 编辑

摘要:1、什么是队列 队列也是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素。 队列是一种先进先出的数据结构( 先到先得) First In First Out(FIFO) 2、自定义队列 1) 定义接口 public interface IQ 阅读全文

posted @ 2021-02-07 22:18 work hard work smart 阅读(173) 评论(0) 推荐(0) 编辑

摘要:1、什么是栈 栈也是一种线性结构, 相比数组,栈对应的操作是数组的子集 只能从一端添加元素,也只能从一端取出元素 这一端称为栈顶 栈是一种后进先出的数据结构。 2、栈的应用 1) 编辑器无处不在的Undo操作(撤销) 2) 程序调用的系统栈 函数A中调用函数B,函数B中调用函数C。 如果C函数执行完 阅读全文

posted @ 2021-02-07 13:50 work hard work smart 阅读(108) 评论(0) 推荐(0) 编辑

摘要:数组的定义,参考Java 数组 数组的使用 1、定义一个数组 //必须初始化数组的长度,这里为10 int[] arr = new int[10]; for(int i = 0;i < arr.length; i++){ arr[i] = i; } //设置初始值 int[] score = new 阅读全文

posted @ 2021-02-07 09:26 work hard work smart 阅读(322) 评论(0) 推荐(0) 编辑

摘要:1、冒泡排序 1.冒泡排序 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"(冒泡因此得名)。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止 阅读全文

posted @ 2012-02-03 10:50 work hard work smart 阅读(487) 评论(0) 推荐(0) 编辑

摘要:常用的排序 1、插入排序 插入排序的基本思想是:每次将一个待排序的记录按其关键字大小插入前面已经排好序的子记录中的适当位置,直到全部记录插入完成为止。常用的插入排序有直接插入排序和希尔排序。 2、归并排序 归并排序(Merge Sort)是利用“归并”技术来进行排序。归并排序是将若干个已经排序的序列 阅读全文

posted @ 2011-03-27 22:25 work hard work smart 阅读(411) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示