other languages
| HSEARCH(3) | Library Functions Manual | HSEARCH(3) |
NOME¶
hcreate, hdestroy, hsearch - gerencimento de tabela de 'hash'SINOPSE¶
#include <search.h>ENTRY *hsearch(ENTRY item, ACTION action);int hcreate(unsigned nel);void hdestroy(void);
DESCRIÇÃO¶
Essas três funções permitem que o usuário crie uma tabela de hash, a qual associa uma chave com quaisquer dados. Primeiro, a tabela precisa ser criada com a função hcreate(). nel é uma uma esimativa do número de entradas na tabela. hcreate() pode ajustar esse valor para maior a fim de melhorar o desempenho da tabela de hash resultante. A imnplementação GNU de hsearch() irá, também, aumnetar a tabela se a mesma ficar praticamente cheia. malloc(3) é utilizado para alocar espaço para a tabela. A função correspondente hdestroy() libera a memória ocupada pela tabela de hash para que uma nova tabela possa ser construída. item é do tipo ENTRY, a qual é um 'typedef' definido em <search.h> e inclui estes elementos: typedef struct entry
{
char * key;
char * data;
} ENTRY;
VALOR DE RETURN¶
hcreate() retorna NULL se a tabela de hash não puder ser instalada com sucesso. hsearch() retorna NULL se action é ENTER e não há memória suficiente para expandir a tabela hash, ou action é FIND e item não puser ser encontrado na tabela de hash.EM CONFORMIDADE COM¶
- SVID, exceto em SysV, a tabela de hash não pode crescer.
BUGS¶
A implementação só consegue gerenciar uma tabela hash por vez. Entradas de tabela de hash individuais podem ser acrescidas, mas não apagadas.EXEMPLO¶
O seguinte programa insere 24 itens em uma tabela de hash e então imnprime alguns deles.
#include <stdio.h>
#include <search.h>
char *data[]={ "alpha", "bravo", "charlie", "delta",
"echo", "foxtrot", "golf", "hotel", "india", "julliete",
"kilo", "lima", "mike", "november", "oscar", "papa",
"quebec", "romeo", "sierra", "tango", "uniform",
"victor, "whiskey", "x-ray", "yankee", "zulu"
};
int main()
{
ENTRY e, *ep;
int i;
/* inicia com uma tabela pequena e permite-lhe crescer */
hcreate(3);
for (i = 0; i < 24; i++)
{
e.key = data[i];
/* data é apenas um inteiro, ao invés de um ponteiro para algo */
e.data = (char *)i;
ep = hsearch(e, ENTER);
/* não deve haver falhas */
if(ep == NULL) {fprintf(stderr, "entry failed\n"); exit(1);}
}
for (i = 22; i < 26; i++)
/* imprime duas entradas vindas da tabela e mostra
as duas que não estão na tabela */
{
e.key = data[i];
ep = hsearch(e, FIND);
printf("%9.9s -> %9.9s:%d\n, e.key, ep?ep->key:"NULL",
ep?(int)(ep->data):0);
}
return0;
}
VEJA TAMBÉM¶
bsearch(3), lsearch(3), tsearch(3), malloc(3)TRADUZIDO PELO LDP-BR EM 18.8.2000¶
Valter 'Geddy' Ferraz Sanches <geddy@lawyer.com> (tradução)Revisor <revisor@revisolandia.com> (revisão)