public class LinearProbingHashST< Key, Value>
{
   private int N;
   private int M = 16;
   private Key[] keys;
   private Value[] vals;

   public LinearProbingHashST( ) {
      keys = (Key[]) new Object[M];
      vals = (Value[]) new Object[M];
   }

   private int hash( Key key) { 
      return (key.hashCode( ) & 0x7fffffff) % M; 
   }

   private void resize( int cap) {
      LinearProbingHashST< Key, Value> t;
      t = new LinearProbingHashST< Key, Value>( cap);
      for (int i = 0; i < M; i++)
         if (keys[i] != null)
            t.put( keys[i], vals[i]);
      keys = t.keys;
      vals = t.vals;
      M = t.M;
   }

   public void put( Key key, Value val) {
      if (N >= M/2) resize(2*M);
      int i;
      for (i = hash( key); keys[i] != null; i = (i+1) % M)
         if (keys[i].equals( key)) { 
            vals[i] = val; 
            return; 
         }
      keys[i] = key;
      vals[i] = val;
      N++;
   }

   public Value get( Key key) {
      int i;
      for (i = hash( key); keys[i] != null; i = (i+1) % M)
         if (keys[i].equals( key))
            return vals[i];
      return null;
   }
}

Código adaptado de "Algorithms, 4th.ed." (p.470) de Sedgewick e Wayne

MAC0323  Estruturas de Dados

edição 2014

MAC0323 é uma disciplina obrigatória (3o. semestre) do BCC (Bacharelado em Ciência da Computação).  (O nome da disciplina deveria ser Algoritmos e Estruturas de Dados.)

 

Resultado de levantamento feito entre ex-alunos: "Quais foram as disciplinas mais importantes que você cursou no BCC?"

Valid HTML 4.01 Strict   Valid CSS!

Outros assuntos:   Estruturas de Dados  |  Exercícios de Teoria dos Grafos  |  Uma Introdução Sucinta à Teoria dos Grafos  |  Otimização Combinatória  |  Minicurso de Análise de Algoritmos  |  Análise de Algoritmos  |  O que é uma prova?  |  Projeto de Algoritmos em C  |  Algoritmos para Grafos via Sedgewick  |  Literate Programming & CWEB  |  Algoritmos de Programação Linear  |