hash桶

时间:2022-09-10 00:25:51
 #include <stdio.h>
#include <stdlib.h>
#include "chain.c" //include the chain.c to create chain and list
#define NUMBER_SCOPE 69000
#define ARRAY_SIZE 100000000
#define PLUS_RESULT 5 int *createArray(long length){
int i;
int *array=(int*)malloc(length*sizeof(int));
srand((int)time());
printf("Array:");
for(i = ;i<length;i++){
array[i]=rand()%NUMBER_SCOPE - (NUMBER_SCOPE)/;
//printf("%d,",array[i]);
}
return array;
} /*
find the max number from a array
*/
int maxNum(int *array,int length){
int i,max;
max = array[];
for(i = ;i<length;i++){
if(array[i] > max){
max = array[i];
}
}
return max;
}
/*
find the min number from a array
*/
int minNum(int *array,int length){
int i,min;
min = array[];
for(i = ;i<length;i++){
if(array[i] < min){
min = array[i];
}
}
return min;
}
/*
this function to fill barrel ,first parameter is the barrel,second is array
*/
int *fillBarrel(int *barrel,int *array){
int i,site;
for(i = ;i < ARRAY_SIZE;i++){
site = array[i] - barrel[] + ;
barrel[site] = ;
}
return barrel;
}
/*
this function get a barrel array ,return a result chain,
it create by Quick Sort
*/
struct chain *createResult(int *barrel){
int l_site,r_site,l_index,r_index;
struct chain *result;
struct list lst;
l_index = ;
r_index = barrel[] - ;
while(l_index < r_index && ){
if((barrel[l_index] == ) && (barrel[r_index] == )){
l_site = l_index - + barrel[];
r_site = r_index - + barrel[];
// printf("\nl_site = %d\tr_site = %d",l_site,r_site);
// printf("\nbarrel[%d] = %d \nbarrel[%d] = %d",l_index,barrel[l_index],r_index,barrel[r_index]);
if((l_site + r_site) == PLUS_RESULT){
lst.firstNum = l_site;
lst.secondNum = r_site;
/*add in chain*/
result = addlink(result,lst);
l_index ++;
r_index --;
}
else if((l_site + r_site) > PLUS_RESULT){
r_index--;
}
else{
l_index++;
}
}else if(barrel[l_index] != ){
l_index ++;
}
else{
r_index --;
}
}
return result;
}
/*
this function well create a barrel array by the array in the parameters
*/
int *createBarrel(int *array,int length){
int min,max,capacity,*barrel,i;
min = minNum(array,length);
max = maxNum(array,length);
capacity = max - min + ; //+4,because save capacity,min and max.
barrel = (int*)malloc(capacity*sizeof(int));
for(i = ;i<capacity;i++){
barrel[i] = ;
}
barrel[] = capacity; //save barrel capacity in barrel[0]
barrel[] = min; //save min number in barrel[1]
barrel[] = max; //save max number in barrel[2]
return barrel;
} /*
this function could display the information about the barrel and the content
*/
void showBarrel(int *barrel){
int i;
// for(i = 3;i < barrel[0];i++){
// printf("%d\t",barrel[i]);
// }
printf("\narray_length = %d\ncapacity = %d\nmin = %d\nmax = %d\n",ARRAY_SIZE,barrel[],barrel[],barrel[]);
} main(){
int *array,*barrel;
long length;
struct chain *result;
//int a[] = {1,2,3,4,5,7,7,7,7,0};
printf("======main() begin=======\n");
length = ARRAY_SIZE;
array = createArray(length);
//array = a;
//printf("\n====create array over=======");
barrel = createBarrel(array,length);
//printf("\n====create barrel over=======");
barrel = fillBarrel(barrel,array);
//printf("\n====fill barrel over=======\n");
showBarrel(barrel);
//printf("\n====show barrel over=======\n");
result = create();
//printf("\n====create result over=======\n");
result = createResult(barrel);
printf("\n====computer result over=======\n");
/* the function to display the result chain*/
showChain(result);
}

