数据结构
Jaymeng8848
攀爬每一个巨人,站在他们肩膀上看一看
展开
-
图的遍历
图的遍历从图中某一顶点出发访遍图中其顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历。广度优先遍历(BFS):如果说图的深度优先遍历类似树的前序遍历, 那么图的广度优先遍历就类似于树的层序遍历了。以下是邻接矩阵结构的广度优先遍历算法:/* 邻接矩阵的广度遍历算法 */void BFSTraverse(MGraph G){ int i, j; Queue Q; for(i = 0; i < G.numVertexes; i++) visited[i] = FA转载 2020-08-31 11:35:19 · 328 阅读 · 0 评论 -
解决hash冲突
虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的。当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时。冲突就难免会发 生。另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记录,不仅发生冲突,而且还会发生溢出。因此,处理冲突和溢出是 哈希技术中的两个重要问题。1, 开放定址法:所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入公式为:fi(key) = (f(key)+di) MO原创 2020-07-22 20:28:27 · 245 阅读 · 0 评论 -
HashTable源码阅读总结
索引值计算区别:HashMap:(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);(n - 1) & hash])HashTable:key.hashCode();(hash & 0x7FFFFFFF) % tab.length简单来说:HashMap重新定义了自己的哈希值的计算,并且将原本对于数组长度取模的操作改成了位运算在同样效果下提高了效率。而HashTable并不这样。详细的说:对于任原创 2020-07-22 14:45:52 · 174 阅读 · 0 评论 -
红黑树理解以及Java实现
红黑树本身并不复杂,只是在插入删除的时候情况比较多,如果强行记忆的话会显得比较困难,而且容易忘记。所以以前对红黑树一直没有很好的掌握。恰好这次借着复习数据结构的机会,静下心来仔细的学习了一下红黑树,并用Java实现了一番。所以用这篇文章把我对红黑树的操作的理解记录下来,在理解的基础上记忆会容易得多,这样以后就不用重复学习啦!1. 红黑树的定义红黑树是一颗二叉查找树,且具有如下特性: (1) 每个节点或者是黑色,或者是红色。 (2) 根节点是黑色。 (3) 每个叶子节点是黑.转载 2020-07-22 10:19:53 · 124 阅读 · 0 评论 -
【手写系列】红黑树
Map对于Java集合的重要性不必多说,要理解其底层原理,红黑树不了解是不行的public class RBTree<T extends Comparable<T>> { private RBTNode<T> mRoot; // 根结点 private static final boolean RED = false; private static final boolean BLACK = true; public clas原创 2020-07-21 21:24:15 · 116 阅读 · 0 评论 -
HashMap底层原理
目录前言几个点:基本属性定位哈希桶数组索引位置get 方法代码块1:getTreeNode代码块2:find代码块3:comparableClassForput 方法代码块4:putTreeVal代码块5:tieBreakOrder代码块6:treeifyBin代码块7:treeify代码块8:moveRootToFront代码块9:checkInvariantsresize 方法代码块10:split代码块11:untreeify例子1:扩容后,节点重 hash 为什转载 2020-07-21 18:21:54 · 194 阅读 · 0 评论 -
【手写系列】动态数组
仅供学习,有参考其他博客。尽可能接近ArrayListimport java.util.Iterator;import java.util.NoSuchElementException;/** * @author Jay * @date 2020/7/7 13:52 * @Description: */public class Array <E> implements Iterable<E>{ //参数化类型 private E[] data;原创 2020-07-07 14:52:22 · 158 阅读 · 0 评论 -
【手写系列】单链表
仅学习复习/** * @author Jay * @date 2020/7/7 15:27 * @Description: */public class LinkList<E> { private class Node{ public E e; public Node next; public Node(E e,Node next){ this.e=e; this.next=原创 2020-07-07 22:12:32 · 178 阅读 · 1 评论 -
【手写系列】队列
队列的三种实现1.数组队列/** * @author Jay * @date 2020/7/8 19:39 * @Description: */public class ArrayQueue<E> { private Array<E> array; public ArrayQueue(int capcity){ array=new Array<>(capcity); } public ArrayQueu原创 2020-07-09 22:33:57 · 153 阅读 · 0 评论 -
【手写系列】栈
栈的实现和大多数数据结构一样,底层依靠的是动态数组和链表,也就是数据结构里的顺序表和链表1.顺序栈`/** * @author Jay * @date 2020/7/10 8:55 * @Description: */public class ArrayStack <E> { Array<E> array; public ArrayStack (){ array=new Array<>(); } public原创 2020-07-10 09:34:20 · 112 阅读 · 0 评论 -
【手写系列】映射
映射接口:package com.example.demo.handwrite;/** * @author Jay * @date 2020/7/14 10:02 * @Description: */public interface Map<K,V> { void add(K key,V value); V remove(K key); void set(K key,V newValue); V get(K key); boolean is原创 2020-07-20 21:15:03 · 220 阅读 · 0 评论 -
【手写系列】二叉搜索树BST
Binary Search Tree:/** * @author Jay * @date 2020/7/10 10:22 * @Description: */public class BST <E extends Comparable<E>> { private class Node{ private E e; private Node left,right; public Node(E e){原创 2020-07-14 09:35:08 · 137 阅读 · 0 评论 -
【手写系列】集合
集合基于二叉搜索树和单链表实现。另外实现单链表主要是比较他们的效率,且二叉搜索树的最坏时间复杂度会退化为一条单链表,时间复杂度也会变为O(log2 n)单链表集合:/** * @author Jay * @date 2020/7/14 9:47 * @Description:单链表集合 */public class LinklistSet<E extends Comparable<E>>implements Set<E> { LinkList<原创 2020-07-14 10:00:11 · 168 阅读 · 0 评论 -
【数据结构】记录
还是老样子记录一下学习数据机构的专栏,主要在于实现的代码理解。大部分实现的数据结构可以直接参考我的手写数据结构系列,另外的可以看数据结构专栏这位博主的专栏,我觉得写的非常好,一起学习一定能学到精髓...原创 2020-07-21 16:59:52 · 112 阅读 · 0 评论