![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 60
Coding小飞侠
倚楼听风雨,临海看江湖——专注互联网技术!!!
展开
-
HTTP协议状态码
在必要的时候应使用标准的状态码返回一般仅返回状态码即可,描述的字符串不是必要的100Continue继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息101witching Protocols申请人已要求服务器切换协议,服务器已确认并准备切换200OK正常返回信息201Created请求成功并且服务器创建了原创 2014-03-10 22:09:54 · 417 阅读 · 0 评论 -
快速排序—java实现
package test;/** * 快速排序 * @author huanghuankun * */public class quickSort {public static void quick_sort(int array[],int low,int hight){if(lowint location = partition(array,low原创 2014-03-20 16:55:14 · 383 阅读 · 0 评论 -
插入排序—java实现
package test;/** * 插入排序 * @author huanghuankun * */public class InsertSort {public static void insert_sort(int array[]){int temp = 0;for(int i =1;itemp = array[i];int j = 0;原创 2014-03-20 16:34:27 · 411 阅读 · 0 评论 -
约瑟夫环--java实现
package com.iteye.ljmdbc7a; import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * @author LIU * */ public class LinkedList { //定义结点,必须是static static class Node {原创 2014-03-24 10:16:34 · 501 阅读 · 0 评论 -
HashTable与HashMap的区别
一,首先说说HashTable与Map的区别 1.Map是一个接口,而HashTable是一个具体的实现,是Dictionary的具体实现。说HashTable是Map的准确点来说接口是不准确的。 2.Map可以通过key,value和key-value对迭代,而HashTable只支持前两种迭代方式。 3.HashTable中的contains根据传入的val原创 2014-03-25 09:06:46 · 537 阅读 · 0 评论 -
开放地址法与链表法的优缺点及其实现
一,优缺点: 1.开放地址法:容易产生堆积问题;不适于大规模的数据存储;散列函数的设计对冲突会有很大的影响;插入时可能会出现多次冲突的现象,删除的元素是多个冲突元素中的一个,需要对后面的元素作处理,实现较复杂;结点规模很大时会浪费很多空间; 2.链地址法:处理冲突简单,且无堆积现象,平均查找长度短;链表中的结点是动态申请的,适合构造表不能确定长度的情况;相对而言,拉链法的指转载 2014-03-25 09:59:59 · 14555 阅读 · 0 评论 -
HashTable 的内部实现
public class TestHashTable {public static void main(String[] args){Hashtable ht = new Hashtable();ht.put("one", "one");ht.put("two", "two");ht.put("three", "three");ht.put("four", "four");原创 2014-03-25 09:22:15 · 584 阅读 · 0 评论 -
数据类型需注意的问题
package test;public class TestObject {public static void main(String[] args){String s1 = "abc";String s2 = new String("abc");System.out.println("hacode(s1,s2):"+(s1.hashCode()==s2.hashCo原创 2014-03-25 10:46:01 · 561 阅读 · 0 评论 -
解决哈希(HASH)冲突的主要方法
解决哈希(HASH)冲突的主要方法虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的。当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时。冲突就难免会发 生。另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记录,不仅发生冲突,而且还会发生溢出。因此,处理冲突和溢出是 哈希技术中的两个重要问题。1、开放定址法 用开放定址转载 2014-03-25 10:08:16 · 557 阅读 · 0 评论 -
java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java中HashMap,LinkedHashMap,TreeMap,HashTable的区别java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMapMap主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。Hashmap 是一个最常用的Map转载 2014-04-24 10:01:04 · 414 阅读 · 0 评论 -
字典树
1.字典树 曾经遇到这样一个问题:很多单词,这些单词只含小写字母,并且不会有重复的单词出现,现在要统计出以某个字符串为前缀的单词数量,单词本身也是自己的前缀。先看看用常规的方法解决这个问题的复杂度。假设单词表容量为M,需要统计的前缀数量为N,前缀的平均长度是L,则常规算法思路是:对于每个前缀搜索每个单词,看看这个前缀是不是这个单词的前缀,如果是数量+1。这样的话时间复杂度为O(N*M*L),转载 2014-04-12 11:01:09 · 1404 阅读 · 0 评论 -
堆和栈的区别
此文章虽然是面向C/C++程序员写得,但是对咱们Java程序员还是很有帮助的。 堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序转载 2014-10-14 10:01:12 · 387 阅读 · 0 评论 -
一致性 hash 算法
一致性 hash 算法( consistent hashing ) 张亮 consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees中被提出,目前在 cache 系统中应用越来越广泛; 1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映转载 2014-10-14 10:07:58 · 328 阅读 · 0 评论 -
堆排序
public class HeapSort {public static int heap_size;//双亲编号public static int parent(int i){return i/2;}//左孩子编号public static int leftChild(int i){return 2*i;}//右孩子编号public static in转载 2014-10-13 21:35:50 · 372 阅读 · 0 评论 -
100万个数中找到最大的100个数
1. 算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 (2) 对(b,d]重复(1)操作,直到最右边的区间个数小于100个。注意[a,b)区间不用划分 (3) 返回上一个区间,并返回此区间的数字数目。接着方法仍然是对上一区间的左边进行划分,分为[a2,b2)b2(b2,d2]两个区间,取(b2,d2]区间转载 2014-10-13 22:49:34 · 3739 阅读 · 0 评论 -
从B 树、B+ 树、B* 树谈到R 树
从B 树、B+ 树、B* 树谈到R 树 作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。出处:http://blog.csdn.net/v_JULY_v 。 第一节、B树、B+树、B*转载 2014-10-14 10:31:21 · 349 阅读 · 0 评论 -
选择排序—java实现
package test;/** * 选择排序 * @author huanghuankun * */public class SelectSort {public static void select_sort(int array[]){int min = 0;int temp = 0;boolean flag = false;for(int原创 2014-03-20 16:35:01 · 404 阅读 · 0 评论 -
归并排序—java实现
package test;import java.util.Arrays;/** * 归并排序 * @author huanghuankun * */public class MerageSort { public static int[] merage_sort(int array[]){ if(array.length re原创 2014-03-20 17:30:14 · 455 阅读 · 0 评论 -
冒泡排序—java实现
package test;/** * 冒泡排序法 * @author huanghuankun * */public class BubbleSort {public static void bubble_sort(int array[]){int temp = 0; boolean flag = false;//设置标志位,如果一次比较过程中没有发原创 2014-03-20 16:33:53 · 456 阅读 · 0 评论 -
堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总转载 2014-03-10 21:58:16 · 320 阅读 · 0 评论 -
数据结构面试之二——双向链表表、循环链表、有序链表的常见操作
数据结构面试之二——双向链表表、循环链表、有序链表的常见操作题注:《面试宝典》有相关习题,但思路相对不清晰,排版有错误,作者对此参考相关书籍和自己观点进行了重写,供大家参考。二、双向链表双向链表的建立是在单链表的基础上,多了一个指向前驱的指针back。其他的操作类似,注意点就是在双向链表的操作,尤其插入、删除操作中需要修改两个指针的指向,一个是back指针,一个是next指原创 2014-03-08 10:04:09 · 663 阅读 · 0 评论 -
数据结构面试之五—二叉树的常见操作(递归实现部分
数据结构面试之五—二叉树的常见操作(递归实现部分)题注:《面试宝典》有相关习题,但思路相对不清晰,排版有错误,作者对此参考相关书籍和自己观点进行了重写,供大家参考。转载请注明:http://blog.csdn.net/wojiushiwo987/article/category/1210932五、二叉树的基本操作(递归实现) 二叉树是笔试、面试的重点,包括选择原创 2014-03-08 10:07:34 · 636 阅读 · 0 评论 -
数据结构面试之六——二叉树的常见操作2(非递归遍历&二叉排序树)
数据结构面试之六——二叉树的常见操作2(非递归遍历&二叉排序树)题注:《面试宝典》有相关习题,但思路相对不清晰,排版有错误,作者对此参考相关书籍和自己观点进行了重写,供大家参考。六、二叉树的基本操作(非递归遍历)&二叉排序树的操作 接上一节第五部分,主要分析二叉树的非递归遍历和二叉排序树的操作。1. 非递归中序遍历//1.依次将根节点r原创 2014-03-08 10:08:23 · 1011 阅读 · 0 评论 -
内部排序算法思想及时空复杂度比较
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复杂度l原创 2014-03-08 16:50:39 · 922 阅读 · 0 评论 -
数据结构面试之三——栈的常见操作
数据结构面试之三——栈的常见操作题注:《面试宝典》有相关习题,但思路相对不清晰,排版有错误,作者对此参考相关书籍和自己观点进行了重写,供大家参考。三、栈的基本操作3.1用数组构造栈【注意以下几点】:1.基于数组的栈的三要素:1)栈的最大容量maxSize; 2)栈的当前容量=当前栈中元素的个数=栈顶top-1;3)动态数组存储栈的元素 Type* list;原创 2014-03-08 10:05:21 · 679 阅读 · 0 评论 -
数据结构面试之四——队列的常见操作
数据结构面试之四——队列的常见操作题注:《面试宝典》有相关习题,但思路相对不清晰,排版有错误,作者对此参考相关书籍和自己观点进行了重写,供大家参考。四、队列的基本操作1.用数组构造队列队列即是满足先进先出的链表。用数组存储的话,同样需要满足队列头front出栈,队列末尾rear入栈。而对于数组来讲,rear和front可以代表数组头和尾。不能简单的固定rear和fr原创 2014-03-08 10:06:45 · 536 阅读 · 0 评论 -
数据结构面试之一——单链表常见操作
数据结构面试之一——单链表常见操作题注:《程序员面试宝典》有相关习题,但思路相对不清晰,排版有错误,本文对此参考相关书籍和自己观点进行了重写,供大家参考。1.查找链表元素Step1:置查找标记bfound=false;判断链表是否为空,是,提示“不能查找空链表”;否,进入step2。Step2:从链表头开始查找,判断(当前点的info是否与待查找元素值相等&&指针未原创 2014-03-08 10:01:30 · 508 阅读 · 0 评论 -
数据结构之排序算法
在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的。即所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,则说这种排序算法是稳定的,反之,就是不稳定的。 稳定的排序算法如下表所示: 稳定的排序转载 2014-03-09 21:11:50 · 614 阅读 · 0 评论 -
顺序查找与二分查找
最基本的查找方法就是顺序查找与二分查找,二分查找可以进一步优化为插值查找 顺序查找最简单的查找方法,逐个比较过来 Java代码 public static int seqSearch(int[] arr, int key){ for (int i=0; i if (key == arr[i原创 2014-03-10 11:04:08 · 629 阅读 · 0 评论 -
数据结构之查找算法总结
查找算法 一、查找的基本概念查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。查找是一种操作。 二、顺序查找针对无序序列的一种最简单的查找方式。时间复杂度为O(n)。 三、折半查找针对已排序序列的一种查找方式。并且只适用于顺序存储结构的序列。要求序列中的元素基本不变,在需要做删除和插入操作的时原创 2014-03-10 10:41:39 · 505 阅读 · 0 评论 -
二分查找算法
二分查找又称折半查找,它是一种效率较高的查找方法。 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。[java] view plaincopyprint?/** * 二分查找又称折半查找,它是一种效率较高的查找方法。 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。 * @author Admin转载 2014-04-15 11:54:44 · 343 阅读 · 0 评论 -
HashSet的存储原理
HashSet的底层用哈希散列表来存储对象(默认长度为16的数组),假如:Set set=new HashSet(); set.add(obj);内部存储过程为:定义h=obj.hashCode,得到obj对象的哈希码h,再对h进行hash散列运算,对数组长度进行求余,假如长度为16,则返回一个0-15之间的值,然后这个值就是存在HashSet数组中的下标。如果下标位置没有对转载 2014-03-30 22:02:26 · 2570 阅读 · 0 评论 -
二分查找递归与非递归算法
递归方法 [cpp] view plaincopyprint?int BinSearch(int Array[],int low,int high,int key/*要找的值*/) { if (low { int mid = (low+high)/2; if(key == Array[mid])转载 2014-04-15 11:56:47 · 507 阅读 · 0 评论 -
HashMap内部实现原理
HashMap是链表(请参考LinkedList算法详解)和数组(ArrayList解读)组合的一个综合性的算法,理解本文前最好阅读本文的两篇他的结构类似于:原创 2014-04-16 15:26:19 · 426 阅读 · 0 评论 -
希尔排序—java实现
package test;/** * 希尔排序 * @author huanghuankun * */public class ShellSort {public static void shell_sort(int array[]){int d = array.length/2; int j,k,temp;while(d>0){原创 2014-03-20 16:32:16 · 418 阅读 · 0 评论 -
递归算法经典列子
程序调用自身的编程技巧称为递归( recursion)。一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。一般来说,递归需要有边界转载 2014-10-18 10:41:36 · 740 阅读 · 0 评论