Provided by:
manpages-pt-dev_20040726-4_all 
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,C~AO
Essas tres funcoes permitem que o usuario crie uma tabela de hash, a
qual associa uma chave com quaisquer dados.
Primeiro, a tabela precisa ser criada com a funcao hcreate(). nel e
uma uma esimativa do numero de entradas na tabela. hcreate() pode
ajustar esse valor para maior a fim de melhorar o desempenho da tabela
de hash resultante. A imnplementacao GNU de hsearch() ira, tambem,
aumnetar a tabela se a mesma ficar praticamente cheia. malloc(3) e
utilizado para alocar espaco para a tabela.
A funcao correspondente hdestroy() libera a memoria ocupada pela tabela
de hash para que uma nova tabela possa ser construida.
item e do tipo ENTRY, a qual e um 'typedef' definido em <search.h> e
inclui estes elementos:
typedef struct entry
{
char *key;
char *data;
} ENTRY;
key aponta para a string ASCII terminada em zero, a qual e uma chave de
busca. data aponta para os dados associados aquela chave. (um
apontador para um tipo diferente de caracter deve ser substituido por
um ponteiro-para-caracter ("pointer-to-character").) hserach procura na
tabela de hash um item com a mesma chave que item e se for bem
sucedido, retornara um apontador para ele. action determina o que
hsearch() fara apos uma busca infrutifera. Um valor de FIND o instrui a
inserir o novo item, enquanto um valor de FIND significa retornar
NULL.
VALOR DE RETURN
hcreate() retorna NULL se a tabela de hash nao puder ser instalada com
sucesso.
hsearch() retorna NULL se action e ENTER e nao ha memoria suficiente
para expandir a tabela hash, ou action e FIND e item nao puser ser
encontrado na tabela de hash.
EM CONFORMIDADE COM
SVID, exceto em SysV, a tabela de hash nao pode crescer.
BUGS
A implementacao so consegue gerenciar uma tabela hash por vez.
Entradas de tabela de hash individuais podem ser acrescidas, mas nao
apagadas.
EXEMPLO
O seguinte programa insere 24 itens em uma tabela de hash e entao
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 e apenas um inteiro, ao inves de um ponteiro para algo */
e.data = (char *)i;
ep = hsearch(e, ENTER);
/* nao 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 nao estao 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'EM
bsearch(3), lsearch(3), tsearch(3), malloc(3)
TRADUZIDO PELO LDP-BR EM 18.8.2000
Valter 'Geddy' Ferraz Sanches <geddy@lawyer.com> (traducao)
Revisor <revisor@revisolandia.com> (revisao)
HSEARCH(3)