
数据结构
文章平均质量分 61
TanGBx
这个作者很懒,什么都没留下…
展开
-
赫夫曼树Java实现(多图预警)
Huffman Tree赫夫曼树又称为最优二叉树,是一类带权路径长度最短的树。基本概念首先我们得了解路径和路径长度的概念,书上对他们的定义是这样的。从树中一个节点到另外一个节点之间的分支构成这两个节点之间的路径。路径上的分支数目称为路径长度。也就是说,一个节点如何到另一个节点,通过哪几个线段,那些线段叫做路径。而路径长度就是你从这个节点到两一个节点经过几条路,这就是路径长度。赫夫曼树那么问题来了,什么是我们说的最优二叉树,即赫夫曼树呢?所谓的赫夫曼树,也就是从根节点出发,到所有叶子节原创 2021-08-30 17:16:24 · 155 阅读 · 0 评论 -
二叉树与森林的转变Java
森林什么是森林呢?按照我们对森林的理解,就是由很多的树组成的地方叫做森林。所以二叉树们在存储过程当中如何变成森林呢?这里我们就需要了解一个前提,也就是说我们可以把二叉树进行改变,让他的左孩子代表孩子节点,而当前节点的右孩子为当前节点的兄弟节点。也就是如图所示:第一棵树他是12345,第二棵树他是8,9,10,11.我们看每一棵树,他是不是从原来的存储结构,即左孩子右孩子的情况,转变为左边是孩子节点,右边为兄弟节点的样子。再把两棵树一结合,谁为根节点看你到时候合并的时候选择哪个根则就是哪个,在这边原创 2021-08-29 20:22:26 · 294 阅读 · 0 评论 -
数据结构之左式堆java实现
优先队列之左式堆什么叫做左式堆呢?他就是跟二叉堆一样具有结构性和有序性,也就是说它是基于二叉堆的一个提升,他们的唯一区别就是左式堆是非常不平衡的。左式堆是一个有效支持合并操作的数据结构。关于二叉堆可以看我之前写的博文二叉堆的实现左式堆的性质首先我们要知道,左式堆有一个npl值null path length,也就是任意节点到一个没有两个孩子节点的最短路径。而他的性质则是 对于任意一个节点左子树的npl值至少等于右子树的npl值。也就是说左孩子的npl大于等于右孩子的npl值。节点具有一个孩子节点原创 2021-06-20 13:48:32 · 146 阅读 · 0 评论 -
数据结构之优先队列的二叉堆 Java实现
优先队列之二叉堆什么是优先队列呢?优先队列顾名思义它是一种队列,但是是优先的那种,那么他优先在哪了?他像我们普通的queue一样一个地方输入,在另一端输出,但是他的输出却是输出最小的。也就是说,优先队列的工作原理是删除并返回优先队列中最小的元素。如图二叉堆什么是二叉堆呢?首先我们需要知道优先队列他又称之为堆,二叉堆也就是像一个被完全填满的二叉树,也就是我们所说的完全二叉树。二叉堆他并不是二叉查找树,但是又类似于二叉查找树,他要求子节点的值得大于父节点的值,也就是说对于每一个节点都成立。而他们的兄原创 2021-06-19 11:19:34 · 190 阅读 · 0 评论 -
数据结构之单链表 java实现
抽象数据类型首先我们需要知道的是抽象数据类型(abstract data type)简称ADT是带有一组操作的一些对象的集合。抽象数据类型是数学的抽象;诸如表、集合、图以及与它们各自的操作一起形成的对象都可以看作是ADT。表ADT我们把大小为0的表称为空表。List ADT有两种流行的实现方式,一种是单链表使用ArrayList实现,另一种是双链表LinkedList。单链表基于ArrayList类实现ArrayList类提供了List ADT的一种可增长数组的实现。使用ArayList的优点在原创 2021-05-30 13:52:44 · 200 阅读 · 1 评论 -
数据结构之双链表 java实现
基于LinkedList的双链表实现使用LinkedList的优点在于新项的插入和现有项的删除都是常熟时间的操作。但缺点是他不容易做索引,因此对get的调用是非常昂贵的,所以我们得想方设法尽量减少开销。存储节点Node我们首先要根据双链表的特性设置相应的节点,该节点具有头节点跟尾节点还有相应的数据存放。 private static class Node<AnyType>{ public AnyType data;原创 2021-05-30 17:03:54 · 131 阅读 · 0 评论 -
数据结构之栈java实现
STACK ADT栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,栈的顶。对栈的基本操作有进战和出栈。栈有一个特性是先进后出。由于栈是表的一种方式,所以任意实现表的方法都可以实现栈。栈的链表实现使用单链表,在表的顶端进行插入删除。public class MyStack<AnyType> { Node<AnyType> Bottom,beBottom; int length; public MyStack(){ doC原创 2021-06-03 20:44:22 · 128 阅读 · 0 评论 -
数据结构之队列java实现
Queue ADT首先我们需要了解队列是一种在一端插入另一端删除的结构。他的基本操作是进队enqueue和出队dequeue,而且我们得知道它是一种先进先出的模型。他也是一种表,是一种特殊的表,所以表的实现方式对他都是有用的。单链表实现public class MyQueue<AnyType> { int theSize; Node<AnyType> Bottom; //bottom是底部的一个空节点,永远的底部,相当于一个平台 p原创 2021-06-04 10:16:55 · 83 阅读 · 0 评论 -
数据结构之二叉查找树java实现
二叉查找树 Binary Search Tree首先我们都知道树是一个基本的数据结构,他的组成有根节点以及孩子节点。树的大部分操作时间复杂度为O(log n)。二叉树 Binary Tree二叉树是树的一种特殊情况,他是只有左右两个孩子节点以及一个父亲节点的。如图所示当然他也可以只有一个孩子节点。但是每个节点上的孩子节点最多也只有两个。所以我们称它为二叉树。二叉查找树也就是我们这篇文章所实现的,它是一种特殊的二叉树,使二叉树变成二叉查找树的性质是:对于每一个节点x,他的左子树的所有项的值都小于x原创 2021-06-05 11:15:33 · 168 阅读 · 0 评论 -
数据结构之AVL二叉查找树java实现
AVL Binary Search Tree二叉查询树可看二叉查找树实现Avl树是带有平衡条件的二叉查找树,他需要保证树的深度是log N,平衡条件是要求每个节点都必须有高度相同的左子树和右子树,且每个节点的左右子树高度最多差1.!!如图所示,左边这棵二叉查找树就是一颗AVL树,我们看他的节点,从根节点开始,他的左子树深度为3,右子树深度为2,深度相差为1满足平衡条件。再看2那个节点,左子树为1深度为1,右子树为4深度为2,深度相差1满足平衡条件。看4那个节点,他只有一个左子树右子树没有,所以深度原创 2021-06-06 20:11:04 · 149 阅读 · 0 评论 -
数据结构之哈希表的分离链接法java实现
哈希表的分离链接法原理Hash Table可以看作是一种特殊的数组。他的原理基本上跟数组相同,给他一个数据,经过自己设置的哈希函数变换得到一个位置,并在这个位置当中放置该数据。哦对了,他还有个名字叫散列01数据1数据2就像这个数组,0号位置放着数据1,1号位置放数据2而我们的哈希表则是通过一个函数f(x) 把数据1变成0,把数据2变成1,然后在得到位置插入数据1和数据2。非常重要的是哈希表的长度为素数最好!!而且当插入数据大于一半的时候我们要进行扩充!!!冲突问题产原创 2021-06-14 17:03:14 · 1411 阅读 · 0 评论