Vous êtes sur la page 1sur 18

[Escribir el nombre de la compaa]

ESTRUCTURA DE DATOS II
Practica tablas de dispersin

13

PRACTICA TABLAS DE DISPERSIN. Ejercicio 1:


Mtodo de multiplicacin: package Ejercicio1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class DispersionHash { static final int M = 1024; static final double R = 0.618034; static long transformaClave(String clave) { long d; d = 0; for (int j = 0; j < Math.min(clave.length(), 10); j++) { d = d * 27 + (int) clave.charAt(j); } if (d < 0) { d = -d; } return d; } static int dispersion(long x) { double t; int v; t = R * x - Math.floor(R * x); v = (int) (M * t); return v; } public static void main(String args[])throws IOException{ String clave; long valor; BufferedReader entrada=new BufferedReader( new InputStreamReader(System.in)); for (int k = 1; k < 10; k++) { System.out.print("\nClave a dispersar: "); clave=entrada.readLine(); valor=transformaClave(clave); valor=dispersion(valor); System.out.println("Dispersion de la clave "+ clave+"\t"+valor); } } } Respuesta:

Ejercicio 2:
Mtodo de aritmtica modular: package Ejercicio2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class DispersionHashAritMod { static final int M = 1024; static final double R = 0.618034; static long transformaClave(String clave) { long d; d = 0; for (int j = 0; j < Math.min(clave.length(), 10); j++) { d = d * 27 + (int) clave.charAt(j); } if (d < 0) { d = -d; } return d; } static int dispersionAritMod(long x) { int v; v = (int) (x % M); return v; } public static void main(String args[]) throws IOException { String clave; long valor; BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in)); for (int k = 1; k < 10; k++) { System.out.print("\nClave a dispersar: "); clave = entrada.readLine(); valor = transformaClave(clave); valor = dispersionAritMod(valor);

System.out.println("Dispersion de la clave " + clave + "\t" + valor); } } } Respuesta:

Mtodo de plegamiento: package Ejercicio2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class DispersionHashPlegamiento { static final int M = 1024; static final double R = 0.618034; static long transformaClave(String clave) { long d; d = 0; for (int j = 0; j < Math.min(clave.length(), 10); j++) { d = d * 27 + (int) clave.charAt(j); } if (d < 0) { d = -d; } return d; } static int dispersionPlegamiento(long x) { int v=0; long auxx=x; while(auxx>0){ v=(int)(v+auxx%100);//obtengo los dos ultimos numeros. auxx=auxx/100;//voy sumando de dos en dos digitos los numeros. }

v=(int)(v%M); return v; } public static void main(String args[]) throws IOException { String clave; long valor; BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in)); for (int k = 1; k < 10; k++) { System.out.print("\nClave a dispersar: "); clave = entrada.readLine(); valor = transformaClave(clave); valor = dispersionPlegamiento(valor); System.out.println("Dispersion de la clave " + clave + "\t" + valor); } } } Respuesta:

