
数据结构
Shawn Jeon
Contact e-mail: shawnjeon@163.com
展开
-
Java-List& Set& Map
List& Set& MapArrayList / LinkedList / Vector特点及比较ArrayList特点:LinkedList特点:Vector特点:MapHashMap / LinkedHashMap / TreeMap / Hashtable / Properties特点及比较HashMap特点:LinkedHashMap特点:TreeMap特点:Hashtable特点:Properties特点:HashSet / LinkedHashSet / TreeSet特点及比原创 2020-11-23 21:02:44 · 167 阅读 · 1 评论 -
数据结构-图
Graph概述2种表示方式两种访问策略由于线性表和树结构都局限于一个直接前驱和一个直接后继的关系, 无法表示多对多的关系. 此时通过图来实现概述图是一种数据结构, 其中节点可以有零个或多个相邻节点. 节点与节点之间的的连接称为边. 节点也可以称为顶点图的常用概念:顶点(Vertex)边(Edge)路径: 比如从 D->C的路径有2个(1) D->B->C(2) D->A->B-C无向图: 顶点之间的连接没有方向, 比如 A-B, 既可原创 2020-11-06 20:59:33 · 266 阅读 · 0 评论 -
数据结构-B树(六)
23 tree, 234 tree, B tree, B+tree, B*tree概述23树& 234树(23 tree& 234 tree)B+树(B+tree)B*树(B*tree)二叉树的问题是当数据量多时, 容易产生海量节点, 会直接引起树的高度变大, 导致整体性能下降. 此种情况的解决方案就是多路查找树, 简称多叉树概述B树(B tree, Balanced tree), 属于多叉树(节点的路径可能不止两个), 它通过重新组织节点, 降低树的高度, 且减少 I/O次数来原创 2020-11-05 20:42:37 · 449 阅读 · 0 评论 -
数据结构-平衡二叉树(五)
AVL Binary Tree概述实例代码当创建二叉树时添加的首个节点相对小于整个数列时, 会引起整个二叉树的左右节点不平衡, 严重影响查询速度. 此种情况的解决方案就是平衡二叉树概述平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree), 又被称为 AVL树, 可以保证查询效率较高平衡二叉树的常见实现有红黑树, AVL, 替罪羊树, Treap, 伸展树等* 特点: 一棵的左右两个子树的高度差的绝对值不超过1, 并且左右两个子树都是一棵平衡原创 2020-11-04 20:33:00 · 301 阅读 · 0 评论 -
数据结构-二叉排序树(四)
Binary Sort Tree概述概述二叉排序树(BST, Binary Sort Tree), 任何一个非叶子节点相比左子节点大, 相比右子节点小.* 如果值相同, 即可以放左或右子节点## 实例代码public class BinarySortTreeApp { public static void main(String[] args) { int[] arr = {7, 3, 10, 12, 5, 1, 9, 11, 13}; BinaryS原创 2020-11-03 20:16:07 · 142 阅读 · 0 评论 -
算法-赫夫曼编码
Huffman Coding简介3种编码原理代码实现简介赫夫曼编码是可变字长编码(VLC)的一种, 常用于数据文件压缩. 其压缩通常在20%~90%之间3种编码原理在通信领域中信息的处理方式定长编码:变长编码:* 变长编码的缺点是编码格式重叠无法避免, 即不能匹配重复的编码3) 赫夫曼编码:代码实现字符串解压缩public class HuffmanCodeApp { public static void main(String[] args)原创 2020-11-02 19:47:14 · 1357 阅读 · 1 评论 -
数据结构-赫夫曼树(三)
Huffman Tree|哈夫曼树|霍夫曼树概念概念路径和路径长度:路径: 从一个节点往下可以达到的子节点或子子节点之间的通路路径长度: 通路中分支的数目称之为路径长度. 根节点到指定节点的路径长度为 L层-1节点的权及带权路径长度:节点的权: 为每个节点定义字段赋予有着某种含义的数值带权路径长度: 从根节点到该节点之间的路径长度和该节点的权的乘积WPL(Weighted path length): 所有叶子节点的带权路径长度之和WPL = 132 + 72 + 82原创 2020-11-01 20:27:01 · 588 阅读 · 2 评论 -
数据结构-顺序存储二叉树& 线索化二叉树(二)
Binary Tree顺序存储二叉树线索化二叉树(Threaded Binary Tree)顺序存储二叉树节点编号规则:顺序存储二叉树通常只会考虑完全二叉树第 n个元素的左子节点为2*n+1第 n个元素的右子节点为2*n+2第 n个元素的父节点为(n-1)/2* n表示二叉树的第几个元素(起始编号从0开始)通过以上规则, 可以将树和数组互相转换的public class ArrayToBinaryTreeApp { public static void main(St原创 2020-10-31 21:09:53 · 207 阅读 · 0 评论 -
数据结构-二叉树(一)
Binary Tree树(Tree)二叉树(Binary Tree)三种遍历查找节点删除节点树(Tree)树与数组& 链表对比数组存储优点: 通过下标访问元素, 速度快缺点: 检索具体元素值, 或数组底部或元素与元素之间插入新元素或删除元素, 效率都很低链式存储优点: 插入和删除效率较好缺点: 检索效率很低树存储增删改查4样性能都比较好二叉树(Binary Tree)每个节点最多只能有两个子节点, 一个左节点一个右节点如果二叉树的所有叶子节原创 2020-10-30 19:55:56 · 132 阅读 · 0 评论 -
数据结构-哈希表
Hash table哈希表(Hash table)哈希表(Hash table)又称散列表, 它是键值对数据结构, 也就是 key& value的映射集, 其中键是通过散列计算后, 将映射到表中某一个位置, 以此加快查找的速度. 此映射函数叫做散列函数, 存放值的数组叫做散列表public class HashtableApp { public static void main(String[] args) { HashTab hashTab = new Hash原创 2020-10-29 20:22:34 · 212 阅读 · 2 评论 -
递归-迷宫问题和八皇后问题
Recursion: Maze Puzzle& EightQueens Puzzle递归的基本规则迷宫问题八皇后问题递归的基本规则递归中的方法的局部变量都是独立的如果方法的形参是引用类型, 由于传递的是指针递归方法之间是共享的递归必须向退出的条件逼近, 否则就是无限递归迷宫问题map[i][j]: 0表示未走过, 可以尝试; 1表示墙; 2表示该路, 可以走通; 3表示该路, 已走过, 但走不通当 map[6][5] == 2, 则已到达目的地(最右下角), 结束递归pub原创 2020-10-14 21:09:39 · 1751 阅读 · 5 评论 -
前缀表达式(波兰表达式)& 中缀表达式& 后缀表达式(逆波兰表达式)& 中缀表达式转换后缀表达式
Polish expression& Infix expression& Reverse Polish expression& Infix expression invert to Reverse Polish expression前缀表达式(Polish expression, 波兰表达式)中缀表达式(Infix expression)后缀表达式(Reverse Polish expression, 逆波兰表达式)中缀表达式(Infix expression): 实现简单计算器后缀原创 2020-10-13 20:41:05 · 570 阅读 · 0 评论 -
数据结构-栈(通过数组和单向链表实现)
Array Stack& Single Linked List Stack概述应用场景通过数组实现通过单向链表实现概述栈是一个先入后出(FILO, First In Last Out)的有序列表栈的出/入操作限制只能在线性表的同一个端进行应用场景子程序的调用: 在跳往子程序前, 会先将下一个指令的地址存到栈中, 直到子程序执行完后再将地址取出, 回到原来的位置 如浏览器的后退/向前, JVM的虚拟机栈表达式的转换(如 中缀表达式转后缀表达式)与求值二叉树的遍历图形的深度优先(d原创 2020-10-12 20:30:12 · 288 阅读 · 2 评论 -
数据结构-单链表& 双向链表
Single Linked List& Double Linked List概述单链表(Single Linked List)双向链表(Double Linked List)概述链表是有序列表以节点方式链式存储, 也就是节点之间不一定是连续的地址每个节点包含数据域和指向下一个节点的地址/引用链表分带头节点的链表和不带头节点的链表单链表(Single Linked List)/** 定义链表节点类*/class DataNode { /** 节点编号*/ publ原创 2020-10-10 20:59:03 · 192 阅读 · 0 评论 -
数据结构-稀疏数组& 环形队列
SparseArray& CircularQueue数据结构稀疏数组(Sparse Array)环形队列(CircularQueue)数据结构数据结构分为2种, 线性结构和非线性结构线性结构(1) 数据元素之间是一对一的线性关系. 常见有数组, 队列, 链表和栈等(2) 存储结构有两种:顺序存储结构: 顺序存储的线性表称为顺序表, 顺序表中的存储元素是连续的链式存储结构: 链式存储的线性表称为链表, 链表中的存储元素不一定是连续的(元素节点中存放的数据包括:元素和相邻元素原创 2020-10-09 20:55:59 · 259 阅读 · 0 评论 -
数据结构-单向环形链表解决 Josephu问题
Circular Single Linked ListJosephu(约瑟夫, 约瑟夫环)是一个数学应用问题解决思路代码示例Josephu(约瑟夫, 约瑟夫环)是一个数学应用问题n个人按编号1, 2, …n围坐一圈, 从编号为 k的人开始报数, 数到 m的那个人出列, 此时它的下一个人又从1开始报数, 数到 m的那个人再出列, 依次反复, 直到所有的人全部出列为止, 最后输出出列人的编号顺序解决思路首先创建有 n个节点的不带头的单向环形链表, 然后从 k节点开始计数, 计到 m时, 删除对应原创 2020-10-11 15:40:59 · 230 阅读 · 0 评论