Ir ao conteúdo

Posts recomendados

Postado

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define TAM_MAX 7

struct reg {
    int item;
    int ocupado;
};
typedef struct reg HASH;

int funcaohash(int);
void inicializa(HASH []);
void insere(HASH [], int);
int busca(HASH [], int);
void apaga(HASH [], int);
void imprime(HASH []);
int cheia(HASH []);

int hash1(int chave) {
    return abs(chave) % TAM_MAX;
}
int hash2(int chave) {
 return (abs(chave)*2) % TAM_MAX; /* o valor da função */
}

void inicializa(HASH tabHash[]) {
    int i;
    for(i=0; i<TAM_MAX; i++)
        tabHash[i].ocupado = 0; // falso
}

int insere(HASH tabHash[], int chave) {
 int i = hash1(chave);
 int k = hash2(chave);
 int cont = 0;
 /* procura a próxima posição livre */
 while (tabHash[i] != -1) {
 if (tabHash[i] == chave) return –1; /* valor já existente na tabela */
 if (++cont == TAM_MAX) return –2; /* tabela cheia */
 i = (i + k) % TAM_MAX; /* tabela circular */
 }
 /* achamos uma posição livre */
 tabHash[i] = chave;
 return i;
}

// Retorna -1 se não encontrou ou a posição caso encontre o item
int busca(HASH tabHash[], int chave) { // Recuperando um elemento
 int i = hash1(chave);
 int k = hash2(chave);
 int cont = 0 ;
 /* procura x a partir da posição i */
 while (tabHash[i] != chave) {
 if (tabHash[i] == -1) return –1; /* não achou x, pois há uma vazia */
 if (++cont == TAM_MAX) return –2; /* a tabela está cheia */
 i = (i + k) % TAM_MAX; /* tabela circular */
 }
 /* encontrou */
 return i;
}

void apaga(HASH tabHash[], int chave) {
    int pos = busca(tabHash,chave);
    if (pos!=-1) {
        tabHash[pos].ocupado=0;
        printf("-> Dados HASH[%d] apagados",pos);
    }
    else printf("Item não encontrado");
}

void imprime(HASH tabHash[]) {
    int i;
    for (i=0; i<TAM_MAX; i++)
        if( tabHash[i].ocupado == 1)
            printf("\nCampo [%d] = %.2f",i,tabHash[i].item);
}

int cheia(HASH tabHash[]) {
    int i, qtde=0;
    for (i=0; i<TAM_MAX; i++)
        if( tabHash[i].ocupado == 1)
            qtde++;
    if (qtde == TAM_MAX) return 1;
    else return 0;
}


main() {
    int i, pos;
    HASH tab[TAM_MAX]; // criando tabela na memoria
    float item;
    inicializa(tab);

    // Inserindo elementos (USUARIO)
    printf("\n*************************************************************\n");
     printf("Tabela HASH com tratamento de colisoes linear (7 itens reais)");
    printf("\n*************************************************************");
    int c;
    while (1) {
      printf("\nDigite uma opcao\n");
      printf("[1]Inserir elemento na tabela\n[2]Procurar elemento na tabela\n[3]Deletar elemento na tabela\n[4]Imprimir\n[5]Sair\n\n");
      scanf("%d",c);
        switch(c) {
         case 1:
            printf("Informe o elemento a ser inserido: ");
            scanf("%f",&item);
            insere(tab,item);
            break;


    case 2:
            printf("\nForneca o item: ");
    scanf("%f",&item);
    pos=busca(tab,item);
    if (pos!=-1)
        printf("Item %.2f encontrado na posicao %d", tab[pos].item,pos);
    else printf("Item não encontrado");
    break;

    case 3:
    printf("\n\Informe o item a ser deletado ");
    scanf("%f",&item);
    apaga(tab,item);
    break;

    case 4:
    printf("\n\nImprimindo conteudo");
    imprime(tab);

    break;
         case 5:
            exit(1);
         default:
            printf("\nEsta opcao não existe. \n");
      }


}

}
 

Postado

@Diogo Moreira Franco  então tire aquele #include de lá... Não vai compilar assim

 

E devida se insere() retorna void ou int.

 

HASH pode ser anônima. Não precisa de reg....

 

struct reg
{
    int item;
    int ocupado;
};
typedef struct reg HASH;

 

Devia ser

 

typdef struct
{
    int item;
    int ocupado;

}   HASH;

 

Isso

 

    while (tabHash[i] != -1)
    {
        if (tabHash[i] == chave)

 

está errado. tabHash é HASH[] e não pode comparar com -1.....

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...