c diccionarios y tablas hash
# incluir ltstdio.h gt
# incluir ltmalloc.h gt
# incluir ltstring.h gt
//#include
#define HASH_LEN 50 //La longitud de la tabla hash
#Define M 47
#Define name_number 30 //Número de nombres
nombre de estructura typedef
{
char * py//El pinyin del nombre
int k //El número entero correspondiente al pinyin
}Nombre;
NOMBRE NOMBRE lista[HASH_LEN];
Estructura Typedef hterm //Tabla hash
{
char * py//El pinyin del nombre
int k; //El entero correspondiente al pinyin
int si//La longitud de la búsqueda
}Hash;
HASH HashList[HASH _ LEN];
/* - inicialización del nombre (matriz de estructura).
void InitNameList()
{
NameList[0]. py = " chenghongxiu
Lista de nombres[1].py= "Yuanhao";
Lista[2].py= "Yang Yang";
Lista [3]. py = " zhanghen
Lista[4]. py = " chenghongxiu
Lista[5].py= "Xiao Kai";
Lista[6].py= "Liu Peng";
Lista [7]. py= "Shen Yonghai";
Lista[8]. py="Chengdaoquan";
Lista[9]. py= "Gong Yunxiang";
Lista[11]. py= "Sun Zhenxing";
Lista[12]. py= "Sun Rongfei";
Lista[13]. py= "Sun Minglong";
Lista[14]. py= "Zhang Hao";
Lista[15]. py= "Tian Miao";
Lista[16]. py= "Yao Jianzhong";
Lista[17]. py = " yaojianqing
Lista[18].py= "Yao Jianhua";
Lista[19].py= "Yao Haifeng";
Lista [ 20]. py = " chengyanhao
Lista de nombres[21]. py= "Gloria Viento de Otoño";
Lista[22]. py= "Qian Pengcheng";
Lista[23]. py= "Yao Haifeng";
Lista[24]. py = " bianyan
Lista[25].py= "Lei Ling";
Lista[26].py= "Fuzhonghui";
Lista[ 27].py = " huanhaiyan
Lista[28]. py = " liudianqin
Lista[29].py = "Wang Binnian";
char * f;
int r, s0;
for(int I = 0; I ltNAME _ NOI)//Encuentra el número entero correspondiente al pinyin de cada nombre.
{
s0 = 0;
f = lista de nombres[i]. py;
for(r = 0; *(f r)!= '\0'; R ) //Método: Suma los códigos ASCII correspondientes a cada carácter de la cadena y se utiliza el entero resultante como hash La clave de la tabla hash.
s0 = *(f r) s0;
Lista[i]. k = s0
}
}
/* -Construir una tabla hash*/
void CreateHashList()
{
for(int I = 0; I lt hash_length; I)//Inicialización de la tabla hash
{
HashList [i]. py =
HashList[i]. k = 0;
HashList[i]. si = 0;
}
for(I = 0; iltNAME_NO)
{
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;
}
De lo contrario //Conflicto
{
Hacer
{
d=(d ((name list[i]).k)) 10 1) M; //Pseudo hash
suma = suma 1 //Suma 1 al número de búsquedas. p>
}mientras (HashList[d].k!=0);
HashList[d]. k = lista de nombres[i]. k;
HashList[d]. py=Lista de nombres[i]. py;
HashList[d]. si = suma 1;
} i
}
}
/* - Buscar.
void FindList()
{
printf("\n \nIngrese el pinyin de su nombre: " //Ingrese un nombre); p> p>
char nombre[20]= { 0 };
scanf("s ", nombre);
int s0 = 0;
for(int r = 0; r lt20; R) // Encuentra el número entero (palabra clave) correspondiente al pinyin del nombre.
s0 = nombre[r];
int suma = 1;
int ADR = s0 M; //Usar función hash
>int d = adr
If(HashList[adr].k==s0) //Juzga en tres situaciones.
printf(" \nNombre: s Palabra clave: d Longitud de búsqueda: 1 ", HashList[d].
py, s0);
else if (HashList[adr].k==0)
Printf("¡No existe tal registro!");
Otros
{
int g = 0;
Hacer
{
d =(d s0 10 1 ) M; //Pseudo hash
suma = suma 1;
if (HashList[d].k==0)
{ p>
Printf("¡Sin registro!");
g = 1;
}
if (HashList[d].k== s0)
{
printf("\nNombre: s Palabra clave: d Longitud de búsqueda: d ", HashList[d].py, s0, sum);
g = 1;
}
} mientras(g = = 0);
}
} p>
/* - Muestra la tabla hash.
Pantalla vacía()
{
printf(" \ n \ n dirección \ t palabra clave \ t \ tLongitud de búsqueda \ th(clave)\ t \ t pinyin \ n "); //Formato de visualización
for(int I = 0; i lt15; i)
{
printf(" d ",I);
printf("\td ",HashList[i].k);
printf("\t\td ",HashList[i].si ) ;
printf("\t\td ", (HashList[i]).k) M);
printf("\t s ", HashList[i].py ) ;
printf(" \ n ");
}
// printf("Presione cualquier tecla para continuar con la visualización...\ n "); //Debido a que hay muchos datos, se muestran en pantalla dividida (para que todos los datos se puedan ver en Win9x/DOS).
//getch();
for(I = 15;ilt30;i)
{
printf("d " ,I);
printf("\td ",HashList[i].k);
printf("\t\td ",HashList[i].si) ;
printf("\t\td ",(HashList[i]).k) M);
printf("\t s ",HashList[i].py) ;
printf(" \ n ");
}
// printf("Presione cualquier tecla para continuar con la visualización...\ n "); /p>
//getch();
for(I = 30;ilt40;i)
{
printf("d ", I);
printf("\td ",HashList[i].k);
printf("\t\td ",HashList[i].si); /p>
printf("\t\td ", (HashList[i]).k) M
printf("\t s ", HashList[i].
py);
printf(" \ n ");
}
//printf("Presione cualquier tecla para continuar con la visualización...\ n " ) ;
//getch();
for(I = 40; i lt50; i )
{
printf( " d ",I);
printf("\td ",HashList[i].k);
printf("\t\td ",HashList[i]. si );
printf("\t\td ", (HashList[i]).k) M);
printf("\t s ", HashList[i]. py );
printf(" \ n ");
}
Promedio flotante = 0
for(I = 0; ;ilthash_length;i )
promedio =HashList[i]. si;
promedio/= NOMBRE_NO;
printf("\n\nLongitud promedio de búsqueda: ASL (d) = f\n\n", nombre_no, promedio); p>
}
/* - Función principal.
void main()
{
/*::setconsolettitle("Operación de tabla hash"); //Función API de Windows para configurar el título de la ventana de la consola. .
HANDLE hCon =::GetStdHandle(STD_OUTPUT_HANDLE); //Obtiene el identificador del dispositivo de salida estándar
* SetConsoleTextAttribute(hCon, 10 | 0);
*/
Printf ("\ n -Creación y búsqueda de tablas hash");
init name list();
crear lista hash();
mientras(1)
{
printf(" \ n \ n ");
Printf( " 1. Mostrar tabla hash\ n ");
Printf(" 2. Buscar\ n "
Printf(" 3. Salir\ n ");
Error:
char ch 1;
scanf("c ", ampch 1);
if (ch1== '1 ')
Display();
si no (ch1=='2 ')
FindList();
si no (ch1 =='3 ')
Regresar;
Otros
{
printf("\n¡Ingrese la opción correcta! ");
ir a err
}
}
}