Estructuras_de_Datos/src/cl/cromer/estructuras/ListaEnlazada.java

158 lines
3.9 KiB
Java

package cl.cromer.estructuras;
public class ListaEnlazada {
private Enlace lista;
private int size;
private int tipo;
public ListaEnlazada() {
lista = null;
}
public int size() {
return size;
}
public int getTipo() {
return tipo;
}
public void setTipo(int tipo) {
this.tipo = tipo;
}
public Enlace buscar(int llave) {
if (this.lista != null) {
// La lista no es vacia
Enlace lista = this.lista;
while (lista.getLlave() != llave) {
// Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) {
// Buscar en la sigenute enlace
lista = lista.getSiguente();
}
else {
// No se encuentra
return null;
}
}
// Se encontró
return lista;
}
else {
// La lista es vacia, nada para buscar
return null;
}
}
public boolean insertar(int llave, int valor) {
if (buscar(llave) == null) {
// Crear una enlace y agregarla a la lista
Enlace nueva = new Enlace();
nueva.setLlave(llave);
nueva.setValor(valor);
nueva.setSiguente(lista);
lista = nueva;
size++;
return true;
}
else {
// Se falló porque la llave ya existe
return false;
}
}
public boolean eliminar(int llave) {
if (lista != null) {
// La lista no es vacia
Enlace lista = this.lista;
Enlace previo = lista;
while (lista.getLlave() != llave) {
// Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) {
// Buscar en la sigenute enlace
previo = lista;
lista = lista.getSiguente();
}
else {
// No se encuentra
return false;
}
}
// Se encontró
if (lista == this.lista) {
// Si es la primera enlace, cambiarla al siguente enlace
this.lista = this.lista.getSiguente();
}
else {
// Sino cortar esta enlace de la lista
previo.setSiguente(lista.getSiguente());
}
size--;
return true;
}
else {
// La lista es vacia, no hay nada para eliminar
return false;
}
}
/**
* Devolver un enlace con su llave y valor.
* @param indice int: El indice que desea ver.
* @return Enlace: El enlace a devolver.
*/
public Enlace getIndice(int indice) {
if (lista != null && indice >= 0 && indice < size()) {
int i = size();
Enlace lista = this.lista;
while (i > indice + 1) {
lista = lista.getSiguente();
i--;
}
return lista;
}
else {
return null;
}
}
// Estructura de enlaces
public class Enlace {
private int llave;
private int valor;
private Enlace siguente;
protected Enlace() {
siguente = null;
}
protected int getLlave() {
return llave;
}
protected void setLlave(int llave) {
this.llave = llave;
}
protected int getValor() {
return valor;
}
protected void setValor(int valor) {
this.valor = valor;
}
protected Enlace getSiguente() {
return siguente;
}
protected void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
}
}