数据结构学习笔记
文章平均质量分 81
miss_fang999
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java哈夫曼编码与解码
代码过程:先用map计数文件字符频率,然后将字符与其频率存入一个节点,再将节点按频率顺序放入优先级队列,然后每次从队列取出2个构建一个树,再插入队列,反复进行直到队列中只有一个树为止,哈夫曼树就创建好了。然后用一个递归的方法将每个字符与其对应二进制码存入map集合中,反向对应关系也存一个map方便解码,之后就比较简单了。package TwoChildTree;import j原创 2017-11-04 21:36:17 · 753 阅读 · 0 评论 -
234树查找和插入
234树也是一种平衡树,与红黑树同构,后来由效率更高的红黑树取代,但编程容易。特点:非叶节点的子节点数比它含有的数据项多1;不允许节点只有一个子节点,可以有2,3,4个;新的数据总是插入在叶节点里,在树的最底层;插入的时候遇到满的节点就将其分裂。234树的查找效率为M*log4(N),M为每个节点数据项的平均数,以2计算,则为2*log4(N),与红黑树都是O(logN),但是存储效率以每个节点平...转载 2018-04-28 21:44:05 · 1250 阅读 · 0 评论 -
旅行商问题
旅行商问题:一个商人从城市A出发,访问BCDE等城市各一次最后回到A,问行程如何使得路程或费用最低。这是个NP(非多项式可解,但一般验证容易)问题,假设中间有4个城市,那么全排列为4!=24种,没有很好的算法,基本只能穷举了。class Vertex_4 { char label; public Vertex_4(char label) { this.label = la...转载 2018-05-18 20:43:36 · 597 阅读 · 0 评论 -
带权图最短路径
//Dijkstra算法求2点间最短路径,其实这里显示了从起点到所有其他点的最短距离//存储父节点和距离class DistPar { int distance; int parentVer; public DistPar(int parentVer, int distance) { this.distance = distance; this.par...转载 2018-05-17 17:27:31 · 2163 阅读 · 0 评论 -
有向无环图的拓扑排序
最小生成树只需要在dfs基础上稍做修改,用最少的边连接所有可连接的顶点(无重复)。拓扑排序只能用于无环图。class Stack { private int[] st; private final int size = 20; private int top; public Stack() { st = new int[size]; top = ...原创 2018-05-11 11:36:07 · 1287 阅读 · 0 评论 -
深度优先DFS与广度优先BFS
先简单记录基础逻辑。深度优先基于栈,广度优先基于队列。使用的都是邻接矩阵而非邻接表。输出没有显示路径层次。//深度优先DFSclass StackX { private int[] st; private final int size = 20; private int top; public StackX() { st = new int[size]; ...转载 2018-05-11 10:09:59 · 168 阅读 · 0 评论 -
带权图的最小生成树
//最小生成树定义:n个顶点,n-1条边连接,路径之和最小//算法思想:先取一个顶点,找可能路径最小的边,然后这2个顶点对剩余顶点的边中取最小的,以此进行下去,最后就是最小生成树//边class Edge { int start; int end; int distance; public Edge(int s, int e, int d) { start =...转载 2018-05-17 14:51:49 · 368 阅读 · 0 评论 -
java红黑树实现
红黑树是一种高效平衡二叉树,实现起来稍微复杂。import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Random;import java.util.Set;//假设键不重复public class RBTree<T...转载 2018-05-10 11:39:56 · 931 阅读 · 0 评论 -
java二叉树之堆
堆是一种完全二叉树,即处最后一层外都是满的,最后一层也是从左往右排列的。堆一般用于优先级存储结构,插入和删除根节点比较方便,但是查找、顺序遍历和删除其他关键字节点就不爽了。import java.util.Random;class Item { int data; public Item(int data) { this.data = data; }}public ...转载 2018-05-02 23:10:41 · 507 阅读 · 0 评论 -
哈希表之链地址法
链地址法比开放地址法要好。哈希化的效率:1,线性探测:成功查找P=(1+1/(1-L))/2;不成功查找为P=(1+1/(1-L)^2)/2;其中P为探测序列,L为装填因子2,二次探测和再哈希法:成功查找P=-log2(1-L)/L;不成功查找P=1/(1-L)3,链地址法:成功查找和插入P=1+L/2;不成功查找P=1+L比如装填因子L=1/2时,线性探测成功查找和不成功查找平均需要1.5次和2...转载 2018-05-02 18:42:27 · 2417 阅读 · 0 评论 -
哈希表之开放地址法
哈希表中解决一个单元多个数据项的冲突问题,有2种办法:开放地址法和链地址法。开放地址法是在数据项具有相同下标时在数组中其他地方寻找一个空白单元放置要插入的数据项;链地址法是数组存储的是链表,相同下标的数据项只需要连到链表上去即可。哈希表的容量一般设置为素数,因为无论按照何种步长,总可以遍历素数。其中,开放地址法有3种方法:1,线性探测:线性探测是逐步搜索空的位置。缺点:数据项聚集,越来越大,越后面...转载 2018-05-02 15:52:21 · 4266 阅读 · 0 评论 -
2-3树的java实现
2-3树是比较早期的一个平衡树,跟2-3-4树差不多,编程起来稍微麻烦点,也是被红黑树取代了。B树其实跟2-3树很像,只是子节点和数据项可能比较多,叶节点满时将其2分成2个节点,操作类似2-3树。B树可以应用在外部存储(例如磁盘)上。//2-3树,每个节点最多2个数据项,3个子节点//跟2-3-4树的差别:插入时如果需要分裂节点,则要将数据插入参与分裂过程//而2-3-4树是分裂完后再插入clas...原创 2018-05-01 18:26:11 · 3252 阅读 · 0 评论 -
java排序之【基数排序】
使用低位到高位的顺序,基数为10,使用单向链表接收每一次排后的值,再倒回数组,来回n次(n为最大数值位数)后即排好。写的程序貌似运行很慢,自己也不满意,请大家指点一下~感觉不如直接用数组倒腾,书上说用10个链表实现,但是不懂怎么做以及为什么要这样做,如何提高效率呢?package LianXi;import java.util.Arrays;import java.原创 2017-11-02 14:41:32 · 263 阅读 · 0 评论 -
Java排序之【快速排序】
依照书上写了3段代码,分别是以右端数据、首中尾取中值、先找出中间值作为枢纽,使用一百万随机数测试后发现,原始的快排最快,先找中间值的反而最慢。代码如下1:原始的package LianXi;import java.util.Arrays;import java.util.Random;//快速排序:先以数组末端作为标准,大于它的左端元素和小于它的右端元素作为一对进行原创 2017-11-02 15:14:43 · 279 阅读 · 0 评论 -
二叉搜索树的遍历
二叉搜索树遍历分为前序、中序和后序3种,中序遍历可按照大小等顺序输出,前序和后序用于表达式的输出比较好,分别生成前缀表达式和后缀表达式。以下是简单代码:中序:void display(Node node){if(node==null)return;display(node.left);system.out.print(node.data+" ");dis原创 2017-11-03 19:26:16 · 1142 阅读 · 0 评论 -
二叉树删除节点
二叉树删除节点比较麻烦,一般可能会设置一个isdeleted标记删除的节点而不真的删除节点,删除情况有以下几种:1,删除的节点是根节点2,删除的节点无子节点3,删除的节点只有一个子节点4,删除的节点有2个子节点。这里面又要判断删除的节点的右子节点有无左子节点,如无,将右子节点替换删除的节点即可;如有,找到最左子节点,去替换要删除的节点,还要注意最左子节点可能也有右子节点,这个节点也原创 2017-11-04 12:53:02 · 891 阅读 · 0 评论 -
排序算法复习
先上个网络图 分类如下 先从基本的开始:// 选择排序 void selectSort(int[] arr) { int len = arr.length; int min; for (int i = 0; i < len - 1; i++) { min = i; for (int j = i + 1; j < len; j++) { ...原创 2018-09-04 21:52:52 · 167 阅读 · 0 评论
分享