
java数据结构
我爱学习!嗯!
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java实现单链表(严蔚敏版数据结构)
1、结点类 结点类使用静态内部类实现,代码如下:private static class Node{ int data;//元素的值 Node next;//指向下一个结点的引用}2、单链表初始化 为了方便通常在第一个结点之前附设一个结点,称之头结点,头结点在单链表类的构造函数中初始化,代码如下:public class SinglyLinkedList { p...原创 2018-10-09 22:48:18 · 245 阅读 · 0 评论 -
红黑树
一、定义 树中每个结点包括五个属性:key,color,left,right和p。如果一个结点没有子结点或父结点,则其left,right 或 p 指向NIL结点。可以把NIL视为指向红黑树的叶结点。 红黑树是满足一下性质的二叉搜索树(二叉排序树): 1.每个结点是红色或黑色的。 2.根节点是黑色的。 3.每个叶结点(NIL)是黑色的。 4.红色结点的两个子结点都是黑色的。...原创 2019-04-29 22:25:34 · 212 阅读 · 1 评论 -
快速排序&归并排序
1、快速排序快速排序利用分治的思想,首先选取一个哨兵,将数组中大于哨兵的元素放到一边,小于数组的元素放到另一边,然后对两边也进行相同的操作。public void quickSort(List<Integer> t){ quickSort(t,0,t.size()-1);}private void quickSort(List<Integer> t,int l,i...原创 2019-05-02 20:12:54 · 308 阅读 · 0 评论 -
希尔排序&冒泡排序
1、希尔排序将数组中每间隔为d的元素划分为同一组,然后对每一组使用插入排序。d有多个值,但要求最后一个值为1,即最后一次要进行插入排序。例如数组:2 9 1 3 6 3,如果d为2,那么2、1、6为一组;9、3、3为一组;1、6为一组,3、3位一组,对每组都进行插入排序。//t为要排序的数组,l为存储d的数组,最后一个d必须为1public void shellSort(List<In...原创 2019-05-02 18:53:15 · 1159 阅读 · 0 评论 -
二叉平衡树
目录一、定义二、二叉平衡树调整三、二叉平衡树的插入四、二叉平衡树的删除一、定义平衡二叉树或则是空树,或者是具有如下特征的二叉排序树(1)左子树和右子树的深度之差的绝对值不超过1;(2)左子树和右子树也是平衡二叉树平衡二叉树的查找的时间复杂度是O(log n)。某结点的平衡因子:该结点左右子树深度之差。示例:二、二叉平衡树调整 ...原创 2019-04-13 16:58:51 · 565 阅读 · 0 评论 -
二叉排序树(二叉查找树)
一、定义二叉排序树或者是一颗空树,或者是具有以下性质的二叉树:(1)若它的左子树不为空,则其左子树上所有结点的值均小于它的根结点的值(2)若它的右子树不为空,则其右子树上所有结点的值均大于它的根结点的值(3)它的左、右子树均为二叉排序树由定义可以得出,中序遍历二叉树可以得到一个结点值递增的有序序列。一个简单的二叉排序树:这里使用二叉链表来作为存储结点,结点类的...原创 2019-04-07 10:35:28 · 2906 阅读 · 0 评论 -
二分查找
package search;import java.util.*;public class BinarySearch { //这种是在[l,h]闭合区间查找 public int bSearch1(int l,int h,List<Integer> t,int v){ while(l <= h){ int m = (l+h)/2; if(t.get...原创 2019-03-27 20:51:49 · 130 阅读 · 0 评论 -
二叉线索树
package trees;//线索二叉树public class BiThrTree { static final class ThrNode{ Integer data; ThrNode left; //左孩子 ThrNode right; //右孩子 int LTag; //标记 1表示左孩子为前驱 int RTag; //标记 1表示右孩子为后继 ThrNo...原创 2019-04-05 10:10:04 · 237 阅读 · 0 评论 -
哈夫曼树及哈夫曼编码
一、基本概念1、路径:从树的一个结点到另一个结点之间的分支构成这两个结点之间的路径2、路径长度:路径上的分支的数目3、树的路径长度:从树根到每一个结点的路径长度之和4、结点的带权路径长度:从该结点到树根之间的路径长度与结点上权值的乘积5、树的带权路径长度:树中所有叶子结点的带权路径长度之和,通常记作WPL哈夫曼树:假如一颗二叉树有n个叶子结点,且n个叶子结点都有对应的权...原创 2019-04-05 10:08:34 · 636 阅读 · 0 评论 -
二叉树的创建和遍历
一、结点类的定义这里只是进行了简单的定义,结点类包括结点数据域和左右孩子引用,结点类是静态内部类。static final class Node{ Integer data = null; Node right;//左子树 Node left;//右子树 Node(Integer data){ this.data = data; } Node(){ ...原创 2019-03-26 21:36:44 · 148 阅读 · 0 评论 -
只求自己能看懂的KMP算法
KMP算法:假设i是指向主串的指针,KMP算法利用已经得到的“部分匹配”的结果将模式串向右“滑动”尽可能远的一段距离后,进行比较,而不需要回溯指针i。一个简单的例子,反映了KMP算法的匹配过程: 假设主串为S=s1s2...sn,模式串为T=t1t2...tm(在S中寻找与T匹配的字符串)。 那么需要解决的问题就是:当匹配过程中产生失配时(si不等于tj),...原创 2019-03-18 19:34:49 · 347 阅读 · 0 评论 -
LinkedList部分源码分析(双链表)
LinkedList就是双链表的数据结构,所以主要复习下双链表的插入、删除和查找1、结点类结点类是LinkedList类的静态内部类,包括指向上一个结点的prev引用、指向下一个结点的next引用和数据域item。构造函数也是初始化这三个参数。 private static class Node<E>{ E item; Node<E> prev; ...原创 2018-10-16 11:42:44 · 166 阅读 · 0 评论 -
堆排序&优先队列
1、堆(二叉)堆是一个数组,它可以被近似看成是一颗完全二叉树。树上的每一个结点都对应数组的一个元素。除了最底层,该树是完全充满的,该树在数组中是从左向右填充的。表示堆的数组A通常包括两个属性:数组长度A.length和堆的元素个数A.heapSize。给定一个结点的下标i,可以知道它的父结点、左孩子和右孩子的下标分别为i/2、2i和2i+1。...原创 2019-05-08 20:04:02 · 271 阅读 · 0 评论