![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
氵何章怀晓 。
阿尔卡拉大学企业管理硕士
北亚利桑那大学计算机信息技术硕士
展开
-
哈夫曼树
哈夫曼树(赫夫曼树/霍夫曼树)是最优二叉树,树的带权路径最短,即WPL(weighted path leanght),说哈夫曼树之前先说几个概念:1.路径:一个节点到达孩子节点和孙子节点的路径举例:三层L的树(算上根节点),从根节点到L层节点的路径为L-1=2 2.路径长度:权:节点的值节点的带权路径:根节点到该节点的路径*值举例:三层树,叶子结点的值为10,那么这个节点的带权路径...原创 2020-03-29 09:31:09 · 213 阅读 · 0 评论 -
线索化二叉树的中序遍历
代码实现:package tree.threadedBinaryTree;public class ThreadedBinaryTree { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 4, 6, 7}; HreoNode root = new HreoNod...原创 2020-03-24 18:16:17 · 257 阅读 · 0 评论 -
线索化二叉树
线索化就是在节点上新增加前驱和后继。(左右指针都用上了,就不能有 前驱和后继了)注意:线索化二叉树后,Node节点的 left 和 right 有如下情况:1.left指向的是左子树 也有可能指向前驱节点2.right指向的是右子树 也有可能指向的后继节点来个图:代码实现:package tree.threadedBinaryTree;public class Thr...原创 2020-03-24 16:28:40 · 168 阅读 · 0 评论 -
堆排序的前提 顺序存储二叉树
顺序存储二叉树的特点(通常只考虑完全二叉树):1.第n个元素(下标为n的元素)的左子节点为 2n+1 此公式对应数组下标 - 举例: 假设n是二叉树里元素的值-1(因为数组的下标从0开始),对应数组里的下标 - 假设二叉树数据为6(下标为5),公式为 2*5-1=9 9是数组的下标,9是6(即n+1)的左子节点。2.第n个元素的右子节点为 2n+2 同上...原创 2020-03-24 11:57:29 · 251 阅读 · 0 评论 -
数据结构之二叉树的删除
二叉树的删除,要完成的操作(要求):删除的是叶子结点,那就删除叶子结点如果删除的是非叶子节点,将该节点置空思路:注意:如果是空树 root==null, 或者只有一个root节点,等价于把二叉树置空1.二叉树是单向的,判断当前节点的子节点是不是要被删除,而不是判断要删除的节点。(类似于单链表的删除,要找到被删除的前一个)2.如果当前节点(根节点)的左子节点不为空,并且左子节点就是要...原创 2020-03-23 17:19:31 · 1377 阅读 · 0 评论 -
数据结构之二叉树的查找
二叉树的查找方式有三种,分别是先序中序和后序。先序思路:判断当前的节点中的No和传过来要查找的是否一致相等返回不相等判断当前节点左子节点是否为空 如果不为空 继续比较 查找返回如果 为空 或者没有找到 查看右子节点 查到返回否则返回null中序思路:判断当前的左子节点是否为空,不为空递归查询左子节点 查到返回左子节点为空或者左边没有查到,查询当前节点 查到返回根节...原创 2020-03-23 16:12:44 · 331 阅读 · 0 评论 -
数据结构之二叉树的简单实现
二叉树是一种数据结构,特点为左小右大最大不过两个叉。二叉树分为满二叉树和完全二叉树和平衡二叉树1.满二叉树 所有的叶子结点都在最后一层 节点总数 2^n-1 n为层数2.完全二叉树 所有的叶子结点在 最后一层或倒数第二层 且最底层叶结点均处于次底层叶结点的左侧3.平衡二叉树它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树...原创 2020-03-23 10:38:02 · 203 阅读 · 0 评论 -
约瑟夫问题
描述:n个人围成一圈,从K个人开始,一次数m个数,出队列的顺序。思路: 闭合的单链表,类似于许多小孩围个圈,依次报数, 每次报数完毕后,出圈,下一轮依旧如此,一直到最后一个人为止。构建一个环形单链表 1.先创建一个节点,让first指向该节点,形成环形,一个元素的话自己指向自己 2.后面每增加一个,加到末尾,然后让该节点的next指向first(首节点)。遍历环形链表思路(和单链...原创 2020-02-25 17:55:49 · 189 阅读 · 0 评论 -
返回链表的倒数第N个数据
public static Node getIndexNode(Node head;int index){//判空 if(head.next==null){ return null; }//获得该头结点指向的链表的长度,遍历获得size if(index<=0||index>size){ return null; ...原创 2020-02-23 12:01:27 · 264 阅读 · 0 评论 -
反向遍历链表
反向遍历链表,不改变链表结构。利用栈的先进后出。public static void reversePrint(HreoNode node){ if(node.next==null){ return; } //创建栈 Stack<HreoNode> stack = new Stack<HreoNode>(); /...原创 2020-02-23 11:59:18 · 812 阅读 · 0 评论 -
单链表的反转
思路:1.定义一个节点2.遍历链表,每遍历一次,把节点拆下,放到新节点的最前端,车轮滚滚。3.遍历完毕,把原来的头结点指向现在反转后的新链表。代码: public static void reverseList(HreoNode head){//链表为空或者链表只有一个元素 if(head.next==null|| head.next.next==null){ ...原创 2020-02-23 11:12:53 · 115 阅读 · 0 评论 -
mysql索引
索引是帮助sql高效获取数据的排好序的数据结构索引分为主键索引和非主键索引(普通,唯一,文本搜索),也可分为单独所引和组合索引,也可分为聚簇索引和非聚簇索引。我们建立索引的前提是 经常查询的字段 外间关系的字段不建议建立索引的情况 表字段太少 频繁增删改的表 某个字段重复值太多 一般用于状态 单独所引:mysql的索引底层为B+TREE,为什么这么多的数据类型,采用这种...原创 2020-02-14 18:42:12 · 90 阅读 · 0 评论 -
稀疏数组
稀疏数组用于压缩保存二维数组,稀疏嘛,就是在之前的基础之上,给他压缩一下子,节省空间,在传输的时候还能提高速度,是一种比较理想的数组保存方式。场景:用于大量相同的数据中几个不用的数据的保存,啥意思呢?假如这个数组中有10000个数据,但是有9000是相同的,那么就可以用稀疏数组的形式来存储。处理方法:稀疏数组的第一行记录源数组的行列数和有效数据的总和。假如我之前的二维数组,10行10列中有...原创 2020-02-12 19:15:38 · 148 阅读 · 0 评论 -
单链表
链表是数据结构里的基础,数据结构是保存数据的方式,比如一篮子鸡蛋,我可以放在瓶子里,也可以放在箱子里,不同的载体就是不同的数据结构。链表和数组都是线性结构,不同的是数组是连续的空间,链表是碎片的,所以链表主要由两大部分组成,数据域和指针域,数据域就是存放数据,指针域就是指向下一个内存空间的位置,像链条一样,把数据串起来。这个链表的优缺点大家应该都知道,增删快,查询慢,增删修改节点的指针域即可完...原创 2020-02-12 18:51:21 · 112 阅读 · 0 评论 -
数据结构的分类
1.线性和非线性1.线性:只有一个开始点和终结点。【冰糖葫芦,一字排队】第一个元素,最后一个元素中间的元素有直接前驱和直接后继2.非线性:一个节点元素可以对应多个前驱和后继树【族谱】,网【地铁线路图】2.结构划分:集合结构、线性结构、树状结构、网状结构集合结构:确定性:元素必须确定唯一性:集合中的元素互不相同无序性:元素无先后之分他们的关系只有【属于同一个集合】。线性结构...原创 2019-06-08 13:08:37 · 576 阅读 · 0 评论