数据结构的字典插入,哈希表使用
hash基数(散列表,设计哈希函数,平均查找长度(分子为查找关键字的次数,分母为关键字的个数))
散列表类似于数组结构,用于存储关键字,哈希函数可根据要求自己设置
#include<iostream>
using namespace std;
#include<string.h>
#include<stdio.h>
typedef int KeyType;
typedef int DataType;
typedef struct{
KeyType key;
DataType value;
}DicElement;
struct HashTable{
int MaxNum;
int curNum;
DicElement *element;
};
typedef struct HashTable* hash;
//初始化哈希表,先设置为空表(赋初值)
hash InitHashTable(int max){
hash p;
p=new struct HashTable;
p->MaxNum=max;
p->curNum=0;
p->element=new DicElement[max];
for(int i=0;i<max;i++){
p->element[i].key=-1;
}
return p;
}
int HashFun(KeyType key){
return key%13;
}
//将数据插入哈希表
void insertHash(KeyType key,hash h){
int i=1;
int add=HashFun(key);
L:if(h->element[add].key==-1){
h->element[add].key=key;
return;
}
else{
add=(add+1)%h->MaxNum;
}
goto L; //返回到L处执行
}
//打印结果
void print(hash h){
for(int i=0;i<h->MaxNum;i++){
if(h->element[i].key==-1) i++;
cout<<"i:"<<i<<" ";
cout<<h->element[i].key<<endl;
}
}
int main(){
KeyType data[]={19,14,23,1,68,20,84,27,55,11,10,79};
hash temp=InitHashTable(13);
for(int i=0;i<sizeof(data)/sizeof(KeyType);i++){ //求KeyType类型数组的长度
insertHash(data[i],temp);
}
print(temp);
return 0;
}
散列表:从0开始到12的一个表用于存储数据
这里的输出结果为:(只输出有存储数据的散列表位置)
i:1 14
i:2 1
i:3 68
i:4 27
i:5 55
i:6 19
i:7 20
i:8 84
i:9 79
i:10 23
i:11 11
i=12 10
本文探讨了数据结构中的字典插入操作,重点介绍了哈希表的使用。通过设计哈希函数,实现平均查找长度的优化,将关键字存储在0到12的散列表中,从而提高查找效率。

2012

被折叠的 条评论
为什么被折叠?



