
数据结构
中都
风习袅袅,盈水展千华,飞檐亭角清铃响;犹记当初,你回眸莞尔,一笑倾城百日香。!
展开
-
树——2-3-4树、B树(B+树、B-树)
目录2-3-4树B树2-3-4树2-3-4树的特点:它是平衡树;每个节点最多可以存三个数据项;不存在空节点;叶节点可以有数据项没有子节点;插入数据项的时候数据总是插入在叶节点中,这点很重要;对于非叶节点来说:有一个数据项的节点总是有两个子节点;有两个数据项的节点总是有三个子节点;有三个数据项的节点总是有四个子节点;L:表示子节点个数;D:表示数据项个数;针对非叶节...原创 2019-06-23 15:39:34 · 2872 阅读 · 0 评论 -
跳跃表
相比于经常使用的平衡数据结构:B树、红黑树、AVL树等。跳跃表在保证了与他们不相上下的效率的同时实现还相对简单的多;目录跳跃表原理跳跃表的查询跳跃表的插入跳跃表的删除跳跃表的实现跳跃表原理我们平时实现的一个有序链表是这样的:对,跳跃表也是一个有序的数据结构,然后看看上面这个例图,我们在查找数据的时候是需要遍历这个链表的(当然有的时候不需要全部遍历,不过这个数据结构查找的平均时间复杂度还是...原创 2019-06-23 15:39:54 · 776 阅读 · 0 评论 -
树——AVL树
文章目录AVL树(BST树的优化和改进)AVL树代码AVL树(BST树的优化和改进)BST树最差的情况下,就退化成一条链表了,增删查的时间复杂度就无法达到O(log2n\log_2nlog2n) ,AVL树在BST的基础上,加入了节点左右子树高度差的概念,就是任意一个节点的左子树和右子树的高度差不能超过1,就说这颗树是一颗平衡树,否则就要通过既定规则的旋转操作,使排序树达到平衡的状态。A...原创 2019-06-20 14:38:29 · 605 阅读 · 0 评论 -
单链表的基本操作(二)两个有序单链表的合并
示意图:/** * @ClassName TestDemo1 * @Description 合并两个有序链表 * @Author lzq * @Date 2018/10/20 19:06 * @Version 1.0 **/public class TestDemo1 { /** * 合并两个有序的单链表 * @param x1 * @p...原创 2018-04-30 22:09:39 · 1623 阅读 · 0 评论 -
单链表的基本操作(一)(排序、删除重复元素、反转、求倒数第k个元素等)
目录一、单链表的基本操作增、删、改、查二、单链表的排序、删除重复元素、反转、求倒数第k个元素等一、单链表的基本操作增、删、改、查import java.util.ArrayList;/** * @ClassName LinkList * @Description 单链表基本操作增、删、改、查 * @Author lzq * @Date 2018/11/21 20:25 * @Ve...原创 2018-04-30 01:06:47 · 747 阅读 · 0 评论 -
哈希表、哈希函数、哈希冲突与解决
目录哈希函数的构建:哈希表:通过关键码来映射到值的一个数据结构;哈希函数:键与值映射的一个映射关系;哈希函数的构建:常用方法:1、直接寻址法:f(x) = kx+b (k、b都是常数) ,一旦确定了哈希函数,那么添加、获取元素都需要通过这个哈希函数;2、除留余数法:f(x) = x%k (k是常数,k <= m (m为存储位置长度)) ;其他几种方法:方法名说明...原创 2018-08-07 20:13:59 · 956 阅读 · 0 评论 -
树——树相关的常见问题
有关树的面试题:有关树的常见问题:如何得到树的节点个数?遍历这棵树,用一个值记录节点个数即可;如何得到以可树的高度?递归得到每个节点的左右子节点的高度,在加上当前节点自己,返回给上一层调用,这样就会一层一层的得到从每个叶子节点往上返回的高度,最终得到树的高度;如何得到一棵树的镜像?(就是每个节点的左右子节点调换位置);采用前序、中序、后序遍历中的任何一种,从叶子节点开始交...原创 2019-06-23 15:38:04 · 1328 阅读 · 0 评论 -
图——深度优先搜索和广度优先搜索
目录图的深度优先搜索图的广度优先搜索图的实现方式主要用到矩阵或链表,这里用的矩阵;图的深度优先搜索就是一条路径一条路径的往完了走,需要用到栈;而广度优先搜索就是一层一层的搜索,需要用到队列;这个是两种遍历方式都会用到的表示图节点的代码:/** * @ClassName Node * @Description 图节点 * @Author lzq * @Date 2019/6/19 0...原创 2019-06-23 15:41:18 · 626 阅读 · 0 评论 -
字典树
文章目录字典树原理字典树的实现字典树原理下面就是拿字典树(Trie树)储的单词and、as、at、cn、com:Trie树的性质:根节点不包含字符,除根节点外的每一个子节点都包含一个字符。从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串。每个单词的公共前缀作为一个字符节点保存。Trie树的作用:词频统计。可能有人要说了,词频统计简单啊,一个hash或...原创 2019-06-05 16:29:43 · 358 阅读 · 0 评论 -
图 —— 拓扑排序
当每个任务有前后置关系时,需要找到一种满足前后置关系的路线,将任务完成。如果将每个任务看成一个节点,任务之间的前后置关系表示为有向图时,这种路线顺序叫做为图进行拓扑排序。也叫关键路径分析。这里的图用邻接矩阵法表示,算法的关键是:找到一个没有后继的顶点 ;在图中删除它,放入结果数组中 ;重复 步骤 1 ,步骤 2 直到图中没有多余的节点;代码:/** * @ClassName N...原创 2019-06-23 15:42:33 · 874 阅读 · 0 评论 -
图 —— 最短路径(一)Dijkstra算法
目录1、最短路径概念2、Dijkstra最短路算法图解3、求最短路径的简单代码(1)如果要求打印出指定起点到其他各点的最短路径长度(2)如果要求打印出指定起点到其他各点的最短路径 即连路径也要打印出来1、最短路径概念最短路径就是图中两点之间经过的最短距离(就是最小权值),图必须是带有权值的,可以是无向可以是有向的,算法具体的形式包括:确定起点的最短路径问题:即已知起始结点,求最短路径...原创 2019-06-23 15:42:42 · 2187 阅读 · 0 评论 -
图 —— 最小生成树
目录无权图的最小生成树带权图的最小生成树1、无向带权图的最小生成树2、有向带权图的最小生成树说明和总结注意:最小生成树和最短路径不一样的,实际应用中就是:最小生成树求的是经过所有城市的最短的那条路,最短路径只是求两个城市之间最短的那条路,它并不经过所有城市!无权图的最小生成树无权的实现很简单:随便从一个顶点开始找一个经过所有节点的路径即可;下面的代码也是基于深度优先搜索实现的:/**...原创 2019-06-23 15:41:56 · 1927 阅读 · 0 评论 -
树——红黑树
文章目录红黑树的定义红黑树的性质定义:红黑树的左旋和右旋红黑树的插入操作红黑树的删除操作实现代码红黑树的定义AVL树为了维护节点平衡,在插入和删除时做了大量的旋转操作,当数据量大了以后,AVL树的旋转操作就拖慢了插入删除的时间,那么红黑树相比于AVL树,插入删除的旋转次数要少了很多,那是因为红黑树并不是一颗绝对平衡的树,它的节点左右子树的高度差不超过2倍(长不超过短的2倍)。红黑树的性质定义...原创 2019-06-23 15:38:57 · 831 阅读 · 2 评论 -
树—— 二叉树的遍历
目录1、前序遍历:2、中序遍历3、后序遍历4、层序遍历代码:树的四种遍历方式的递归和循环实现:按从左到右的思维习惯主要有四种:前、中、后序遍历主要看你把根节点放在什么时候遍历,放在第一个遍历然后依次遍历左子树、右子树(前序遍历),先遍历左子树、遍历完了再来遍历根节点、然后遍历右子树,把根节点的遍历放中间就是(中序遍历),把根节点放最后遍历的就是后序遍历。1、前序遍历:若二叉树为空,则返回,...原创 2019-06-14 02:24:26 · 832 阅读 · 0 评论 -
队列——两个队列实现一个栈
package com.xagy.duiliezhan;/* * 优先级队列:按照优先级储存数据*/class PrioLink { class Entry { int data;//数据 int prio;//优先级 Entry next;//地址 public Entry() { data =原创 2018-05-10 13:44:37 · 471 阅读 · 0 评论 -
链表——环形链表
环形链表也叫循环单链表,操作原理和单链表差不多,只是最后一个节点不在指向空(null)而是头(head);/* * 循环单链表*/class TestCLink{ class Entry{//节点类 int data; Entry next; public Entry() { this.data = 1;原创 2018-05-07 01:55:00 · 6495 阅读 · 0 评论 -
链表——双向链表
每个节点即有指向前一个节点的地址,还有指向后一个节点的地址;/* 双向循环链表*/class DoubeLink { class Entry { int data; Entry next;//后继 Entry prio;//前驱 public Entry() { this.data = -1;...原创 2018-05-07 02:03:17 · 349 阅读 · 0 评论 -
栈
栈:先进后出,后进先出,LIFO(后进先出)栈的实现:1,数组实现 - 顺序栈import java.util.Arrays;/** * @ClassName SqStack * @Description 顺序栈 * @Author lzq * @Date 2018/12/2 20:55 * @Version 1.0 **/public class SqStack {...原创 2018-05-08 18:30:48 · 316 阅读 · 0 评论 -
队列的实现
队列:先进先出,后进后出,FIFO(First In First Out)1、数组实现——循环队列1、元素的插入2、获得队头元素3、删除队头元素/** * @ClassName LoopQueue * @Description 循环队列 * @Author lzq * @Date 2018/5/4 20:36 * @Version 1.0 **/public cl...原创 2018-05-08 18:49:06 · 444 阅读 · 0 评论 -
单链表的基本操作(三)两个链表的交和环
目录单链表的交:单链表的环单链表的交:用到的LinkList类 /** * @ClassName Intersect * @Description 单链表的交 * @Author lzq * @Date 2018/12/8 19:35 * @Version 1.0 **/public class Intersect { /** * 创建交点 ...原创 2018-05-01 21:13:04 · 864 阅读 · 0 评论 -
树——二叉搜索树
文章目录概念二叉搜索树(BST树)代码方案1(删除节点的时候通过调整节点实现)方案2(删除节点的时候通过覆盖实现)概念二叉搜索树(BST树)添加、查找元素时:二叉搜索树左子节点永远比父节点小,右子节点永远比父节点大;删除元素时:分三种情况:①当前节点有两个子节点,②当前节点只有一个子节点,③当前节点没有子节点(也可以看作是只有一个空子节点的,就是一种特殊的第二种情况);代码方案1(...原创 2019-06-14 01:37:03 · 326 阅读 · 0 评论 -
图 —— 最短路径(二)Floyd算法
Floyd最短路算法(全局/多源最短路)求任意两个点之间的最短路径。这个问题这也被称为“多源最短路径”问题。Floyd算法是一个经典的动态规划算法。是解决任意两点间的最短路径(称为多源最短路径问题)的一种算法,可以正确处理有向图或负权的最短路径问题。算法思想从任意节点i到任意节点j的最短路径不外乎2种可能:直接从节点i到节点j,从节点i经过若干个节点k到节点j。所以,我们...原创 2019-06-23 15:43:08 · 659 阅读 · 0 评论