
数据结构
spcoder
努力成为一名合格的程序猿
展开
-
B-树完整项目代码 Java版实现
B-树完整项目代码 Java版实现B-树结点定义public class BTreeNode { public int keyNum; // 结点中关键字的个数 public int[] data; // 存储关键字的数组 public BTreeNode parent; // 双亲结点 public BTreeNode[] childNodes; //指向孩子结点 s...原创 2019-10-14 19:49:15 · 836 阅读 · 0 评论 -
Java 代码 实现B-树
Java代码实现B-树B-树的定义在前面已经介绍过了,在这里就跳过这一部分,直接看代码的实现!在学习B-树的过程中,基本的理论都已经了解了!用人的大脑来插入,寻找,删除是很简单的,一目了然,但是真正实现起来却一点也不简单!为了实现这个数据结构,我百度搜索了一下,但是大多数都是介绍理论,很少有人真正用Java代码实现的,在这里我按照自己的思路实现了一下,大家觉得有神问题的,欢迎留言评论!!B...原创 2019-10-14 19:36:01 · 833 阅读 · 0 评论 -
含有n个关键码的m阶B-树最坏情况下深度是多少
B-树的定义:一颗m阶的B树,或者为空,或者是满足下列特性的m叉树:若根节点不为空,那么根结点最少有两棵子树;树中每个结点最多含有m棵子树;所有非叶子结点至少含有m/2取上整棵子树;每个非叶子结点含有如下信息:n,A0,K1,A1…Kn,An,其中Ki<=Ki+1n为结点的关键字个数,且有关键字个数=子树个数-1.K1的值大于A0所指向的结点的所有值,小于A1所指向的结点的所有...原创 2019-10-10 21:51:24 · 2895 阅读 · 0 评论 -
Java 代码实现平衡二叉树(插入、删除、查找、遍历操作)
Java 代码实现平衡二叉树最近一直在看数据结构的相关内容,对于平衡二叉树这一节,理论看起很简单,无非是判断结点的平衡因子是否绝对值小于2。在插入或者删除之后进行相应的旋转调整。我已开始试着按照书上所讲的内容进行编程,但是书上的代码皆是伪代码,只是告诉你一个思路,按照书上是实现不出来的,所以我决定在已有理论的情况下,试着按照自己的想法编程。因为在前面的博客中,我已经介绍过了一般的二叉树的插入...原创 2019-10-10 21:16:18 · 978 阅读 · 1 评论 -
Java 代码实现并查集
Java 代码实现并查集并查集表示:用树的形式表示,采用双亲表示法。根结点的双亲节点设置为-1.那么整个集合就可以用一个数组表示,数组中的元素可以设置为数组的下标。1、并查集结点类/* * 并查集结点的实现 */public class UFSetNode { int parent; // 当前结点的双亲节点,初始化为-1 int number; // 以当前结点为根的子树的结...原创 2019-10-08 10:57:20 · 281 阅读 · 0 评论 -
回溯法 集合A的r组合
集合A的r组合问题问题说明:从集合中的所有元素中取出r个元素所组成的集合。例如A={2,4,7}, r=2,那么就有:{2,4}、{2,7}、{4,7}1、基本思路:将该问题看作是r行n列的棋盘布局问题。约束条件是:第i行的元素所在的列要大于前i-1行元素所在的列,即x[i]>x[k],k=1,2,…i-1。2、Java代码实现public class SetAofR { int...原创 2019-10-07 16:27:00 · 336 阅读 · 0 评论 -
回溯法 集合A的全排列
回溯法 集合A的全排列1、基本思路:将问题看作是n行n列的棋盘布局问题,这里的约束条件是:在任何时刻不能有两个元素位于同一行或者同一列。2、Java 代码实现public class FullPermutation { int n; int ct; int[] x; // 构造函数 public FullPermutation (int n) { this.n = n; ...原创 2019-10-07 16:19:22 · 340 阅读 · 0 评论 -
求解集合A的所有子集,使用回溯方法解决
假设集合A={a1,a2,…an}有n个元素。1、基本思路:求解的基本思路与前面介绍的皇后问题的思路基本相同。在这里只需将问题看作是n行2列的棋盘布局问题。第i行的第1列表示子集中包含元素ai,第2列表示不包含元素ai。在这里没有什么约束条件,只需要往前寻找合适的解,然后回溯一步,再向前进找下一个解,直到找到所有的解。2、Java代码实现public class Subset { int...原创 2019-10-07 16:09:15 · 780 阅读 · 0 评论 -
回溯法解决8皇后问题
1、皇后问题解决思路:使用回溯法解决,也就是通常所说的利用树的深度优先搜索求解。即沿着一条路径往下走,如果走不通,那就往回走,尝试另一条路径。皇后问题的求解过程中,每一个树结点都可以看做是棋局的局部布局或者是完整布局。根结点表示棋局的原始状态,没有任何棋子。之后的层与层之间表示一种状态转换,状态转换的过程就是构造树的过程,也就是树的深度优先搜索的过程。在状态转换的任何时刻,都需要满足约束条件:任...原创 2019-10-07 15:56:41 · 829 阅读 · 0 评论 -
哈夫曼树实现:统计文本信息,构造哈夫曼树,并对其进行编码与解码
哈夫曼树的大部分内容都在上一篇博客中讲解了,在这里重点说一下如何统计的文本数据。基本思想:首先从文件中读取数据,按行读取,保存在String类型的遍历中。在统计信息的时候,使用的数据结构是HashMap,字符作为key,个数作为value。为了能与我之前写的程序相结合,需要将HashMap的数据转换成Huffman结点类型数据。然后按照之前的程序就可以操作了!读取文本:在public S...原创 2019-10-06 22:24:45 · 3015 阅读 · 0 评论 -
简单实现哈夫曼树的建立、编码与解码
哈夫曼树建立、编码、解码1、哈夫曼树的建立Huffman树是根据元素的权重建立的,权重较小的离根结点较远,而权重较大的离根结点较近,从而使得整个Huffman树有着最小的带权路径长度。Huffman树的具体特性请参考《数据结构》一书或者是其他博客。首先给出Huffman树的结点类:public class HuffmanNode { int weight; char c; Huffm...原创 2019-10-06 22:03:59 · 6101 阅读 · 2 评论 -
找到数组中两个最小的元素
找到数组中两个最小的元素基本思路:设置两个min1、min2变量,分别存储第一个最小的数据,第二个的数据。先将其初始化为一个相当大的值,然后依次与数组中的每一个元素比较,只有当比min1大的时候才会去比较min2,如此比较下来便可以得到数组中两个最小的元素。如果初始化的时候只是设置为第一个元素的值,在特殊情况下,第一个元素就是当前数组中的最小值,那么得到的便是min1=min2=(数组的最小值...原创 2019-10-06 08:43:45 · 3116 阅读 · 0 评论 -
二叉树操作:增、删、查、(非递归)遍历
二叉树基本操作树结点public class MyTreeNode { public int data; public MyTreeNode left; public MyTreeNode right; // 构造函数 public MyTreeNode () { left = null; right = null; } public MyTreeNode (in...原创 2019-10-03 11:47:48 · 194 阅读 · 1 评论