La Red de Conocimientos Pedagógicos - Aprendizaje de redacción de artículos/tesis - Buscar libros usando la tabla hash

Buscar libros usando la tabla hash

# include & ltiostream & gt

# 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

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)

{

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)

{

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;

}