Mtodo de mitad del cuadrado: package Ejercicio2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class DispersionHashMitadCuadrado { static final int M = 1024; static final double R = 0.618034; static long transformaClave(String clave) { long d; d = 0; for (int j = 0; j < Math.min(clave.length(), 10); j++) { d = d * 27 + (int) clave.charAt(j); }

if (d < 0) { d = -d; } return d; } static int dispersionMitadCuadrado(long x) { int v=0; long m=x*x; long n=(m/10);//quito el ultimo digito v=(int)(n%M);//elijo los tres ultimos digitos que esten dentro del rango de M if(v<0){ v=-v; } return v; } public static void main(String args[]) throws IOException { String clave; long valor; BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in)); for (int k = 1; k < 10; k++) { System.out.print("\nClave a dispersar: "); clave = entrada.readLine(); valor = transformaClave(clave); valor = dispersionMitadCuadrado(valor); System.out.println("Dispersion de la clave " + clave + "\t" + valor); } } } Respuesta:

Ejercicio 3:
package Ejercicio3; import java.io.BufferedReader; import java.io.InputStreamReader;

public class CasaRural { private String codigo; private String poblacion; private String direccion; private int numHabitacion = 0; private double precio = 0.0; boolean esAlta; public CasaRural() { esAlta = true; asigna(); } public void asigna() { BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in)); try { System.out.print("\n Codigo (5 caracteres): "); codigo = entrada.readLine(); System.out.print("\n Poblacion: "); poblacion = entrada.readLine(); System.out.print("\n Direccion: "); direccion = entrada.readLine(); System.out.print("\n Numero de habitaciones: "); numHabitacion = Integer.parseInt(entrada.readLine()); System.out.print("\n Precio por dia de estancia: "); precio = (new Double(entrada.readLine()).doubleValue()); } catch (Exception e) { System.out.println(" Excepcion en la entrada de datos " + e.getMessage() + " . No se da de alta"); esAlta = false; } } public String elCodigo() { return codigo; } public void muestra(){ System.out.println("\n Casa Rural: "+codigo); System.out.println("\n Poblacion: "+poblacion); System.out.println("\n Direccion: "+direccion); System.out.println("\n Numero de habitaciones: "+numHabitacion); System.out.println("\n Precio por dia: "+precio); } } ******************************************************************************** package Ejercicio3; public class TablaDispersa { static final int TAMTABLA = 101; private int numElementos;

private double factorCarga; private CasaRural[] tabla; public CasaRural[] getTabla() { return tabla; } public int getNumElementos() { return numElementos; } public TablaDispersa() { tabla = new CasaRural[TAMTABLA]; for (int j = 0; j < TAMTABLA; j++) { tabla[j] = null; numElementos = 0; factorCarga = 0.0; } } public int direccion(String clave) { int i = 0, p; long d; d = transformaCadena(clave); p = (int) (d % TAMTABLA); while (tabla[p] != null && !tabla[p].elCodigo().equals(clave)) { i++; p = p + i * i; p = p % TAMTABLA; } return p; } long transformaCadena(String c) { long d; d = 0; for (int j = 0; j < Math.min(10, c.length()); j++) { d = d * 27 + (int) c.charAt(j); } if (d < 0) { d = -d; } return d; } public void insertar(CasaRural r) { int posicion; posicion = direccion(r.elCodigo()); tabla[posicion] = r; numElementos++; factorCarga = (double) (numElementos) / TAMTABLA; if (factorCarga > 0.5) { System.out.println("\n!! Factor de carga supera el 50%.!!" + " Conviene aumentar el tamao.");

} } public CasaRural buscar(String clave) { CasaRural pr; int posicion; posicion = direccion(clave); pr = tabla[posicion]; if (pr != null) { if (!pr.esAlta) { pr = null; } } return pr; } public void eliminar(String clave) { int posicion; posicion = direccion(clave); if (tabla[posicion] != null) { tabla[posicion].esAlta = false; } } } ******************************************************************************** package Ejercicio3; import java.util.Scanner; public class CasasRurales { private TablaDispersa td = null; private Scanner s = null; public CasasRurales() { td = new TablaDispersa(); } public int menu() { s = new Scanner(System.in); int opc = -1; System.out.println("*************MENU**************"); System.out.println("<0>...SALIR"); System.out.println("<1>...Insertar Registro"); System.out.println("<2>...Buscar Registro"); System.out.println("<3>...Mostrar Todos los Registro"); System.out.println("<4>...Eliminar Registro"); System.out.print("Ingrese el NUMERO de la opcion: "); try{ opc = s.nextInt(); } catch(Exception e){ System.out.println("Ingrese el numero de la opcion..."); }

return opc; } private void insertarRegistro() { CasaRural cr = new CasaRural(); td.insertar(cr); } private void eliminarRegistro() { s = new Scanner(System.in); System.out.print("Ingrese codigo a eliminar (5 caracteres): "); String codigo = s.nextLine(); td.eliminar(codigo); } private void buscarRegistro() { s = new Scanner(System.in); System.out.print("Ingrese codigo a buscar (5 caracteres): "); String codigo = s.nextLine(); CasaRural craux=td.buscar(codigo); if(craux!=null){ craux.muestra(); } else{ System.out.println("No se ha encontrado un Registro con este codigo..."); } } private void mostrarTodo() { int cont=0; for (int i = 0; i < td.getTabla().length; i++) { if (td.getTabla()[i] != null) { if (td.getTabla()[i].esAlta) { cont++; System.out.println("\nREGISTRO N"+cont+":"); td.getTabla()[i].muestra(); } } } } public static void main(String[] args) { CasasRurales cr = new CasasRurales(); while (true) { switch (cr.menu()) { case 1: cr.insertarRegistro(); break; case 2: cr.buscarRegistro(); break; case 3: cr.mostrarTodo();

break; case 4: cr.eliminarRegistro(); break; case 0: System.exit(0); break; } } } } Resultado: Insertar:

Buscar:

Mostrar todos:

Eliminar y buscar:

Salir:

