
数据结构
文章平均质量分 64
高朵
โลมาไม่ใช่ปลา
展开
-
2-3树、红黑树
目录红黑树的发明人一、2-3树二、2-3树是如何维持绝对的平衡三、红黑树与2-3树的等价性四、红黑树的基本性质和复杂度分析《算法导论》 中的红黑树五、红黑树中添加元素六、左旋转七、颜色翻转八、右旋转九、先左旋,后右旋总结红黑树的发明人Rebort Sedgewick,普林斯顿大学的计算机科学教授。他还是Adobe Systems的一名主管,也曾作为访问学者在 XeroxPARC、IDA和INRIA工作。他在斯坦福大学获得博士学位。他的著作包括Algorithm in C、Algorithm inC原创 2021-12-22 17:37:06 · 769 阅读 · 2 评论 -
平衡二叉树和AVL
目录一、AVL二、平衡二叉树三、代码实现四、测试五、AVL的左旋转和右旋转(1)维护平衡的时机(2)插入的元素在不平衡节点的左侧的左侧右旋代码实现(3)插入的元素在不平衡节点的右侧的右侧左旋代码实现六、LR和RL1、**插入的元素不在平衡节点的左侧的右侧**2、**插入的元素在不平衡结点的左侧的右侧**代码实现七、AVL树的删除八、测试九、完整代码平衡二叉树和AVL树是在二分搜索树的基础上进行讲解回忆二分搜索树的问题:添加数据 :是按照顺序添加的 32145每个节点的左节点小于根节点,每个节点的右原创 2021-12-16 20:58:15 · 1668 阅读 · 2 评论 -
并查集Union Find
目录一、并查集解决什么问题?二、操作三、并查集的基本数据表示四、代码与合并操作五、真正的并查集实现六、数据表示七、测试并查集八、基于size的优化九、基于rank优化十、路径压缩十一、路径压缩的优化一、并查集解决什么问题?可以非常高效的解决网络中节点的连接问题,使用并查集,可以确定图中两个点是否有连接。二、操作(1)创建一个数组或集合 保存两个数(2)合并 union (p,q)(3)是否连接 isConnection(p,q)在使用并查集时,我们并不关心元素的内容,用数组保存元素,p和q原创 2021-12-07 21:08:34 · 993 阅读 · 2 评论 -
线段树和Trie2
目录1、概念2、时间复杂度3、Trie节点结构4、添加单词操作5、判断是否有指定的单词6、判断是否有以pre为前缀的单词7、查询某个单词的 . 可以为任意单词8、完整代码实现1、概念在计算机科学中,trie,又称前缀树或字典树。与二叉查找树不同,值不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。Trie 的典型应用是用于统计,它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较2、时间复杂原创 2021-11-30 20:43:53 · 510 阅读 · 2 评论 -
线段树和Tire
目录一、线段树能解决的问题二、构建线段树三、查询操作四、更新操作一、线段树能解决的问题RMQ(区间最值问题)区间求和二、构建线段树三、查询操作四、更新操作原创 2021-11-30 20:09:22 · 354 阅读 · 4 评论 -
二分搜索树(Binary Search Tree)2
目录1、删除二分搜索树的最大元素2、删除二分搜索树的最小元素1、删除二分搜索树的任意元素完整代码1、删除二分搜索树的最大元素(1)寻找二分搜索树的最大元素 //先找到最大节点 T maxNodeVal =findmaxnodeDG(); if (maxNodeVal==null){ System.out.println("isEmpty"); return ; }(2)返回以node为根的二分搜索树的最原创 2021-11-23 18:29:55 · 533 阅读 · 0 评论 -
二分搜索树(Binary Search Tree)
目录树结构一、为什么要有树结构二、二分搜索树的基础树结构一、为什么要有树结构树结构本身是一种天然的组织结构高效二、二分搜索树的基础原创 2021-11-22 16:31:46 · 2970 阅读 · 2 评论 -
数据结构-堆和优先队列2
目录优选队列概念代码优选队列概念普通队列:先进先出优先队列:出队顺序和入队顺序无关,和优先级有关。当访问元素时,优先级最高的会被删除。可以使用堆这种数据结构作为优先队列的底层结构。代码package heap;import com.company.project.Queue;import java.util.Arrays;import java.util.Random;//继承comparable 比较接口,实现queue队列(调用自己写的queue接口)public class M原创 2021-11-17 10:01:02 · 495 阅读 · 0 评论 -
数据结构-堆和优先队列
目录1、堆的概念2、满二叉树3、完全二叉树1、堆的概念(1)是一颗完全二叉树(2)父亲节点的优先级高于或低于左右孩子的优先级(值越大,优先级越高)2、满二叉树(1)除叶子节点之外,所有节点都有左右子树(2)叶子节点都在最后一层(3)每一层节点的个数:2^(l-1),l为层数(4)叶子节点的个数:2^(h-1),h代表树高度(5)非叶子节点的个数:2^(h-1)-1(6)节点个数:2^(h)-13、完全二叉树...原创 2021-11-16 20:47:13 · 641 阅读 · 0 评论 -
递归-迷宫问题
目录递归的概念递归调用机制递归的概念简单来说:递归就是方法自己调自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时让代码变得简洁。递归调用机制(1) 打印问题(2)阶乘问题...原创 2021-11-11 17:45:25 · 330 阅读 · 0 评论 -
递归-八皇后问题
目录八皇后问题介绍思路总结代码实现八皇后问题介绍八皇后问题,是回朔算法的典型案例,该问题是国际西洋棋棋手马克思.贝瑟尔于1848年提出的,在8x8格的国际象棋上摆放八个皇后,使其不能相互攻击:即: 任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法(92)思路总结(1)第一个皇后先放第一行第一列(2)第二个皇后放在第二行第一列,然后判断是否ok,如果不ok,继续放在第二列、第三列、依次把所有列都放完,找到一个合适的位置上(3)继续第三个皇后,还是第一列、第二列、直到第8个皇后原创 2021-11-11 15:57:56 · 236 阅读 · 0 评论 -
中缀表达式转后缀表达式
目录具体步骤代码实现具体步骤(1)初始化两个栈:运算符栈s1和存储中间结果的栈s2;(2)从左至右扫描中缀表达式;(3)遇到操作数时,将其压入s2;(4)遇到运算符时,比较其与s1栈顶运算符的优先级;1、如果s1为空,或栈顶运算符为左括号“(” ,则直接将此运算符入栈2、否则,若优先级比栈顶运算符高,也将运算符压入s13、否则,将s1栈顶的运算符弹出并压入到s2中,再转入4.1 与s1中新的栈顶运算符相比较(5)遇到括号时:1.如果是左括号“(” ,则直接压入s12.如果是右括号 “)原创 2021-10-29 11:38:41 · 204 阅读 · 0 评论 -
数据结构-栈(逆波兰计算器)
目录用栈实现综合计算器思路用栈实现综合计算器思路原创 2021-10-21 20:16:21 · 191 阅读 · 0 评论 -
数据结构-单向环形链表(Josephu)
目录1、单向环形链表思路2、代码实现1、单向环形链表思路约瑟夫问题构建:1、先创建一个节点,让first指向该节点,并形成环形2、后面当我们每创建一个新的节点,就把该节点,加入到已有的环形链表中即可遍历:1、先让辅助指针(变量)curBoy,指向first节点2、然后通过一个while循环遍历该环形链表即可 curBoy.next==first 结束比如:有五个人(n=5)从第一个人开始报数(k=1)数两下,数到二出圈(m=2)出圈顺序:2->4->1->5->原创 2021-09-23 18:06:32 · 181 阅读 · 0 评论 -
数据结构-栈
目录1、栈思路分析2、代码实现1、栈思路分析(1)、使用数组模拟栈(2)、定义一个top,初始化为-1;(3)、入栈的操作,当数据加入到栈中,top++;stack[top]=data;(4)、出栈的操作, int value=stack[top]; top–;return value;2、代码实现package database;import java.util.Scanner;public class ArrayStackDemo { public static void原创 2021-09-23 16:41:12 · 68 阅读 · 0 评论 -
数据结构-双向链表
双向链表单链表缺点:查找只能一个方向,而双向链表可以向前向后查找单链表删除只能靠辅助节点,双向链表可以靠自身删除思路分析:添加:temp.next=newHeroNode;newHeroNode.pre=temp;修改:找到需要修改的节点,按照no修改删除:package database;import data.D;public class DoubleLinkedListDemo { public static void main(String[] args) {原创 2021-09-17 11:08:05 · 92 阅读 · 0 评论 -
数据结构-单链表
目录前面学习的静态原创 2021-09-11 10:32:30 · 140 阅读 · 0 评论 -
数据结构-队列
目录一、栈原创 2021-09-04 11:48:51 · 137 阅读 · 0 评论 -
数据结构-数组
一、数据结构1、是一门基础学科2、研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据和修改数据3、数据结构可以分为三类:线性结构:数组、队列、栈、链表、哈希表…树形结构:二叉树、二分搜索树、AVL树、红黑树、堆、Trie、线段树、并查集…图结构:邻接矩阵、邻接表数据结构 + 算法 = 程序二、数组1.数组的概念:用来存储一组相同数据类型的数2、java中数组的定义 数据类型[] 数组名3.初始化 数据类型[] 数组名 =new int[6]原创 2021-08-04 21:09:52 · 338 阅读 · 0 评论