数据结构(Java版)
文章平均质量分 66
lingzhm
好记性不如烂博客,浸淫Java若干年
展开
-
Java实现单链表
package test2;class LinkNode{ private int iData; private double dData; LinkNode next; public LinkNode(int i, double d){ iData = i; dData = d; } public void displayLink(){ System.out.pr原创 2015-03-13 13:47:28 · 545 阅读 · 0 评论 -
Java链表实现堆栈
链表内容参考上一篇文章代码。package test2;public class LinkStack { private LinkList list; public LinkStack(){ list = new LinkList(); } public void push(int iData, double dData){ list.insertFront(iData原创 2015-03-13 17:57:49 · 915 阅读 · 0 评论 -
Java实现双向链表
package test2;class dLinkNode{ private long lData; public dLinkNode pre; public dLinkNode next; public dLinkNode(long lData){ pre = null; next = null; this.lData = lData; } public vo原创 2015-03-14 11:47:05 · 598 阅读 · 0 评论 -
构造哈夫曼树的Java实现,未通过亲自编程实现,记一下。
构造哈夫曼树的Java实现,未通过亲自编程实现,记一下。转载 2015-03-23 10:10:18 · 1113 阅读 · 0 评论 -
Java 实现哈希化字符串的方法
/* 哈希化字符串的Horner方法: a4*n^4 + a3*n^3 + a2*n^2 + a1*n^1 + a0*n^0 可写成 (((a4*n+a3)*n + a2)*n + a1)*n + a0 我们从括号最内端开始计算,渐渐向外扩展。这里a4、a3、a2、a1、a0均代表字符串中的字符码,通常取a=1,b=2····依次类推,为了保证所有字符串能被唯一编码表示 n一原创 2015-03-24 20:51:42 · 9128 阅读 · 0 评论 -
二叉搜索树升级版之红黑树
二叉查找树的一般操作的执行时间为O(lgn)。但二叉查找树若退化成了一棵具有n个结点的线性链后,则这些操作最坏情况运行时间为O(n)。红黑树的5个性质:每个结点要么是红的要么是黑的。 根结点是黑的。 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。 如果一个结点是红的,那么它的两个儿子都是黑的。 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含转载 2015-03-23 18:30:41 · 821 阅读 · 0 评论 -
Java 递归实现汉诺塔问题
汉诺塔问题就是:有ABC三根柱子,A柱子上从上到下摞了很多体积依次递增的圆盘,如果将圆盘从A移动到C柱子,且依然保持从上到下依次递增。class Hanio{ public void moveOne(int n, String init, String desti){ //只有一个盘子的情况 System.out.println(" move:"+n+" from "+init+"原创 2015-04-10 21:47:42 · 5366 阅读 · 0 评论 -
B-tree/B+tree/B*tree
3.B-tree B-tree又叫平衡多路查找树。一棵m阶的B-tree (m叉树)的特性如下:(其中ceil(x)是一个取上限的函数)1) 树中每个结点至多有m个孩子;2) 除根结点和叶子结点外,其它每个结点至少有有ceil(m / 2)个孩子;3) 若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点);转载 2015-04-18 11:13:44 · 2158 阅读 · 0 评论 -
无向带权图的最小生成树算法——Prim及Kruskal算法思路
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。 最小生成树(MST):权值最小的生成树。 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路。可以把边上的权值解释为线路的造价。则最小生成树表示使其造价最小的生成树。 构造网的最小生成树必须解决下面两个问题: 1、尽可能选取权值小的边,但不能构成回路;转载 2015-03-30 16:09:01 · 27785 阅读 · 2 评论 -
Dijkstra [迪杰斯特拉]算法思路(求单点到其他每个点的各个最短路径)Floyd算法:任意两点间最短距离
先给出一个无向图用Dijkstra算法(迪杰斯特拉算法)找出以A为起点的单源最短路径步骤如下应用Dijkstra算法计算从源顶点1到其它顶点间最短路径的过程列在下表中。Dijkstra算法的迭代过程:Floyd算法思想:1、从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。2、对于每一对顶点 u 和 v,看转载 2015-03-30 19:50:30 · 16128 阅读 · 0 评论 -
Java实现hash表,线性探测,二次探测,再哈希法,链表法
package test2;class DataItem{ private int key; public DataItem(int data){ this.key = data; } public int getKey(){ return this.key; }}public class HashTable { private DataItem[] dataArray原创 2015-03-24 19:04:33 · 2801 阅读 · 0 评论 -
Java 实现二叉搜索树的创建、查找、插入、删除结点
二叉搜索树特点:左孩子结点值比当前结点值小,右孩子结点值比当前值大或等于当前值。本文假设树中的结点值不存在相同的两项或多项。一、二叉搜索树的创建 1、首先定义结点类 代码如下:class TreeNode{ public int iData; //结点的数据项 public TreeNode leftChild; //结点指向左孩子的引用 publ原创 2015-03-20 20:51:34 · 4074 阅读 · 2 评论 -
Java双端链表实现队列
LinkNode 类参考上一篇文章。实现代码:package test2;class FirstLastList{private LinkNode first;private LinkNode last;public FirstLastList(){first = null;last = null;}public void insertFirst(int iData, double dData原创 2015-03-13 19:35:11 · 804 阅读 · 0 评论 -
Java实现数组二分查找及递归二分查找
public void binarySearch(int value){ int low = 0; int upper = nElements - 1; int currtIn = (low+upper)/2; while(true){ if(array[currtIn] == value){ System.out.println("find it :_"+currtIn+" "原创 2015-03-09 12:58:29 · 2636 阅读 · 0 评论 -
Java 中对数组进行封装
package test2;//import java.util.*;public class Test { private int array[]; private int nElements; public Test(int max){ array = new int[max]; nElements = 0; } public boolean insert(int va原创 2015-03-09 11:00:44 · 2094 阅读 · 0 评论 -
Java二维字符串数组
package test2;public class ArrayTwo { public static void main(String[] args) { // TODO Auto-generated method stub String array[][] = new String[3][0]; array[0] = new String[2]; array[1] =原创 2015-03-09 14:50:24 · 19790 阅读 · 2 评论 -
Java实现图:邻接矩阵表示、深度优先搜索、广度优先搜索、无向图的最小生成树
程序中用到的栈和队列实现请参见另外的博文。package test2;class Vertex{ private char vertexName; public boolean wasVisited; public Vertex(char name){ vertexName = name; wasVisited = false; } public void dis原创 2015-03-27 15:36:15 · 3055 阅读 · 0 评论 -
Java数组实现堆栈和队列
数组堆栈:public class Stack { private long[] stackArray; private int top; private int maxSize; public Stack(int maxSize){ this.maxSize = maxSize; top = -1; stackArray = new long[maxSize]; }原创 2015-03-11 18:31:11 · 2016 阅读 · 0 评论 -
Java实现拓扑排序:基于邻接矩阵,针对有向无环图
public void topoSort(){//仅仅针对有向图,基本思路是找到一个无后继的结点,将其删除,并放到排序数组的尾端,依次循环。直到没有结点。 int originalVertex = nVertex; while(nVertex > 0){ int noSucVert = getNoSuccessorVertex();//获取一个无后继结点 if(noSucV原创 2015-03-30 10:16:18 · 3729 阅读 · 0 评论 -
Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
冒泡排序: public void bubbleSort(){//O(n^2) //每一趟的比较一次就可能交换一次 for(int i=0;i<nElements;i++){ for(int j=0;j<nElements-i-1;j++){///// if(array[j]>array[j+1]){ swap(j,j+1); } } } }选原创 2015-03-09 20:23:13 · 1639 阅读 · 0 评论