当前位置:网站首页>哈希表及完整注释
哈希表及完整注释
2022-07-06 19:00:00 【@风景邮递Yuan】
#include "stdio.h"
#include "stdlib.h"
typedef struct{
int* elem; //数据元素存储基址,动态分配数组
int count; //当前数据元素个数
}HashTable;
int m=0; //散列表表长,全局变量
//HASHSIZE 定义散列表长为数组的长度
typedef enum { //或者不要typedef,将Status放在前面,调用的函数前面加enum
OK=1,SUCCESS=1,UNSUCCESS=0,HASHSIZE=12,NULLKEY=-32768
}Status;
Status InitHashTable(HashTable *H){ //初始化散列表
int i;
m=HASHSIZE;
H->count=m;
H->elem=(int *)malloc(m*sizeof(int));
for(i=0;i<m;i++)
H->elem[i]=NULLKEY;
return OK;
}
int Hash(int key){ //散列函数 key相当于qq账号
return key%m; //除留余数法 返回钥匙
}
void InsertHash(HashTable* H,int key){ //插入关键字进散列表
int addr=Hash(key); //求散列地址
printf("The subscript of the inserted array position:%d\n",addr);
while(H->elem[addr]!=NULLKEY) //如果不为空,则冲突
addr=(addr+1)%m; //开发定址法的线性探测
H->elem[addr]=key; //直到有空位后插入关键字
}
Status SearchHash(HashTable H,int key,int* addr){ //插入关键字进散列表
*addr=Hash(key); //求散列地址
while(H.elem[*addr]!=key){ //如果不为空,则冲突
*addr=(*addr+1)%m; //开发定址法的线性探测
if(H.elem[*addr]==NULLKEY||*addr==Hash(key)){
//如果循环回到原点
//则说明关键字不存在
return UNSUCCESS;
}
}
return SUCCESS;
}
int main(){
int i=0;
HashTable H;
InitHashTable(&H);
while(i<HASHSIZE){
InsertHash(&H,i); //插入12个数
i++;
}
int key=0;
int addr; //返回下标的作用
while(key<HASHSIZE){
if(SearchHash(H,key,&addr)==SUCCESS){ //搜索到了这个数的位置
printf("Print the position of this number:%d\n",addr);
} else{
printf("UNSUCCESS\n");
}
key++;
}
}
边栏推荐
猜你喜欢
Argo workflows source code analysis
A new path for enterprise mid Platform Construction -- low code platform
Web3对法律的需求
【论文阅读|深读】DNGR:Deep Neural Networks for Learning Graph Representations
leetcode:5. Longest palindrome substring [DP + holding the tail of timeout]
postgresql之整体查询大致过程
B站6月榜单丨飞瓜数据UP主成长排行榜(哔哩哔哩平台)发布!
Introduction to FLIR blackfly s industrial camera
Use of fiddler
unity 自定义webgl打包模板
随机推荐
Draco - glTF模型压缩利器
Apifox,你的API接口文档卷成这样了吗?
C # / vb. Net supprime le filigrane d'un document word
Argo workflows source code analysis
fasterxml ToStringSerializerBase报错
遇到慢SQL该怎么办?(下)
Infrared camera: juge infrared mag32 product introduction
Lidar: introduction and usage of ouster OS
Application analysis of face recognition
3D laser slam: time synchronization of livox lidar hardware
leetcode:5. 最长回文子串【dp + 抓着超时的尾巴】
postgresql之integerset
[server data recovery] data recovery case of a Dell server crash caused by raid damage
安全巡检的工作
ODBC database connection of MFC windows programming [147] (with source code)
猿桌派第三季开播在即,打开出海浪潮下的开发者新视野
pgpool-II和pgpoolAdmin的使用
Introduction to FLIR blackfly s industrial camera
Chang'an chain learning notes - certificate model of certificate research
unity webgl自适应网页尺寸