1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
.TH HSEARCH 3
.SH NOME
hcreate, hdestroy, hsearch \- gerencimento de tabela de 'hash'
.SH SINOPSE
.nf
.B #include <search.h>
.sp
.BI "ENTRY *hsearch(ENTRY " item ", ACTION " action ");"
.sp
.BI "int hcreate(unsigned "nel ");"
.sp
.B "void hdestroy(void);"
.RE
.fi
.SH DESCRIO
Essas trs funes permitem que o usurio crie uma tabela de hash, a qual associa uma chave com quaisquer dados.
.PP
Primeiro, a tabela precisa ser criada com a funo \fBhcreate()\fP.
\fInel\fP uma uma esimativa do nmero de entradas na tabela.
\fBhcreate()\fP pode ajustar esse valor para maior a fim de melhorar o
desempenho da tabela de hash resultante. A imnplementao GNU de
\fBhsearch()\fP ir, tambm, aumnetar a tabela se a mesma ficar
praticamente cheia.
\fBmalloc\fP(3) utilizado para alocar espao para a tabela.
.PP
A funo correspondente \fBhdestroy()\fP libera a memria ocupada pela
tabela de hash para que uma nova tabela possa ser construda.
.PP
\fIitem\fP do tipo \fBENTRY\fP, a qual um 'typedef' definido em
\fI<search.h>\fP e inclui estes elementos:
.sp
.nf
typedef struct entry
{
char *\fIkey\fP;
char *\fIdata\fP;
} ENTRY;
.fi
.sp
\fIkey\fP aponta para a string ASCII terminada em zero, a qual uma
chave de busca. \fIdata\fP aponta para os dados associados quela chave.
(um apontador para um tipo diferente de caracter deve ser substitudo por
um ponteiro-para-caracter ("pointer-to-character").) \fBhserach\fP
procura na tabela de hash um item com a mesma chave que \fIitem\fP e se
for bem sucedido, retornar um apontador para ele. \fIaction\fP determina
o que \fBhsearch()\fP far aps uma busca infrutfera. Um valor de \fBFIND\fP o instrui a inserir o novo
item, enquanto um valor de \fBFIND\fP significa retornar \fBNULL\fP.
.SH "VALOR DE RETURN"
\fBhcreate()\fP retorna \fBNULL\fP se a tabela de hash no puder ser instalada com sucesso.
.PP
\fBhsearch()\fP retorna \fBNULL\fP se \fIaction\fP \fBENTER\fP e no h memria suficiente para
expandir a tabela hash, ou \fIaction\fP \fBFIND\fP e \fBitem\fP no puser ser encontrado na tabela de
hash.
.SH "EM CONFORMIDADE COM"
.TP
SVID, exceto em SysV, a tabela de hash no pode crescer.
.SH BUGS
A implementao s consegue gerenciar uma tabela hash por vez.
Entradas de tabela de hash individuais podem ser acrescidas, mas no apagadas.
.SH EXEMPLO
.PP
O seguinte programa insere 24 itens em uma tabela de hash e ento imnprime alguns deles.
.nf
#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 invs de um ponteiro para algo */
e.data = (char *)i;
ep = hsearch(e, ENTER);
/* no 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 no esto 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;
}
.fi
.SH "VEJA TAMBM"
.BR bsearch "(3), " lsearch "(3), " tsearch "(3), " malloc "(3)"
.SH "TRADUZIDO PELO LDP-BR EM 18.8.2000"
\&\fR\&\f(CWValter 'Geddy' Ferraz Sanches <geddy@lawyer.com> (traduo)\fR
.fi
\&\fR\&\f(CWRevisor <revisor@revisolandia.com> (reviso)\fR
|