hash桶的更多相关文章

  1. 大厂面试必问题!HashMap 怎样解决hash桶碰撞?

    HashMap冲突解决方法比较考验一个开发者解决问题的能力.下文给出HashMap冲突的解决方法以及原理分析,无论是在面试问答或者实际使用中,应该都会有所帮助.在Java编程语言中,最基本的结构就是两 ...

  2. nginx源码分析之hash的实现

    nginx实现了自己的hash数据结构,正如数据结构中讲述的那样,nginx用开放链表法解决冲突,不过不同的是一旦一个hash表被初始化后就不会被修改,即插入和删除,只进行查询操作,所以nginx通过 ...

  3. php Hash Table&lpar;一&rpar; Hash Table的结构

    关于Hash Table专题: 一直想深入理解一下php的hash table的实现,以前一直是星星点点的看看,从未彻底的总结过,那就从这个专题开始吧! 主要想总结几个部分:hashtable结构,h ...

  4. Hash中的一些概率计算

    Hash是把锋利的刀子,处理海量数据时经常用到,大家可能经常用hash,但hash的有些特点你是否想过.理解过.我们可以利用我们掌握的概率和期望的知识,来分析Hash中一些有趣的问题,比如: 平均每个 ...

  5. 学习hash&lowbar;map从而了解如何写stl里面的hash函数和equal或者compare函数

    ---恢复内容开始--- 看到同事用unordered_map了所以找个帖子学习学习 http://blog.sina.com.cn/s/blog_4c98b9600100audq.html (一)为 ...

  6. Mycat 分片规则详解--一致性hash分片

    实现方式:基于hash算法的分片中,算法内部是把记录分片到一种叫做"bucket"(hash桶)的内部算法结构中的,然后hash桶与实际的分片节点一一对应,从此实现了分片.路由的功 ...

  7. Perl中的hash类型

    hash类型 hash类型也称为字典.关联数组.映射(map)等等,其实它们都是同一种东西:键值对.每一个Key对应一个Value. hash会将key/value散列后,按序放进hash桶.散列后的 ...

  8. hash bucket

    什么是bucket bucket的英文解释: Hash table lookup operations are often O(n/m) (where n is the number of objec ...

  9. 曲演杂坛--HASH的一点理解

    HASH,百度百科上做如下定义: Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列 ...

随机推荐

  1. devexpress bandgridview使用总结(14&period;2)

    这两天利用bandgridview做表头,希望做成如下形状 在制作过程中发现如果想实现动态表头,代码的书写顺序需要稍加注意 实例化gridband 绑定gridband至bandgridview gr ...

  2. Java对象表示方式2:XStream实现对对象的XML化

    上一篇文章讲到了使用Java原生的序列化的方式来表示一个对象.总结一下这种对象表示方式的优缺点: 1.纯粹的Java环境下这种方式可以很好地工作,因为它是Java自带的,也不需要第三方的Jar包的支持 ...

  3. HTML5的五种客户端离线存储方案

    最近折腾HTML5游戏需要离线存储功能,便把目前可用的几种HTML5存储方式研究了下,基于HT for Web写了个综合的实例,分别利用了Cookie.WebStorage.IndexedDB以及Fi ...

  4. 每天一个linux命令(16):whereis 命令

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 和 find相比,whereis查找的速度 ...

  5. C&plus;&plus;学习40 抛出自己的异常

    throw 是C++中的关键字,用来抛出异常.如果不使用 throw 关键字,try 就什么也捕获不到:上节提到的 at() 函数在内部也使用了 throw 关键字来抛出异常. throw 既可以用在 ...

  6. linux踢人命令 pkill踢人用法

    首先使用who命令查看在线用户,然后踢人. 强制踢人命令格式:pkill -kill -t tty 解释: pkill -kill -t 踢人命令 tty 所踢用户的TTY或者pts/x(x代表数字) ...

  7. EditPlus保存文件时不生成其备份文件的方法

    3.将“保存时去掉备份文件”复选框去掉,点击 应用->确定,即可 .

  8. JavaScript---网络编程&lpar;2&rpar;-函数与数组

    上节,学完循环了~ 现在学Javascript的函数和数组. JavaScript语法 每一种语言都有自己的语法规则,JS语法与Java很像,所以学习起来比较容易.JS中也一样有变量,语句,函数,数组 ...

  9. nice Validator参考

    快速上手 例1. DOM传参 1. 要验证一个表单,只需要给字段绑定规则“data-rule”就可以了2. 字段可以有多条规则,规则之间用分号(;)分隔3. js初始化不是必要的,只要是字段并且带有“ ...

  10. LCT 模板及套路总结

    这一个月貌似已经考了无数次\(LCT\)了..... 保险起见还是来一发总结吧..... A. LCT 模板 \(LCT\) 是由大名鼎鼎的 \(Tarjan\) 老爷发明的. 主要是用来维护树上路径 ...