Está en la página 1de 3

Universidad Autnoma de la Ciudad de Mxico

Nada humano me es ajeno


Plantel SLT



Estructura de datos
Ejemplo TADMapa

Implementar un tipo abstracto de dato para trabajar con mapas ordenados (tambin llamados tablas, diccionarios o tablas de
bsqueda). En un mapa los elementos se almacenan en parejas, cada una consta de una llave y un valor. Para recuperar el valor es
necesario proporcionar la llave y se obtiene el valor asociado a ella. Cada llave identifica una entrada, por lo que debe ser nica. Sin
embargo, es posible que dos llaves diferentes tengan el mismo valor. La interface que debe implementar es la siguiente:

public interface TADMapa <L, V>
{
public boolean estaVacio();
public void limpiar();
public int tamanio();
public V agregar (L llave, V valor);
public V obtener (L llave);
public void eliminar(L llave);
public java.util.Iterator iterador();
public interface TADRegistro <L, V>
{
public L obtenerLlave();
public V obtenerValor();
public void asignarValor(V valor);
}
}

En la interface, el mtodo:

estaVacio() : Devuelve true si no hay elementos en el mapa;
limpiar(): Limpia el mapa. Este mtodo debe ser de orden O(1).
tamanio(): Devuelve el nmero de elementos del mapa.
agregar (L llave, V valor): Agrega al mapa un registro devolviendo el valor previo si la llave ya exista en el mapa o bien null si la llave
es nueva.
obtener (L llave): Devuelve el valor asociado con unallave o bien null si la llave no est en el mapa.
eliminar(L llave): Elimina del mapa el registro asociado con la llave proporcionada, si se encuentra en el mapa, de no ser as no hace
nada.
iterador(): Devuelve un objeto que implementa la interface Iterator.
TADRegistro: Es una interface pblica anidada, su tipo es TADMapa.TADRegistro. Este objeto almacena la pareja llave/valor,
permitiendo accesar a la llave o al valor y permitiendo cambiar el valor. El iterador que regresa elementos trabaja con los objetos
TADRegistro.




import java.util.Iterator;
import java.util.NoSuchElementException;
public class Mapa <L extends Comparable, V> implements TADMapa<L, V>
{
private Registro []mapa;
private int numElem;

public Mapa()
{
this(10);
}

public Mapa(int t)
{
if (t > 0)
mapa = new Registro[t];
else
mapa = new Registro[10];
numElem = 0;
}

public Mapa(Mapa m)
{
mapa = new Registro[m.mapa.length];
for(int i = 0; i < mapa.length; i++)
mapa[i] = m.mapa[i];
numElem = m.numElem;
}

public boolean estaVacio()
{
if(numElem == 0)
return true;
else
return false;
}

public void limpiar()
{
numElem = 0;
}

public int tamanio()
{
return numElem;
}

public V agregar (L llave, V valor)
{
if(!estaVacio())
{
if(mapa.length == numElem)
crecerMapa();
if(null != obtener(llave))
return obtener(llave);
}
int i = numElem;
while(i > 0 && llave.compareTo(mapa[i-1].obtenerLlave()) < 0)
{
mapa[i] = mapa[i-1];
i--;
}
mapa[i] = new Registro(llave, valor);
numElem++;
return null;
}

private void crecerMapa()
{
Registro [] aux = new Registro[numElem * 2];
for(int i = 0; i < numElem; i++)
aux[i] = mapa[i];
mapa = aux;
}

public V obtener (L llave)
{
for(int i = 0; i < numElem; i++)
if(llave.equals(mapa[i].obtenerLlave()))
return (V) mapa[i].obtenerValor();
return null;
}

public void eliminar(L llave)
{
if(obtener(llave) != null)
{
for(int i = 0; i < numElem; i++)
if(llave.equals(mapa[i].obtenerLlave()))
{
while(i < numElem - 1)
{
mapa[i] = mapa[i+1];
i++;
}
mapa[--numElem] = null;
return;
}
}
}

public java.util.Iterator iterador()
{
return new Iterador();
}

private class Iterador implements Iterator
{
private int p;

public Iterador()
{
p = 0;
}

public boolean hasNext()
{
if(p < numElem)
return true;
return false;
}

public Registro next()
{
if(hasNext())
return mapa[p++];
throw new NoSuchElementException();
}

public void remove()
{
throw new UnsupportedOperationException();
}
}

private class Registro <L, V> implements TADMapa.TADRegistro <L,V>
{
private L llave;
private V valor;
public Registro(L llave, V valor)
{
this.llave = llave;
this.valor = valor;
}

public L obtenerLlave()
{
return llave;
}

public V obtenerValor()
{
return valor;
}

public void asignarValor(V valor)
{
this.valor = valor;
}
}
}

También podría gustarte