Trocando um vetor por outro [REHASH]
Boa noite, eu estou fazendo uma função que dobra o valor de um vetor estático, por exemplo,
Chave * rehash(Chave vet[]){
extern int posicoes;
int maximo;
maximo = posicoes;
posicoes = posicoes*2;
Chave vet1[posicoes];
Chave *n;
Chave a;
inicializaVetor(vet1, posicoes);
int i;
for(i=0;i<maximo;i++){
n = &vet[i];
a.numero = n->numero;
a.string = n->string;
a.prox = NULL;
if(a.numero!=0) insere(a, vet1);
if(COLISAO==2){
while(n->prox!=NULL){
n = n->prox;
a.numero = n->numero;
a.string = n->string;
a.prox = NULL;
if(a.numero!=0) insere(a, vet1);
}
}
}
imprimeVetor(posicoes,vet1);
return &vet1;
}e na funcao insere:
int insere(Chave c, Chave* vet){
extern int numeroElementos, posicoes;
numeroElementos = numeroElementos+1;
float fatorCarga = (float) numeroElementos/posicoes;
printf("%f, Insere %d na chave %d\n", fatorCarga, c.numero, escolheHash(10,c));
if(fatorCarga>CARGAMAXIMA){
vet = rehash(vet);
printf("REHASH\n");
}
if(vet[escolheHash(posicoes,c)].numero==0){
vet[escolheHash(posicoes, c)] = c;
}else{
//printf("HASH: %d %d\n", escolheHash(10,c), c.numero);
tratarColisao(c, escolheHash(posicoes,c), vet, posicoes);
}
return numeroElementos;
}
Eu nunca fiz algo assim, e ele não tá funcionando, fica dando Rehash toda hora, tipo, quando ele dar a primeira rehash não pára mais de dar rehash's...
Discussão (3)
Carregando comentários...