Buscar libros usando la tabla hash
# include & ltstring& gt
Usar espacio de nombres std
#define HASH_LENGTH 50 //La longitud de la tabla hash
#Definition M 47 //Número aleatorio
#Definición name_number 30 //Número de nombres
estructura typedef
{ char * py// El pinyin del nombre
int k; //El número entero correspondiente al pinyin
}Nombre;
NOMBRE NOMBRE lista[HASH _ LENGTH];/ /Nombre de la variable global
Estructura Typedef //Tabla hash
{ char * py//El pinyin del nombre
int k; al pinyin
int si//Buscar longitud
}Hash;
HASH HashList[HASH _ LENGTH] //Hash de variable global
;Void InitNameList() // inicialización del nombre (matriz de estructura)
{ char * f;
int r, s0, I;
for( I = 0;i<hashlength;i++)//★
{//★
lista[i]. py = nuevo carácter[64]; //★
Lista[i]. py[0]= 0; //★
}//★
strcpy(lista de nombres[0]). py, "Jie Bao"); //★
strcpy (lista de nombres [1]). py, "成高阳"); //★
strcpy(lista de nombres[2]). py, "Chen Guangzhong"); //★
strcpy (lista de nombres [3]). py, "Chen Liangliang"); //★
strcpy (lista de nombres [4]). py, "Chen Yongzhou"); //★
strcpy (lista de nombres [5]). py, "Nido de Fénix"); //★
strcpy (lista de nombres [6]). py, "Ge Xiangfeng"); //★
strcpy (lista de nombres [7]). py, "Hu Ting"); //★
strcpy(lista de nombres[8]). py, "Huangpinjin"); //★
strcpy (lista de nombres [9]). py, "Jiang Xiaojia"); //★
strcpy(lista de nombres[10]). py, "Lai Dongjie"); //★
strcpy(lista de nombres[11]). py, "establecer una carrera y reír"); //★
strcpy(lista de nombres[12]). py, "Li Dao Hui"); //★
strcpy(lista de nombres[13]). py, "Li Jue"); //★
strcpy(lista de nombres[14]). py, "Li Zhuoqun"); //★
strcpy(lista de nombres[15]). py, "Lin Fujun"); //★
strcpy (lista de nombres [16]). py, "Robin"); //★
strcpy(lista de nombres[17]). py, "Luo Keqing"); //★
strcpy (lista de nombres [18]). py, "Ni Chao"); //★
stracpy (lista de nombres [19]). py, "Pan Huafeng"); //★
Lista[20]. py, "Cuatro Señores"); //★
strcpy (lista de nombres [21]). py, "Songzhanhui"); //★
Lista[22]. py, "Sun Zhengqing"); //★
Lista[23]. py, "Wang Haofeng"); //★
Lista[24].
py, "Wang Junshuai"); //★
Lista[25]. py, "Wang Qinde"); //★
Lista[26]. py, "Wang Zejun"); //★
Lista[27]. py, "Wang Keke"); //★
Lista[28]. py, "Wei Xing"); //★
Lista[29]. py, "五人客"); //★
for(I = 0;I<NAME_NOi++)
{
s0 = 0;
f = lista de nombres[i]. py;
for(r = 0;*(f+r)!='\0';r++)
/*Método: convierte cada carácter de la cadena a códigos ASCII se suman y el entero resultante se utiliza como clave de la tabla hash */
s0 = *(f+r)+s0;
List[i]. k = s0
}
}
Void CreateHashList() //Crear una tabla hash
{
int I;
for(I = 0; i & lthash length; i++)
{
HashList[i]. py = nuevo carácter[64]; //★
HashList[i]. py[0]= 0; //★
HashList[i]. k = 0;
HashList[i]. si = 0;
}
for(I = 0; i<hash length; i++)
{
int suma = 0;
int adr=(NameList[i].k)% M;
//Función hash
int d = adr p>
If(HashList[adr].si==0) //Si no hay conflicto,
{
HashList[adr]. k = lista de nombres[i]. k;
HashList[adr]. py=Lista de nombres[i]. py;
HashList[adr]. si = 1;
}
Else //Conflicto
{
mientras (HashList[d].k!=0)
{
d = (d+name list[i].k % 11)% M //Método de repetición de detección pseudoaleatoria para manejar conflictos
suma = suma+1; //Suma 1 al número de búsquedas
};
HashList[d]. k = lista de nombres[i]. k;
HashList[d]. py=Lista de nombres[i]. py;
HashList[d]. si = suma+1;
}
}
}
Void FindList() //Buscar
{
Nombre de cadena;
int s0=0, r, sum=1, adr, d;
cout & lt& lt"Ingrese su Pinyin de nombre: "
CIN>>Name;;
for(r = 0;r<20;R++) //Encuentra el número entero correspondiente al pinyin del nombre (carácter clave).
s= nombre[r];
ADR = s0 % M; //Usar función hash
d = adr
Si (HashList[adr].k==s0) //Juzga en tres situaciones.
cout & lt& lt"nombre:"
else if (HashList[adr].k==0)
cout & lt& lt"No existe tal registro ”& lt& ltendl
Otro
{
int g = 0;
mientras(g==0) p >
{
d =(d+s0 % 11)% M; //Método de repetición de detección pseudoaleatoria para manejar conflictos
sum = sum+ 1;
if(HashList[d].k==0)
{
cout & lt& lt"¡No existe tal registro!"& lt& ltendl
g = 1;
}
if(HashList[d].k==s0)
{
cout & lt& lt"Nombre:"
g = 1;
}
};
}
}
Void Display() //Mostrar tabla hash
{
int I;
Promedio flotante = 0;
cout & lt& lt"\nDirección\Palabra clave\t\t\Longitud de búsqueda\th(clave)\tNombre\n" //Formato de visualización
for(I = 0;i<50; i++)
{
cout & lt& ltI& lt& lt" ";
cout & lt& lt" \ t " & lt& ltHashList[i]. k & lt& lt" ";
cout & lt& lt" \ t \ t " & lt& ltHashList[i]. si & lt& lt" ";
cout & lt& lt" \ t \ t " & lt& lt(HashList[i].k % M)& lt;& lt" ";
cout & lt& lt" \ t " & lt& ltHashList[i]. py & lt& lt" ";
cout & lt& lt"\n";
}
for(I = 0;i<hash longitud ;i++)
promedio+=HashList[i]. si;
average/= NAME_NO;
cout & lt& lt"Longitud promedio de búsqueda: lenguaje de signos americano ("
}
int main()
{
char x;
init name list();
crear hashlist();
p>
cout & lt& ltd. Mostrar tabla hash f. Encuentre cualquier clave para salir, seleccione
while(CIN>>x)
{ p >
if(x=='d ')
{
display();
cout & lt& ltendl
}
else if(x=='f ')
{
FindList();
cout & lt& ltendl< / p>
}
else break
}
for(int I = 0; i & lt longitud del hash; i++) //★
{
Gratis (lista[i].
py); //★
free(HashList[i].py); //★
}//★
Devuelve 0;
}