数据结构与算法
数据结构与算法
我_是_太_阳
不满足是向上的车轮
展开
-
深入理解HashMap
哈希表核心是基于哈希值的桶和链表O(1)的平均查找、插入、删除时间致命的缺陷是哈希值的碰撞(collision)图表理解Java7中的HashMap(数组+链表)一、put操作理解。1、首先对于HashMap,我们存的是什么呢?就是key和value,表面上上我们看到的key和value是分开的,但是真正在实现的时候,HashMap会把这个key和value生成一个Entry对象,...原创 2020-03-30 21:24:36 · 269 阅读 · 0 评论 -
快速排序---效率极高
代码实现:package sort;public class quickSort { public static void main(String[] args) { int arr[] = {6, 3, 7, 9, 5, 1, 4, 8}; quickSort(arr, 0, arr.length - 1); for (int ...原创 2020-03-17 17:29:18 · 1523 阅读 · 0 评论 -
Trie字典树 (处理字符串)
主要用于处理字符串,将字符串一个一个拆开。import java.util.TreeMap;public class Trie { private class Node{ public boolean isWord; public TreeMap<Character, Node> next; public Node(...原创 2020-03-16 16:16:54 · 1289 阅读 · 0 评论 -
线段树(区间树)
为什么使用线段树?什么是线段树?每一个节点存储的是一个区间中相应统计值原创 2020-03-16 13:00:32 · 1286 阅读 · 0 评论 -
优先队列的实现
基于堆的优先队列package MaxHeap;import Queue.Queue;public class PriorityQueue<E extends Comparable<E>> implements Queue<E> { private MaxHeap<E> maxHeap; public PriorityQ...原创 2020-02-16 15:20:21 · 7824 阅读 · 0 评论 -
堆的操作
向堆中添加元素上浮操作代码: public void swap(int i, int j) { if (i < 0 || i >= size || j < 0 || j >= size) throw new IllegalArgumentException("Index is illegal."); ...原创 2020-02-15 16:28:07 · 9583 阅读 · 0 评论 -
堆和优先队列
什么是优先队列为什么会使用优先队列动态:任务处理中心随时都在处理各种各样的请求,也就是说不是一开始就确定了各种请求的优先级的,请求的优先级是不断地变化的。堆的基本结构堆其实也是一棵树。 二叉堆的性质 :首先是一个完全二叉树堆中某个节点的值总是不大于其父节点的值 ---->最大堆数组实现最大堆package MaxHeap;public cla...原创 2020-02-15 11:24:32 · 11065 阅读 · 0 评论 -
映射Map
数学理解:接口实现:package Map;public interface Map<K, V> { void add(K key, V value); V remove(K key); boolean contains(K key); V get(K key); void set(K key, V newValue);...原创 2020-02-15 10:13:00 · 11100 阅读 · 0 评论 -
集合Set
集合的一个关键的特点就是不能存放重复的元素,二分搜索树是一个非常好的实现集合的底层数据结构1、二分搜索树实现集合:set接口package Set;public interface Set<E> { void add(E e); boolean contains(E e); void remove(E e); int getSize(...原创 2020-02-14 13:53:20 · 11948 阅读 · 0 评论 -
二分搜索树删除元素
要删除元素中的某个元素 首先要找到这个元素。1、找到二分搜索树中的最小元素和最大元素。//寻找二搜索树的最小元素 public E minmum() { if (size == 0) { throw new IllegalArgumentException("BST is empty"); } return min...原创 2020-02-13 13:26:38 · 13989 阅读 · 0 评论 -
二分搜索树的遍历
1、前序遍历 中->左->右示例代码: //二分搜索树的前序遍历 public void preOrder() { preOrder(root); } //前序遍历以node为根的二分搜索树,递归算法 private void preOrder(Node node) { if (node == null) {...原创 2020-02-13 11:12:43 · 13986 阅读 · 0 评论 -
树、二叉树、二分搜索树
将数据使用树结构存储后,出去的高效!二叉树基本概念二叉树也具有天然的递归结构二叉树不一定是“满”的。以下均为二叉树二分搜索树基本概念二分搜索树代码示例package BinarySearchTree;//二分搜索树同样也是支持泛型的 但是泛型的类型要可比较public class BinarySearchTree<E extends Comparable<...原创 2020-02-08 18:34:32 · 19084 阅读 · 0 评论 -
递归的运行机制
以求数组元素的和为例讨论递归的运行机制模拟执行过程第一步:第二步:package recursion;public class ArraySum { public static int Sum(int[] arr) { return Sum(arr, 0); } public static int Sum(int[] arr, int ...原创 2020-02-08 14:55:05 · 19309 阅读 · 0 评论 -
算法---递归
1、什么是递归?“要理解递归,就得先了解什么是递归”,实际上这句话就是一个递归。哈哈,是不是把大家说蒙了,没关系,接下来举个从小就听 过的例子:从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山…2、举例数组求和----计算数组某个区间内所有谁的和package recursion;public class Sum { ...原创 2020-01-19 19:16:33 · 19107 阅读 · 0 评论 -
数据结构-使用链表实现队列
使用链表实现队列目录结构Queue接口package LinkedListQueue;//队列public interface Queue<E> { int getSize(); boolean isEmpty(); void enqueue(E e); //向队列中添加元素 E dequeue(); //向队列中取出元素(出队...原创 2020-01-18 22:13:34 · 19245 阅读 · 0 评论 -
数据结构-使用链表实现栈
目录结构Stack接口package LinkedListStack;public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); //向栈中添加元素 E pop();//向栈中取出元素 E peek();//查看栈顶的元素}...原创 2020-01-18 21:27:54 · 19013 阅读 · 0 评论 -
数据结构-链表(二、底层实现---源码)
package LinkedList;public class LinkedList<E> { //内部类 private class Node { public E e; public Node next; // 用户传来e 和 next public Node(E e, Node ne...原创 2020-01-18 20:53:09 · 18915 阅读 · 0 评论 -
数据结构-链表(一、过程分析)
一、为什么链表很重要首先链表是真正的动态数据结构,也是最简单的一种动态数据机构,通过对链表的学习,我们可以更深入的理解引用和递归,也可以辅助组成其他数据结构!二、什么是链表链表是由节点组成的,每一个节点包括当前节点的数据和下一个节点的地址。数据存储在节点中,链表的空间是有限的,当最后一个节点的next是null的时候,意味着这个节点一定是最后一个节点。这就是链表。优点:是真正的动态数组,不...原创 2020-01-18 20:52:51 · 18089 阅读 · 0 评论 -
数据结构-队列Queue
一、什么是队列队列也是一种线性结构,相比数组,队列对应的操作是数组的子集,只能从一端( 队尾)添加元素,也只能从另一端(队首)取出元素!队列是一种先进先出的数据结构(先到先得 )First In First Out(FIFO)。二、队列的实现...原创 2019-11-16 16:51:04 · 18286 阅读 · 0 评论 -
数据结构-栈(Stack)
一、什么是栈栈是一种线性结构,相对于数组,栈对应的操作是数组的子集,只能从一端添加元素,也只能从一端取出元素 ,这一端成为栈顶。栈是一种后进先出的数据结构(Last In First Out–LIFO),在计算机的世界里,栈拥有着不可思议的作用。二、栈的应用2.1 在word或者其他编辑器中,当我们输入一些文本内容的时候,就用到了栈。(举例:”沉迷学习无法自拔”)在这个栈中,沉迷,学习,...原创 2019-11-14 21:49:05 · 18703 阅读 · 0 评论 -
数据结构-数组(Array)
一、什么是数组在某些情况下,虽然可以使用单个变量来存储信息,但是如果需要存储的信息较多(例如存储 50 名学生的成绩),这时再依次创建变量声明并赋值显得非常麻烦。随着处理的信息量越来越大,工作也就越来越烦琐,这时可以使用数组或集合来存储信息。通过使用数组,可以在很大程度上缩短和简化程序代码,从而提高应用程序的效率。数组(array)是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素...原创 2019-11-13 22:06:52 · 24210 阅读 · 0 评论