
数据结构与算法
文章平均质量分 65
七夜丶雪
听雪楼前听雪落,彼岸花开彼岸零
展开
-
数据结构-线段树
线段树特点线段树不是完全二叉树线段树是平衡二叉树对于给定区间, 支持更新和查询操作 :更新 : 更新区间中的一个元素或者一个区间的值查询 : 查询一个区间[i, j]的最大值, 最小值, 或者区间数字和使用数组构建线段树如下图所示数组A, 以求和为例, 根节点A[0-7]存放的就是A[0-3]节点和A[4-7]节点之和, 下面的每个节点存放的值都是该节点对应左右孩子节点的...原创 2018-10-11 09:31:16 · 329 阅读 · 0 评论 -
排序辅助测试-数组工具类
数组工具类数组工具类, 为了方便对排序进行测试, 工具定义了一些便利的方法生成随机int型数组生成一个近乎有序或者完全有序的数组判断一个int型数组是否是从小到大排好序的交换int型数组中两个元素位置数组打印返回排序算法时间数组拷贝, 拷贝一个同样的int型数组对数组arr的[l, r]的区间进行插入排序package utils;import java.util....原创 2018-10-17 10:39:56 · 466 阅读 · 0 评论 -
数据结构-优先队列
优先队列普通队列 : 先进先出(FIFO); 后进后出优先队列 : 出队顺序和入队顺序无关, 和优先级相关使用最大堆可以很方便的实现优先队列, 代码如下 :package queue;import heap.MaxHeap ;/** * 使用最大堆实现优先队列 * @author 七夜雪 * * @param <E> */public class Pri...原创 2018-10-09 21:52:55 · 403 阅读 · 0 评论 -
数据结构-最大堆
堆二叉堆(Binary Heap)二叉堆是一颗完全二叉树堆中某个节点的值总是大于等于(或小于等于)其子节点, 对应的就是最大堆和最小堆可以用数组存储二叉堆, 数组下标以1开始,可以如下展示 :数组从0开始, 展示如下 :操作添加元素在数组的最后一个位置添加一个新元素新的元素进行上浮(Sift Up), 上浮操作如下图:取出元素堆每次只能取出最大的元...原创 2018-10-09 21:40:45 · 4831 阅读 · 2 评论 -
数据结构-映射
存储键值(Key, Value)数据对的数据结构根据键(Key),寻找值(Value)非常容易使用链表或二分搜索树进行实现Java中的HashMap和TreeMap底层分别基于哈希表和红黑树进行实现代码实现 :package map;/** * 使用二分搜索树实现Map * @author 七夜雪 * * @param <K> * @param <V&...原创 2018-10-09 16:41:02 · 705 阅读 · 0 评论 -
数据结构-使用二分搜索树实现集合(Set)
概述集合不能添加重复元素可以使用二分搜索树很方便的实现集合集合的典型应用 :客户统计词汇量统计代码实现集合可以很方便的使用二分搜索树进行实现, 现在引用上面实现的二分搜索树实现集合集合接口定义 :package set;public interface Set&lt;E extends Comparable&lt;E&gt;&gt; { /** * 集合中添加...原创 2018-10-09 14:29:51 · 290 阅读 · 0 评论 -
数据结构-二分搜索树(Binary Search Tree)
特点动态数据结构是一颗二叉树二分搜索树的每个节点的值:每个节点的值都大于其左子树的所有节点的值每个节点的值都小于其右子树的所有节点的值每一颗子树也是二分搜索树存储的元素必须有可比较性, Java中的话就要求二分搜索树保存的数据类型要实现Comparable接口, 或者使用额外的比较器实现一般二分搜索树不包含重复元素, 当然也可以定义包含重复元素的二分...原创 2018-10-09 14:08:28 · 9518 阅读 · 3 评论 -
线性结构-队列
队列特点线性结构队列对应的操作也是数组的子集只能从一端(队尾)添加元素,另一端(队首)取出元素先进先出(FIFO : First In First Out)实现自己的队列基于自己实现的动态数组实现队列,源码地址 :https://blog.youkuaiyun.com/love905661433/article/details/82909334同样可以使用JDK自带的ArrayList进行替...原创 2018-09-30 15:08:34 · 692 阅读 · 0 评论 -
线性结构-栈
栈的特点线性结构栈对应的操作是数组的子集只能从一端添加元素, 也只能从一端取出元素只能从栈顶操作入栈,出栈;又叫压栈和弹栈后进先出Last In First Out(LIFO)栈的应用Undo操作(撤销)程序调用系统栈, jvm方法区中的栈帧括号匹配-编译器实现一个栈这里使用了自己创建的动态数组, 具体代码参加博文:https://blog.youkuaiyun.com/lov...原创 2018-09-30 14:54:06 · 390 阅读 · 0 评论 -
线性结构-动态数组
数组是最简单的线性结构, 不过数组都是固定长度的, Java实现一个功能类似于ArrayList的动态数组package array;/** * 动态数组 * @author qiyexue * @param <E> */public class Array<E> { private int size; private E[] data; pu...原创 2018-09-30 14:44:11 · 291 阅读 · 0 评论 -
高级排序-快速排序详解
辅助工具数组工具类 : https://blog.youkuaiyun.com/love905661433/article/details/83106078用于比较的归并排序代码 : https://blog.youkuaiyun.com/love905661433/article/details/83118153概述快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排...原创 2018-10-18 12:34:11 · 744 阅读 · 1 评论 -
数据结构-平衡二叉树之AVL树
概述二分搜索树 : https://blog.youkuaiyun.com/love905661433/article/details/82981527针对普通的二分搜索树, 在最坏的情况下可能会退化成链表, 所以就引入了平衡二叉树的概念平衡二叉树满二叉树一定是平衡二叉树完全二叉树也是平衡二叉树对于任意一个节点, 左子树和右子树的高度差不能超过1平衡二叉树的高度和节点数量之间的关系是O(log...原创 2018-10-14 19:53:19 · 348 阅读 · 0 评论 -
高级排序算法-归并排序
辅助工具数组工具类代码 : https://blog.youkuaiyun.com/love905661433/article/details/83106078用于对比的基础排序代码 : https://blog.youkuaiyun.com/love905661433/article/details/83117977归并排序O(nlogn)级别算法需要额外的辅助空间稳定的排序算法对于排序算法稳定性的定...原创 2018-10-17 21:36:14 · 231 阅读 · 0 评论 -
排序算法-基础排序算法(冒泡, 选择, 插入)
辅助工具数组工具类代码 : https://blog.youkuaiyun.com/love905661433/article/details/83106078选择排序O(n²)级别算法以从小到大排列为例, 每次循环找到剩余未排序数组中最小的值, 和为排序数组的第一个位置交换位置如针对数组[3, 4, 1, 8, 7], 排序步骤如下:第一次循环结束 : [1, 4, 3, 8, 7]...原创 2018-10-17 21:23:19 · 234 阅读 · 0 评论 -
数据结构-并查集
并查集一种特殊的树, 由子节点执行父节点方便解决连接问题主要操作union(p,q)用于合并p, q所在的集合isConnected(p,q)判断p,q是否相连代码实现首先先定义并查集的接口, 接口定义如下:package tree.uf;/** * 并查集接口 * @author 七夜雪 * */public interface UF { /**...原创 2018-10-13 11:06:26 · 310 阅读 · 0 评论 -
高级排序-堆排序
概述堆排序其实就是利用堆这种数据结构的特性进行排序, 关于堆的特性, 可以参考 : https://blog.youkuaiyun.com/love905661433/article/details/82989404代码实现这里实现一个简单的最大堆, 然后使用最大堆进行排序, 由于只是用来排序, 这里就直接使用一个只支持int类型的堆, 代码如下:package sort.heap;import ...原创 2018-10-22 10:40:32 · 179 阅读 · 0 评论