Ejercicio 4:
package Ejercicio4; public class TipoSocio { class Fecha { int dia; int mes; int anno; Fecha(int d, int m, int a) { dia = d; mes = m; anno = a; } public String toString() { return " " + dia + "-" + mes + "-" + anno; } }; int codigo; private String nombre; private int edad; Fecha f; public String elNombre(){ return nombre; } public TipoSocio(String n,int c,int e,int d,int m, int a){ codigo=c; nombre=n; edad=e; f=new Fecha(d,m,a); } public int getCodigo(){ return codigo; } public String toString(){ return nombre+", "+edad+" aos, codigo "+codigo+", "+f; } } ******************************************************************************** package Ejercicio4; public class Elemento { TipoSocio socio; Elemento sgte; public Elemento(TipoSocio e){ socio=e; sgte=null; } public TipoSocio getSocio(){ return socio;

} } ******************************************************************************** package Ejercicio4; public class TablaDispersaEnlazada { static final int M = 101; static final double R = 0.618034; static int dispersion(long x) { double t; int v; t = R * x - Math.floor(R * x); v = (int) (M * t); return v; } private Elemento[] tabla; private int numElementos; public TablaDispersaEnlazada() { tabla = new Elemento[M]; for (int k = 0; k < M; k++) { tabla[k] = null; } numElementos = 0; } public void insertar(TipoSocio s) { int posicion; Elemento nuevo; posicion = dispersion(s.codigo); nuevo = new Elemento(s); nuevo.sgte = tabla[posicion]; tabla[posicion] = nuevo; numElementos++; } public void eliminar(int codigo) { int posicion; posicion = dispersion(codigo); if (tabla[posicion] != null) { Elemento anterior, actual; anterior = null; actual = tabla[posicion]; while ((actual.sgte != null) && actual.getSocio().getCodigo() != codigo) { anterior = actual; actual = actual.sgte; } if (actual.getSocio().getCodigo() != codigo) { System.out.println("No se encuentra en la tabla el socio " + codigo); } else if (conforme(actual.getSocio())) { if (anterior == null) {

tabla[posicion] = actual.sgte; } else { anterior.sgte = actual.sgte; } actual = null; numElementos--; } } } boolean conforme(TipoSocio a) { System.out.println("Socio: " + a); System.out.print("Pulsa S\\N: "); try { char r = (char) System.in.read(); if (r == 'S' || r == 's') { return true; } else { return false; } } catch (Exception e) { return false; } } public Elemento buscar(int codigo){ Elemento p=null; int posicion; posicion=dispersion(codigo); if(tabla[posicion]!=null){ p=tabla[posicion]; while((p.sgte!=null)&&p.socio.codigo!=codigo){ p=p.sgte; } if(p.socio.codigo!=codigo){ p=null; } } return p; } } ******************************************************************************** package Ejercicio4; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class RegistroSocios { private TablaDispersaEnlazada tde = null; private Scanner s = null; public RegistroSocios() {

tde = new TablaDispersaEnlazada(); } public int menu() { s = new Scanner(System.in); int opc = -1; System.out.println("**************MENU***************"); System.out.println("<0>...SALIR"); System.out.println("<1>...Insertar Registro de Socios"); System.out.println("<2>...Buscar Registro de Socios"); System.out.println("<3>...Eliminar Registro de Socios"); System.out.print("Ingrese el numero de la opcion: "); try{ opc = s.nextInt(); } catch(Exception e){ System.out.println("Ingrese el NUMERO de la opcion..."); } return opc; } private void insertarRegistro() { s = new Scanner(System.in); System.out.print("Nombre: "); String nombre=s.nextLine(); System.out.print("Codigo (5 numeros): "); int codigo=s.nextInt(); System.out.print("Edad: "); int edad=s.nextInt(); Date d=new Date(); SimpleDateFormat dia=new SimpleDateFormat("dd"); SimpleDateFormat mes=new SimpleDateFormat("MM"); SimpleDateFormat anio=new SimpleDateFormat("yyyy"); TipoSocio ts=new TipoSocio(nombre, codigo, edad, Integer.parseInt(dia.format(d)), Integer.parseInt(mes.format(d)), Integer.parseInt(anio.format(d))); tde.insertar(ts); } private void eliminarRegistro() { s = new Scanner(System.in); System.out.print("Ingrese codigo a eliminar (5 numeros): "); int codigo = s.nextInt(); tde.eliminar(codigo); } private void buscarRegistro() { s = new Scanner(System.in); System.out.print("Ingrese codigo a buscar (5 numeros): "); int codigo = s.nextInt();

Elemento e=tde.buscar(codigo); if(e!=null){ System.out.println(e.socio.toString()); } else{ System.out.println("No se ha encontrado un Registro con este codigo..."); } } public static void main(String[] args) { RegistroSocios rs = new RegistroSocios(); while (true) { switch (rs.menu()) { case 1: rs.insertarRegistro(); break; case 2: rs.buscarRegistro(); break; case 3: rs.eliminarRegistro(); break; case 0: System.exit(0); break; } } } } Resultado: Insertar:

Buscar:

Eliminar y buscar:

Salir: