数据结构
文章平均质量分 76
一路走来的自己
成长,成功,都由自己选择
展开
-
数据结构--解决散列冲突,分离链接法
散列表的实现常常叫做散列。散列是一种用以常数平均时间执行插入,删除,和查找的技术。但是那些需要元素信息排序的树操作不会得到支持。因此例如findMax,findMin以及排序后遍历这些操作都是散列不支持的。 如果当一个元素被插入时与已经插入的元素散列(比如散列表的数组序号,很多元素插入到同一个数组序号中),那么就会产生一个冲突,这个冲突需要消除。解决冲突的办法有两种:1 分离链接法原创 2015-03-19 13:15:21 · 1099 阅读 · 0 评论 -
数据结构--排序之快速排序(分治,递归)
上代码:/* * 快速排序O(NlogN) 对C++和Java的基本类型特别有用 适用于大量输入 对少量比如20个输入时插入排序比较好 * 包含 找出枢纽元(也就是分割的关键字),分割数组,再递归的进行 这几个部分 注意虽然是递归但这都是在一个数组上直接操作 * 不断进行正向的调用 */ //快速排序的驱动程序 public sta原创 2015-03-26 15:58:47 · 1091 阅读 · 0 评论 -
数据结构--二叉查找树的java实现
上代码:package com.itany.erchachazhaoshu;public class BinarySearchTree>{ //定义二叉查找树的根节点 每一个查找二叉树都有一个自己的root 节点 root外界看不到 private BinaryNode root; public BinarySearchTree() { r原创 2015-03-13 16:53:01 · 703 阅读 · 0 评论 -
数据结构--ArrayList的Java实现
上代码:package com.itany.MyArrayList;import java.util.Iterator;public class MyArrayList implements Iterable{ private static final int DEFAULT_CAPACITY=10;//默认数组容量大小 private int theSize;//集原创 2015-03-08 15:21:26 · 616 阅读 · 0 评论 -
数据结构--B树、B+树、B*树,R 树
转载自:http://blog.csdn.net/v_JULY_v/article/details/6530142/原作者:v_JULY_v作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。转载 2015-03-17 16:18:39 · 687 阅读 · 0 评论 -
数据结构--LinkedList的java实现
上代码:package com.itany.MyLinkedList;import java.util.ConcurrentModificationException;import java.util.Iterator;import java.util.NoSuchElementException;public class MyLinkedList implements Itera原创 2015-03-10 10:44:44 · 565 阅读 · 0 评论 -
数据结构--尾递归
递归是指函数直接或间接地调用自己。尾递归是指所有递归形式的调用,一定是发生在函数的末尾。举例来说,这是在 C 语言中用循环来计算 1 ~ 100 的和:int sum = 0;for (int i = 1; i 100; ++i) { sum += i;}要改写成递归形式的话,它的定义如下:sum(n) = sum(n - 1) + n (n > 0)原创 2015-03-10 21:32:15 · 634 阅读 · 0 评论 -
数据结构--优先队列(堆)的实现
1 优先队列是至少允许下列两种操作的数据结构:insert和deleteMin操作,insert相当于入队,deleteMin则相当于在优先队列中的出队。2 我们使用二叉堆(这里也就叫做堆),来实现这种数据结构。堆有两个重要性质,其一是结构性,是一颗完全二叉树(高为h的二叉树 有2exp(h)到2exp(h+1)-1个节点)其二是对序性质,如果我们考虑任意一个字树也是一个堆,那么任意节点应原创 2015-03-22 13:37:32 · 813 阅读 · 0 评论 -
数据结构--排序之插入排序
/* * 插入排序O(N2)的运行时间 * 思想是:若数组长度为N 那么把数组序号从1到N-1的值依次往前进行比较 这里需要一个for循环 * 注意每个数在比较的时候它前面的数据都是已经排好序号的(因为从序号为1时就开始排序了) * 注意我们这里用类似堆中下浮和上浮的交换方法 把需要交换的数据拿出来 和前面的数据依次进行比较 如果拿出来的数据小了 这个当原创 2015-03-24 13:10:28 · 588 阅读 · 0 评论 -
数据结构--remove方法对LinkedList类的使用注意
直接上代码:package com.itany.linkedList;import java.util.Iterator;import java.util.LinkedList;import java.util.List;public class Test{ /* * remove方法对LinkedList类的使用注意 * 将表中所有值为偶数的项删除原创 2015-03-05 22:09:32 · 3930 阅读 · 0 评论 -
数据结构--递归 协变 泛型方法 类型界限
一 递归:使用递归必须遵循四个基本法则:1 基准情形必须要有某些基准情形,它无需递归就能解出来2 不断推进对于那些需要递归求解的情形,每一次递归调用都必须是状况朝着一种基准状况推进3 设计法则假设所有的递归调用都能运行4 合成效益法则在求解同一问题时,切勿在不同的递归中做重复性的工作。比如在计算斐波那契数列时,使用递归并不好,原因正是由于第四条法则,会重复计算。原创 2015-03-02 10:43:13 · 734 阅读 · 0 评论 -
数据结构--排序之堆排序
一 :分析部分堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki 2i 且ki 2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整;原创 2015-03-25 15:13:29 · 1158 阅读 · 0 评论 -
数据结构--排序之归并排序(分治 递归 合并典型案例)
归并排序的运行时间是O(NlogN)归并排序是用于分析递归技巧的典型案例与其他的O(NlogN)排序算法比较 比如堆排序 归并排序的运行时间严重依赖比较时间和数组和临时数组中移动元素的开销,这些开销是和语言相关的。比如进行一次泛型排序,使用Comparactor时。归并排序使用流行算法中最少的比较次数,因此是使用Java的通用排序算法的上好选择。事实上,他就是java标准类库中泛型排序所使原创 2015-03-25 21:36:20 · 750 阅读 · 0 评论 -
数据结构--对固定数组的扩大
很简单,上代码:package com.itany.array;public class Test{ public static void main(String[] args) { int[] array=new int[10]; int[] newArray=new int[array.length*2]; f原创 2015-03-05 18:59:44 · 458 阅读 · 0 评论 -
数据结构--求最大公约数(欧几里得算法)
package com.itany.oulijide;public class Test{ public static void main(String[] args) { int result=gcd(50,15); System.out.println(result); } //默认m>n,如果m<n,那么第一次迭原创 2015-03-05 12:45:57 · 956 阅读 · 0 评论 -
数据结构--解决散列冲突,平方探测法
上代码:package com.itany.quadraticprobing;import java.util.LinkedList;import java.util.List;//使用平方探测的散列表 来解决散列时的冲突问题public class QuadraticProbingHashTable{ private static final int DEFAULT_原创 2015-03-19 20:47:29 · 2154 阅读 · 1 评论 -
数据结构--AVL树的insert()的Java实现
一个AVL树是其每个节点的左子树和右子树的高度差最多差1的二叉查找树;AVL树是一种最古老的平衡查找树上代码:package com.itany.avlshu;public class AVLTree>{ private static class AvlNode { private int height; private T ele原创 2015-03-16 13:08:22 · 953 阅读 · 0 评论 -
数据结构--最大子序列和(使用分治策略和递归)
例如对于输入:-2,11,-4,13,-5,-2答案为20 为方便起见 若所有整数为负数 则最大子序列和为0算法一:分治策略:其想法是把问题分成大致相等的子问题,然后递归的对他们求解,这是“分”的部分,“治”是将两个子问题的解修不到一起并作少量附加工作,最后得到整个问题的解。对于这个问题,可以分为三个部分,一个是最大子序列可能出现在输入数据的左半部分,第二种是出现在数据的右半部原创 2015-03-04 12:35:42 · 897 阅读 · 0 评论 -
数据结构--二分法查找(内含 ? super T的使用分析)
根据年龄查找对应的人,直接上代码,有几种代码,只是在泛型时有些区别,需注意:代码一:T 使用自己的compareTopackage com.itany.gen.superr;public class Person implements Comparable{ private int age; public Person(int age) { t原创 2015-03-05 10:17:55 · 606 阅读 · 0 评论 -
数据结构--排序之希尔排序
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因原创 2015-03-24 13:13:44 · 812 阅读 · 0 评论