Ir ao conteúdo
  • Cadastre-se

Diogo Moreira Franco

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

posts postados por Diogo Moreira Franco

  1. #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");
          }


    }

    }
     

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!