
数据结构
文章平均质量分 68
小图包
这个作者很懒,什么都没留下…
展开
-
线性表数据结构解读(五)哈希表结构-HashMap
我们先来看一下哈希表的百度定义散列表(Hash table,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈转载 2016-10-10 14:52:27 · 430 阅读 · 0 评论 -
线性表数据结构解读(二)链式存储结构LinkedList
链式存储结构链式存储结构是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。11 我们将数据元素和下一个元素位置的结构称为链表的节点。若第一个节点只表示整个链表的起始位置,而无任何信息,称其为头结点。对于最后一个结点,后面无任何元素,其表示元素位置的地址用“^”来表示,称其为尾结点,程序实现中用”null“表示。 链表中结点的表示必转载 2016-10-08 09:13:27 · 1042 阅读 · 0 评论 -
Stack介绍以及设计一个有getMin 功能的栈
Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用[plain] view plain copyE push(E item) 把项压入堆栈顶部。 E pop()原创 2017-08-30 10:01:39 · 343 阅读 · 0 评论 -
Java动态规划 实现最长公共子序列长度
动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。【问题】 求两字符序列的最长公共字原创 2017-10-18 16:06:02 · 913 阅读 · 0 评论 -
Java实现8皇后算法
八皇后是一道很具典型性的题目。它的基本要求是这样的:在一个8*8的矩阵上面放置8个物体,一个矩阵点只允许放置一个物体,任意两个点不能在一行上,也不能在一列上,不能在一条左斜线上,当然也不能在一条右斜线上。 初看到这道题目,大家的第一印象是遍历,但是经过实践之后发现遍历其实不好写,而且复杂度很低。不仅需要遍历8*8*8*8*8*8*8*8*8 = 2^24次数据,还要判断各种条件,实际原创 2017-10-19 11:47:30 · 656 阅读 · 0 评论 -
约瑟夫环生者(JAVA)
内容要求:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要原创 2017-10-19 17:14:54 · 310 阅读 · 0 评论 -
Java实现图的深度优先遍历和广度优先遍历
private int vertexSize;//顶点数量 public int getVertexSize() { return vertexSize; } public void setVertexSize(int vertexSize) { this.vertexSize = vertexSize; } pri原创 2017-10-29 14:22:27 · 1619 阅读 · 0 评论 -
递归求和、阶乘、最大公约数 以及汉诺塔
public void FromJava() {//// int i = 1;// for(i=1;i<=80;i++){// System.out.println("兔子第"+i+"个月的总数为:"+find(i));// } System.out.println("x:"+god(99,55));}原创 2017-10-22 14:51:27 · 311 阅读 · 0 评论 -
分治算法-球队循环赛日程安排-java实现
public void scheduleTable(int[][] table,int n){ if ( n==1){ table[0][0]=0; }else { //填充左上区域矩阵 int m =n/2 ; scheduleTable(table,m); for (int i=0;i;i++){原创 2017-10-23 20:34:28 · 951 阅读 · 0 评论 -
贪心算法
贪心算法基本原理贪心算法的核心就是贪,就是总是做出当前看来最优的选择,因此可知,贪心算法不从整体去考虑,它做出的选择也是局部最优选择,从而达到全局优化选择。虽然贪心算法不一定能得到最优解,但是对很多问题,它是能够得到整体最优解的,因此贪心算法是否能到最优解,需要严格证明。贪心算法产生有化解的条件贪心选择性质: 若一个问题的全局最优解可以通过局部最优解来得到,则说明该问题原创 2017-10-23 10:39:32 · 383 阅读 · 0 评论 -
最小生成树-普里姆算法-java实现
最小生成树:是将图中的顶点全部连通,但是其权值之和要求最小/** * 最小生成树:两种方式,普里姆算法和克鲁斯卡尔算法 * @author timmy1 * */public class MinSpanTree { int[][] matrix;// 矩阵 int MAX_WEIGHT = Integer.MAX_VALUE; int size;// 顶点个数 /**转载 2017-10-31 20:06:46 · 445 阅读 · 0 评论 -
哈夫曼
在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。 首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结转载 2017-10-15 17:09:05 · 357 阅读 · 0 评论 -
树的遍历
树的基本概念: 树的概念是学习树的关键所在,掌握了树的基本概念,学会树与二叉树,so easy。我通过一棵树来了解树的基本概念,如下图 1、结点的度 结点的度是子结点的个数。例如:结点原创 2017-10-15 16:57:21 · 247 阅读 · 0 评论 -
Java实现二分查找
二分查找又称折半查找,它是一种效率较高的查找方法。 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。private static final int[] NUMBERS = {49, 38, 65, 97, 76, 13};public static int binarySearch(int elem, int[] array, int l原创 2017-10-15 20:46:55 · 193 阅读 · 0 评论 -
分治法实现棋盘覆盖
问题描述:用图所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。思路:应用分治法分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题。k>0 时,可将2^k×2^k的棋盘划分为4个2^(k-1)×2^(k-1)的子棋盘,如图4.11(a)所示。这样原创 2017-10-24 16:08:19 · 486 阅读 · 0 评论 -
JAVA实现图的结构
////**// * 图的数据结构:采用邻接矩阵的存储方式来表示图中顶点之间的关系。实现有:求图的// *// * @author timmy1 使用二维数组来存储图中顶点的关系:数字为0表示自己,最大值表示两个顶点之间不联通, -》求顶点的入度和出度// * -》顶点a到顶点b之间的权值 ==》先创建这个图// */ int[]原创 2017-10-24 16:41:43 · 2762 阅读 · 0 评论 -
Java数据结构----图的基础知识
1、概念图: 是一种复杂的非线性数据结构。图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为: G=(V, E) 其中: V 是顶点的有穷非空集合, E 是 V 中顶点偶对(称为边)的有穷集。 通常,也将图 G 的顶点集和边集分别记为 V(G) 和 E(G) 。 E(G) 可以是空集。若 E(G) 为空,则图 G 只有顶点而没有边。有向图转载 2017-10-24 17:08:25 · 487 阅读 · 0 评论 -
ArrayList源码解析
ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小...... 认真阅读本文,我相信一定会对你有帮助。比如为什么ArrayList里面提供了一个受保护的removeRange方法?提供了其他没有被调用过的私有方法? 首先看到对ArrayList的定义:[java] v转载 2016-09-25 19:26:43 · 387 阅读 · 0 评论 -
List排序
import java.util.ArrayList;002import java.util.Collections;003import java.util.Comparator;004import java.util.List;原创 2016-09-12 14:46:49 · 286 阅读 · 0 评论 -
java实现二叉树的构建以及3种遍历方法
目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 点击查看原始大小图片收藏代码 package tree; import java.util.LinkedList; import java.util.List; /** * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 * * 参考资料0:数据结构(C语言版)严蔚敏 * * 参考转载 2016-10-11 11:37:53 · 850 阅读 · 0 评论 -
选择排序
int [] newarray= new int []{9,2,4,5,6,55,99,110,180,166,177,195,186,200,11,18}; selectSort (newarray);public void selectSort(int [] array){ int min =0 ; int tmp ; for (原创 2016-10-23 12:52:38 · 240 阅读 · 0 评论 -
插入排序
int[] a = new int[]{9, 2, 4, 5, 6, 55, 99, 110, 180, 166, 177, 195, 186, 200, 11, 18};for (int i = 0; i length; i++) { int temp = a[i]; int j; for (j = i - 1; j >= 0; j--) { if (a原创 2016-10-23 16:52:36 · 314 阅读 · 0 评论 -
插入排序二分法插入排序
private void sort ( int []a ){ for ( int i=0 ;ilength;i++){ int temp =a[i]; int left =0 ; int right =i-1 ; int mid =0 ; while (left<=right){原创 2016-10-23 18:30:04 · 335 阅读 · 0 评论 -
插入排序希尔排序
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int[] a = new int[]{9, 2, 4, 5, 6原创 2016-10-23 23:05:04 · 242 阅读 · 0 评论 -
JAVA中的排序
public static void main(String[] args){ SortUtil sortUtil=new SortUtil(); //sortUtil.insertSort(datas); sortUtil.shellSort(datas); //sortUtil.bubbleSort(datas); //sortUtil.quickSort原创 2016-10-25 23:39:35 · 251 阅读 · 0 评论 -
快速排序(未)
public void quick(int [] a){if(a.length>0){quickSort(a,0,a.length-1);}}/** * 快速排序 * @param a * @param i * @param j */private void quickSort(int[] a, int low, int high) {if(low原创 2016-10-27 18:05:35 · 284 阅读 · 0 评论 -
堆排序(未)
public class HeapSort {//堆排序public static void main(String[] args){int[] array = {39,44,1,0,8,66,23,67,9,15,100,70,22,3,6,54};HeapSort heapSort = new HeapSort();heapSort.heapSort(array);fo原创 2016-10-27 18:18:46 · 263 阅读 · 0 评论 -
增量排序(未)
public class HeerSort {public static void main(String[] args){int [] a = {49,38,44,2,0,7,28,1,-9,7,2,3,8,20,14,88,56,-8,-33,5,23,12,99,76};int d = a.length;//默认增量是8while(true){d = d/2;Syst原创 2016-10-27 18:21:40 · 533 阅读 · 0 评论 -
基数排序(未)
public void sort(int [] array){int max = 0;//获取最大值for(int i = 0;iif(maxmax = array[i];}}int times = 0;//获取最大值位数while(max>0){max = max/10;times++;}List queue = new ArrayList();/原创 2016-10-27 18:34:01 · 341 阅读 · 0 评论 -
二分递归查找和非递归查找
public int binarySearch(int elem,int [] array,int low,int high){if(low>high){return -1;}int middle = (low+high)/2;if(array[middle] == elem){System.out.println("找到对应元素值,下标为:"+middle);retu原创 2016-10-27 18:01:25 · 388 阅读 · 0 评论 -
合并排序(未)
public class MergeSort {public void mergeSort(int[] a,int left,int right){if(leftint middle = (left+right)/2;mergeSort(a, left, middle);mergeSort(a,middle+1,right);merge(a,left,middle,righ原创 2016-10-27 18:23:46 · 301 阅读 · 0 评论 -
二叉查找树,删除,节点开始查找数字
package com.sjh.dongnaowork.tree;public class SearchBinaryTree {TirNode<Integer> root;/** * @param args */public static void main(String[] args) { int[] arrays={54,18,66,87,36,12,54,81,15,76,57,转载 2016-10-18 18:39:52 · 312 阅读 · 0 评论 -
HastSet用法
java集合——HashSet的用法一、HashSet的构造[java] view plain copy "font-size:18px;">HashSet hashset=new HashSet(); 二、HashSet添加元素[java] view pl转载 2016-10-07 23:53:28 · 1007 阅读 · 0 评论 -
linkedHashMap的应用
一. 概述: LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。LinkedHashMap实现与HashMap的不同之处在于,LinkedHashMap维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序(insert-order)或者是访问顺序,其中默认的迭代访问顺序就是插入顺序,即可以按插入的顺序遍历元转载 2016-10-06 12:01:41 · 578 阅读 · 0 评论 -
ArrayList、Vector、LinkedList学习例子
/** * (1)ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能含有“空隙”。 * 当数组大小不满足时会增加存储能力,将已有数组数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行拷贝,移动,代价比较高。因此,它适合随即查找和遍历,不适合插入合删除。 * (原创 2016-09-30 17:45:15 · 303 阅读 · 0 评论 -
链表(单向、双向、单向循环、双向循环)
前段时间学习了数据结构的部分知识,然后到上个星期别人问相关问题的饿时候发现自己对链表的知识都有些模糊了,主要还是有些细节的地方记不太清楚,所以就萌生了写这篇博客的想法,一是要重新复习一下链表的相关知识,二呢用C++重新写一遍,熟悉C++语言。之前用C语言实现链表操作的时候也写过几篇博客,但是重点都是体现在代码部分,示意图都是从网站上下过来的或是别人博客上摘过来的,这次自己用Processon在网页转载 2017-11-16 17:29:43 · 900 阅读 · 0 评论