
ericio
(usa Puppy Linux)
Enviado em 08/07/2011 - 20:52h
Como que eu faço para, ao invés de inserir inteiros no dicionario, inserir várias
palavras de tamanho até 16. E pesquisá-las por busca binária.
Eu fiz para inteiros, mas não sei como fazer para char.
#define Maxn 10
typedef long TipoChave;
typedef struct Registro {
TipoChave Chave;
/* outros componentes */
} Registro;
typedef int Indice;
typedef struct Tabela {
Registro Item[Maxn + 1];
Indice n;
} Tabela;
void Inicializa(Tabela *T)
{ T->n = 0;
}
void Insere(Registro Reg, Tabela *T)
{ if (T->n == Maxn)
printf("Erro : tabela cheia\n");
else
{ T->n++;
T->Item[T->n] = Reg;
}
}
Indice Binaria(TipoChave x, Tabela *T)
{ Indice i, Esq, Dir;
if (T->n == 0)
return 0;
else
{ Esq = 1;
Dir = T->n;
do
{ i = (Esq + Dir) / 2;
if (x > T->Item[i].Chave)
Esq = i + 1;
else
Dir = i - 1;
} while (x != T->Item[i].Chave && Esq <= Dir);
if (x == T->Item[i].Chave)
return i;
else
return 0;
}
}
int main(int argc, char *argv[])
{
Tabela T;
Registro reg;
TipoChave vetor[Maxn+1];
Indice pos;
int i;
Inicializa(&T);
/* Insere as chaves ordenas tabela */
for (i = 1; i <= Maxn; i++)
{ vetor[i] = i;
reg.Chave = vetor[i];
Insere(reg, &T);
printf("Inseriu: %ld\n", vetor[i]);
}
/* Pesquisa Binaria em cada chave */
printf("Pesquisa Binaria (chaves ordenadas)\n");
for (i = 1; i <= Maxn; i++) {
pos = Binaria(i, &T);
if (pos == 0)
{ printf("Pesquisa Falhou\n");
return 0;
}
printf("Registro %d na posicao: %d\n", i, pos);
}
return 0;
}