随笔分类 -  算法和数据结构

图的存储,搜索,遍历,广度优先算法和深度优先算法,最小生成树-Java实现
摘要:1)用邻接矩阵方式进行图的存储。如果一个图有n个节点,则可以用n*n的二维数组来存储图中的各个节点关系。 对上面图中各个节点分别编号,ABCDEF分别设置为012345。那么AB AC AD 关系可以转换为01 02 03, BC BE BF 可以转换为12 14 15, EF可以转换为45。换句话 阅读全文
posted @ 2016-11-22 13:24 kuillldan 阅读(1277) 评论(0) 推荐(0)
链地址法实现HashMap
摘要:前注:本文介绍的HashMap并非Java类库的实现。而是根据哈希表知识的一个实现。 上文介绍了开放地址法实现HashTable,它的缺点是对hashCode映射为地址后如果出现重复地址,则会占用其他元素的位置。这样HashTable存储容量有限,而且不便于算法理解。本文介绍链地址法实现HashMa 阅读全文
posted @ 2016-11-19 11:27 kuillldan 阅读(5622) 评论(0) 推荐(0)
开放地址法实现HashTable
摘要:前注:本文不是讲解Java类库的Hashtable实现原理,而是根据计算机哈希表原理自己实现的一个Hashtable。 HashTable内部是用数组存放一个(Key-Value pair)键值对的引用,其原理是根据Key的hashCode来计算出数组下标。因为存放位置是直接计算出来,不需要遍历数据 阅读全文
posted @ 2016-11-19 10:24 kuillldan 阅读(1705) 评论(0) 推荐(0)
数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
摘要:这五种排序算法难度依次增加。 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾。 第二次将数组的前n-1个元素取出,然后相邻两个元素依次比较,将大的元素往后移,最终n-1个元素中最大的元素又在末尾。 重复上面的步骤,直到数组只有1个元素 阅读全文
posted @ 2016-11-15 11:48 kuillldan 阅读(305) 评论(0) 推荐(0)
霍夫曼树,霍夫曼编码
摘要:关于霍夫曼树和霍夫曼编码的背景知识,这里不讲述。本文只记录代码。 测试代码: 阅读全文
posted @ 2016-11-08 22:33 kuillldan 阅读(272) 评论(0) 推荐(0)
线索二叉树的构建
摘要:package org.lyk.main; import java.util.Scanner; enum NodeType { child, thread; } class Node> { private static Node pre = null; Node left; NodeType leftType = NodeType.child; T ... 阅读全文
posted @ 2016-11-08 16:20 kuillldan 阅读(246) 评论(0) 推荐(0)
二叉树的JAVA实现-二叉树的增删改查CRUD
摘要:package org.lyk.interfaces; import java.util.List; public interface IBiTree> { public void addWithOrder(T data); public void addFirst(T[] data,T endFlag); public Object[] toArrayFirst()... 阅读全文
posted @ 2016-11-08 12:02 kuillldan 阅读(506) 评论(0) 推荐(0)
回朔法/KMP算法-查找字符串
摘要:下面代码演示了回朔法和KMP算法,并作测试。 KMP算法查找: 回朔法(暴力比较)查找字符串: 阅读全文
posted @ 2016-11-07 09:07 kuillldan 阅读(715) 评论(0) 推荐(0)
递归实现汉诺塔问题
摘要:public class HanoiTower { public static void main(String[] args)throws Exception { hanoiTower(64,"X","Y","Z"); } public static void hanoiTower(int n, String x, String y... 阅读全文
posted @ 2016-07-24 19:40 kuillldan 阅读(179) 评论(0) 推荐(0)
二分法查找数组中元素
摘要:要使用二分法需要注意: 数组中的元素必须已经按升序排列好 二分法主要思想是将一个数组一分为二,每次查询都能将查询范围在上一次的基础上缩小一半。所以效率非常高。 下面是Java代码实现: 输出结果: 1 1 2 2 2 2 3 3 7 7 8 target in: 8 阅读全文
posted @ 2016-07-24 18:36 kuillldan 阅读(2456) 评论(0) 推荐(0)