Added double and circular linked list.
Updated documentation. Seperated links into 2 types, normal and circular. Added arrow graphics.
This commit is contained in:
42
src/cl/cromer/estructuras/Enlace.java
Normal file
42
src/cl/cromer/estructuras/Enlace.java
Normal file
@@ -0,0 +1,42 @@
|
||||
package cl.cromer.estructuras;
|
||||
|
||||
/**
|
||||
* Esta interfaz es para los 2 tipos de enlace, {@link EnlaceNormal} y {@link EnlaceCircular}.
|
||||
*/
|
||||
interface Enlace {
|
||||
/**
|
||||
* Devolver la llave.
|
||||
* @return int: La llave.
|
||||
*/
|
||||
int getLlave();
|
||||
|
||||
/**
|
||||
* Cambiar el valor de la llave.
|
||||
* @param llave int: El valor de la llave.
|
||||
*/
|
||||
void setLlave(int llave);
|
||||
|
||||
/**
|
||||
* Devolver el siguente enlace.
|
||||
* @return Object: El enlace a devolver.
|
||||
*/
|
||||
Object getSiguente();
|
||||
|
||||
/**
|
||||
* Cambiar el siguiente enlace.
|
||||
* @param siguente Object: El siguente enlace nuevo.
|
||||
*/
|
||||
void setSiguente(Object siguente);
|
||||
|
||||
/**
|
||||
* Devolver el enlace previo.
|
||||
* @return Object: El enlace previo.
|
||||
*/
|
||||
Object getPrevio();
|
||||
|
||||
/**
|
||||
* Cambiar el previo enlace.
|
||||
* @param previo Object: El enlace previo nuevo.
|
||||
*/
|
||||
void setPrevio(Object previo);
|
||||
}
|
70
src/cl/cromer/estructuras/EnlaceCircular.java
Normal file
70
src/cl/cromer/estructuras/EnlaceCircular.java
Normal file
@@ -0,0 +1,70 @@
|
||||
package cl.cromer.estructuras;
|
||||
|
||||
/**
|
||||
* Esta clase es de tipo de enlace circular.
|
||||
*/
|
||||
public class EnlaceCircular implements Enlace {
|
||||
/**
|
||||
* La llave.
|
||||
*/
|
||||
private int llave;
|
||||
|
||||
/**
|
||||
* El siguente enlace.
|
||||
*/
|
||||
private EnlaceCircular siguente;
|
||||
|
||||
/**
|
||||
* Incializar.
|
||||
*/
|
||||
public EnlaceCircular() {
|
||||
siguente = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver la llave.
|
||||
* @return int: La llave.
|
||||
*/
|
||||
public int getLlave() {
|
||||
return llave;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cambiar el valor de la llave.
|
||||
* @param llave int: El valor de la llave.
|
||||
*/
|
||||
public void setLlave(int llave) {
|
||||
this.llave = llave;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver el siguente enlace.
|
||||
* @return EnlaceCircular: El enlace a devolver.
|
||||
*/
|
||||
public EnlaceCircular getSiguente() {
|
||||
return siguente;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cambiar el siguiente enlace.
|
||||
* @param siguente Object: El siguente enlace nuevo de tipo {@link EnlaceCircular}.
|
||||
*/
|
||||
public void setSiguente(Object siguente) {
|
||||
this.siguente = (EnlaceCircular) siguente;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver el enlace previo.
|
||||
* @return EnlaceCircular: El enlace previo.
|
||||
*/
|
||||
public EnlaceCircular getPrevio() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy metodo para usar interface {@link Enlace}
|
||||
* @param previo Object: El enlace previo nuevo de tipo {@link EnlaceCircular}.
|
||||
*/
|
||||
public void setPrevio(Object previo) {
|
||||
}
|
||||
}
|
77
src/cl/cromer/estructuras/EnlaceNormal.java
Normal file
77
src/cl/cromer/estructuras/EnlaceNormal.java
Normal file
@@ -0,0 +1,77 @@
|
||||
package cl.cromer.estructuras;
|
||||
|
||||
/**
|
||||
* Esta clase es de tipo de enlace normal.
|
||||
*/
|
||||
public class EnlaceNormal implements Enlace {
|
||||
/**
|
||||
* La llave.
|
||||
*/
|
||||
private int llave;
|
||||
|
||||
/**
|
||||
* El siguente enlace.
|
||||
*/
|
||||
private EnlaceNormal siguente;
|
||||
|
||||
/**
|
||||
* El enlace previo por doble enlazada.
|
||||
*/
|
||||
private EnlaceNormal previo;
|
||||
|
||||
/**
|
||||
* Incializar.
|
||||
*/
|
||||
public EnlaceNormal() {
|
||||
siguente = null;
|
||||
previo = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver la llave.
|
||||
* @return int: La llave.
|
||||
*/
|
||||
public int getLlave() {
|
||||
return llave;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cambiar el valor de la llave.
|
||||
* @param llave int: El valor de la llave.
|
||||
*/
|
||||
public void setLlave(int llave) {
|
||||
this.llave = llave;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver el siguente enlace.
|
||||
* @return EnlaceNormal: El enlace a devolver.
|
||||
*/
|
||||
public EnlaceNormal getSiguente() {
|
||||
return siguente;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cambiar el siguiente enlace.
|
||||
* @param siguente Object: El siguente enlace nuevo de tipo {@link EnlaceNormal}.
|
||||
*/
|
||||
public void setSiguente(Object siguente) {
|
||||
this.siguente = (EnlaceNormal) siguente;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver el enlace previo.
|
||||
* @return EnlaceNormal: El enlace previo.
|
||||
*/
|
||||
public EnlaceNormal getPrevio() {
|
||||
return previo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cambiar el previo enlace.
|
||||
* @param previo Object: El enlace previo nuevo de tipo {@link EnlaceNormal}.
|
||||
*/
|
||||
public void setPrevio(Object previo) {
|
||||
this.previo = (EnlaceNormal) previo;
|
||||
}
|
||||
}
|
@@ -8,6 +8,7 @@ import javafx.scene.layout.StackPane;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.scene.shape.Circle;
|
||||
import javafx.scene.shape.Line;
|
||||
import javafx.scene.shape.Polygon;
|
||||
import javafx.scene.shape.Rectangle;
|
||||
import javafx.scene.text.Text;
|
||||
import javafx.util.Duration;
|
||||
@@ -66,6 +67,40 @@ public class Grafico {
|
||||
destacado = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear una flecha que apunta por abajo.
|
||||
* @return StackPane: Devolver el stackpane que contiene la flecha.
|
||||
*/
|
||||
public static StackPane crearFlechaAbajo() {
|
||||
Polygon polygon = new Polygon();
|
||||
polygon.getPoints().addAll(
|
||||
0.0, 0.0,
|
||||
10.0, 0.0,
|
||||
5.0, 10.0
|
||||
);
|
||||
|
||||
StackPane stackPane = new StackPane();
|
||||
stackPane.getChildren().addAll(polygon);
|
||||
return stackPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear una flecha que apunta por arriba.
|
||||
* @return StackPane: Devolver el stackpane que contiene la flecha.
|
||||
*/
|
||||
public static StackPane crearFlechaArriba() {
|
||||
Polygon polygon = new Polygon();
|
||||
polygon.getPoints().addAll(
|
||||
5.0, 0.0,
|
||||
0.0, 10.0,
|
||||
10.0, 10.0
|
||||
);
|
||||
|
||||
StackPane stackPane = new StackPane();
|
||||
stackPane.getChildren().addAll(polygon);
|
||||
return stackPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear una linea vertical
|
||||
* @return StackPane: Devolver el stackpane que contiene la linea vertical.
|
||||
|
@@ -1,28 +1,57 @@
|
||||
package cl.cromer.estructuras;
|
||||
|
||||
public class ListaEnlazada {
|
||||
/**
|
||||
* El enlace principal de la lista.
|
||||
*/
|
||||
private Enlace lista;
|
||||
|
||||
/**
|
||||
* La cantidad de enlaces que están en la lista.
|
||||
*/
|
||||
private int size;
|
||||
|
||||
/**
|
||||
* El tipo de lista enlazada.
|
||||
*/
|
||||
private int tipo;
|
||||
|
||||
/**
|
||||
* Inicilizar.
|
||||
*/
|
||||
public ListaEnlazada() {
|
||||
lista = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver la cantidad de enlaces que están en la lista.
|
||||
* @return int: La cantidad.
|
||||
*/
|
||||
public int size() {
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver el tipo de lista.
|
||||
* @return int: El tipo.
|
||||
*/
|
||||
public int getTipo() {
|
||||
return tipo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cambiar el tipo de lista.
|
||||
* @param tipo int: El tipo a cambiar.
|
||||
*/
|
||||
public void setTipo(int tipo) {
|
||||
this.tipo = tipo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Buscar una llave en la lista.
|
||||
* @param llave int: La llave a buscar.
|
||||
* @return Enlace: El enlace que contiene la llave buscada.
|
||||
*/
|
||||
public Enlace buscar(int llave) {
|
||||
if (this.lista != null) {
|
||||
// La lista no es vacia
|
||||
@@ -31,7 +60,7 @@ public class ListaEnlazada {
|
||||
// Buscar hasta la llave es encontraddo
|
||||
if (lista.getSiguente() != null) {
|
||||
// Buscar en la sigenute enlace
|
||||
lista = lista.getSiguente();
|
||||
lista = (Enlace) lista.getSiguente();
|
||||
}
|
||||
else {
|
||||
// No se encuentra
|
||||
@@ -47,13 +76,20 @@ public class ListaEnlazada {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean insertar(int llave, int valor) {
|
||||
/**
|
||||
* Insertar una llave en la lista.
|
||||
* @param llave int: La llave a insertar.
|
||||
* @return boolean: Verdad si fue insertado, sino falso.
|
||||
*/
|
||||
public boolean insertar(int llave) {
|
||||
if (buscar(llave) == null) {
|
||||
// Crear una enlace y agregarla a la lista
|
||||
Enlace nueva = new Enlace();
|
||||
Enlace nueva = new EnlaceNormal();
|
||||
nueva.setLlave(llave);
|
||||
nueva.setValor(valor);
|
||||
nueva.setSiguente(lista);
|
||||
if (lista != null) {
|
||||
lista.setPrevio(nueva);
|
||||
}
|
||||
lista = nueva;
|
||||
size++;
|
||||
return true;
|
||||
@@ -64,6 +100,11 @@ public class ListaEnlazada {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Eliminar un enlace de la lista.
|
||||
* @param llave int: La llave a eliminar.
|
||||
* @return boolean: Verdad si fue borrado, sino falso.
|
||||
*/
|
||||
public boolean eliminar(int llave) {
|
||||
if (lista != null) {
|
||||
// La lista no es vacia
|
||||
@@ -74,7 +115,7 @@ public class ListaEnlazada {
|
||||
if (lista.getSiguente() != null) {
|
||||
// Buscar en la sigenute enlace
|
||||
previo = lista;
|
||||
lista = lista.getSiguente();
|
||||
lista = (Enlace) lista.getSiguente();
|
||||
}
|
||||
else {
|
||||
// No se encuentra
|
||||
@@ -84,7 +125,10 @@ public class ListaEnlazada {
|
||||
// Se encontró
|
||||
if (lista == this.lista) {
|
||||
// Si es la primera enlace, cambiarla al siguente enlace
|
||||
this.lista = this.lista.getSiguente();
|
||||
this.lista = (Enlace) this.lista.getSiguente();
|
||||
if (this.lista.getPrevio() != null) {
|
||||
this.lista.setPrevio(null);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Sino cortar esta enlace de la lista
|
||||
@@ -109,7 +153,7 @@ public class ListaEnlazada {
|
||||
int i = size();
|
||||
Enlace lista = this.lista;
|
||||
while (i > indice + 1) {
|
||||
lista = lista.getSiguente();
|
||||
lista = (Enlace) lista.getSiguente();
|
||||
i--;
|
||||
}
|
||||
return lista;
|
||||
@@ -118,40 +162,5 @@ public class ListaEnlazada {
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
175
src/cl/cromer/estructuras/ListaEnlazadaCircular.java
Normal file
175
src/cl/cromer/estructuras/ListaEnlazadaCircular.java
Normal file
@@ -0,0 +1,175 @@
|
||||
package cl.cromer.estructuras;
|
||||
|
||||
public class ListaEnlazadaCircular {
|
||||
/**
|
||||
* El primer enlace.
|
||||
*/
|
||||
private Enlace primer;
|
||||
/**
|
||||
* El ultimo enlace.
|
||||
*/
|
||||
private Enlace ultimo;
|
||||
|
||||
/**
|
||||
* La cantidad de enlaces que hay.
|
||||
*/
|
||||
private int size;
|
||||
|
||||
/**
|
||||
* El tipo de lista enlazada.
|
||||
*/
|
||||
private int tipo;
|
||||
|
||||
/**
|
||||
* Inicilizar.
|
||||
*/
|
||||
public ListaEnlazadaCircular() {
|
||||
primer = null;
|
||||
ultimo = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver la cantidad de enlaces que están en la lista.
|
||||
* @return int: La cantidad.
|
||||
*/
|
||||
public int size() {
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver el tipo de lista.
|
||||
* @return int: El tipo de lista.
|
||||
*/
|
||||
public int getTipo() {
|
||||
return tipo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cambiar el tipo de lista.
|
||||
* @param tipo int: El tipo a cambiar.
|
||||
*/
|
||||
public void setTipo(int tipo) {
|
||||
this.tipo = tipo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Buscar una llave en la lista.
|
||||
* @param llave int: La llave a buscar.
|
||||
* @return Enlace: El enlace que contiene la llave.
|
||||
*/
|
||||
public Enlace buscar(int llave) {
|
||||
if (this.primer != null) {
|
||||
// La lista no es vacia
|
||||
Enlace lista = this.primer;
|
||||
int i = 0;
|
||||
while (lista.getLlave() != llave && i < size()) {
|
||||
// Buscar en la sigenute enlace hasta el final.
|
||||
lista = (Enlace) lista.getSiguente();
|
||||
i++;
|
||||
}
|
||||
if (lista.getLlave() == llave) {
|
||||
// Devoler el enlace encontrado.
|
||||
return lista;
|
||||
}
|
||||
else {
|
||||
// No se encontró.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// La lista es vacia, nada para buscar
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insertar una llave en la lista.
|
||||
* @param llave int: La llave a insertar.
|
||||
* @return boolean: Verdad si fue insertado, falso si ya existe la llave.
|
||||
*/
|
||||
public boolean insertar(int llave) {
|
||||
if (buscar(llave) == null) {
|
||||
// Crear una enlace y agregarla a la lista
|
||||
Enlace enlace = new EnlaceCircular();
|
||||
|
||||
if (primer == null) {
|
||||
ultimo = enlace;
|
||||
}
|
||||
|
||||
enlace.setLlave(llave);
|
||||
enlace.setSiguente(primer);
|
||||
primer = enlace;
|
||||
ultimo.setSiguente(primer);
|
||||
|
||||
size++;
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
// Se falló porque la llave ya existe
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Eliminar un enlace de la lista.
|
||||
* @param llave int: La llave a elminiar.
|
||||
* @return boolean: Verdad se fue eliminado, falso si no estaba en la lista.
|
||||
*/
|
||||
public boolean eliminar(int llave) {
|
||||
if (primer != null) {
|
||||
// La lista no es vacia
|
||||
Enlace lista = this.primer;
|
||||
Enlace previo = lista;
|
||||
int i = 0;
|
||||
while (lista.getLlave() != llave && i < size()) {
|
||||
// Buscar hasta la llave es encontraddo
|
||||
if (lista.getSiguente() != null) {
|
||||
// Buscar en la sigenute enlace
|
||||
previo = lista;
|
||||
lista = (Enlace) lista.getSiguente();
|
||||
}
|
||||
else {
|
||||
// No se encuentra
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
// Se encontró
|
||||
if (lista == this.primer) {
|
||||
// Si es la primera enlace, cambiarla al siguente enlace
|
||||
this.primer = (Enlace) this.primer.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 (primer != null && indice >= 0 && indice < size()) {
|
||||
int i = size();
|
||||
Enlace lista = this.primer;
|
||||
while (i > indice + 1) {
|
||||
lista = (Enlace) lista.getSiguente();
|
||||
i--;
|
||||
}
|
||||
return lista;
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -6,14 +6,12 @@ import javafx.scene.Scene;
|
||||
import javafx.scene.control.ButtonBar;
|
||||
import javafx.scene.control.ButtonType;
|
||||
import javafx.scene.control.Dialog;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.scene.text.Text;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.Random;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.Scanner;
|
||||
import java.util.logging.Level;
|
||||
|
||||
/**
|
||||
@@ -21,11 +19,6 @@ import java.util.logging.Level;
|
||||
* @author Chris Cromer
|
||||
*/
|
||||
public class ListaEnlazdaController implements Initializable {
|
||||
/**
|
||||
* La caja para ingresar la llave.
|
||||
*/
|
||||
@FXML private TextFieldLimited llaveLista;
|
||||
|
||||
/**
|
||||
* La caja para ingresar el valor.
|
||||
*/
|
||||
@@ -56,6 +49,11 @@ public class ListaEnlazdaController implements Initializable {
|
||||
*/
|
||||
private ListaEnlazada listaEnlazada;
|
||||
|
||||
/**
|
||||
* La lista enlazada circular usado en la aplicación.
|
||||
*/
|
||||
private ListaEnlazadaCircular listaEnlazadaCircular;
|
||||
|
||||
/**
|
||||
* Tipo de lista enlazada a trabajar.
|
||||
*/
|
||||
@@ -97,12 +95,23 @@ public class ListaEnlazdaController implements Initializable {
|
||||
int minimo = 0;
|
||||
int rango = maximo - minimo + 1;
|
||||
|
||||
for (int i = listaEnlazada.size(); listaEnlazada.size() < 5; i++) {
|
||||
int numero = random.nextInt(rango) + minimo;
|
||||
while (listaEnlazada.buscar(i) != null) {
|
||||
i++;
|
||||
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
|
||||
for (listaEnlazada.size(); listaEnlazada.size() < 5; ) {
|
||||
int numero = random.nextInt(rango) + minimo;
|
||||
while (listaEnlazada.buscar(numero) != null) {
|
||||
numero = random.nextInt(rango) + minimo;
|
||||
}
|
||||
listaEnlazada.insertar(numero);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (listaEnlazadaCircular.size(); listaEnlazadaCircular.size() < 5; ) {
|
||||
int numero = random.nextInt(rango) + minimo;
|
||||
while (listaEnlazadaCircular.buscar(numero) != null) {
|
||||
numero = random.nextInt(rango) + minimo;
|
||||
}
|
||||
listaEnlazadaCircular.insertar(numero);
|
||||
}
|
||||
listaEnlazada.insertar(i, numero);
|
||||
}
|
||||
generarGrafico();
|
||||
}
|
||||
@@ -116,7 +125,14 @@ public class ListaEnlazdaController implements Initializable {
|
||||
initializeLista();
|
||||
}
|
||||
|
||||
listaEnlazada = new ListaEnlazada();
|
||||
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
|
||||
listaEnlazada = new ListaEnlazada();
|
||||
listaEnlazada.setTipo(listaEnlazadaTipos.getTipo());
|
||||
}
|
||||
else {
|
||||
listaEnlazadaCircular = new ListaEnlazadaCircular();
|
||||
listaEnlazadaCircular.setTipo(ListaEnlazadaTipos.SIMPLE);
|
||||
}
|
||||
generarGrafico();
|
||||
}
|
||||
|
||||
@@ -129,7 +145,7 @@ public class ListaEnlazdaController implements Initializable {
|
||||
initializeLista();
|
||||
}
|
||||
|
||||
String tipo;
|
||||
/*String tipo;
|
||||
switch (listaEnlazadaTipos.getTipo()) {
|
||||
case ListaEnlazadaTipos.SIMPLE:
|
||||
tipo = "Simple";
|
||||
@@ -142,17 +158,22 @@ public class ListaEnlazdaController implements Initializable {
|
||||
break;
|
||||
default:
|
||||
tipo = "Simple";
|
||||
}
|
||||
}*/
|
||||
|
||||
// Mostrar el codigo
|
||||
//String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
||||
//codigoLista.setText(codigoTexto);
|
||||
|
||||
if (llaveLista.getText() != null && !llaveLista.getText().trim().equals("") && valorLista.getText() != null && !valorLista.getText().trim().equals("")) {
|
||||
if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) {
|
||||
try {
|
||||
boolean exito = listaEnlazada.insertar(Integer.valueOf(llaveLista.getText()), Integer.valueOf(valorLista.getText()));
|
||||
boolean exito;
|
||||
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
|
||||
exito = listaEnlazada.insertar(Integer.valueOf(valorLista.getText()));
|
||||
}
|
||||
else {
|
||||
exito = listaEnlazadaCircular.insertar(Integer.valueOf(valorLista.getText()));
|
||||
}
|
||||
if (exito) {
|
||||
llaveLista.setText("");
|
||||
valorLista.setText("");
|
||||
generarGrafico();
|
||||
}
|
||||
@@ -191,10 +212,15 @@ public class ListaEnlazdaController implements Initializable {
|
||||
//codigoLista.setText(codigoTexto);
|
||||
|
||||
try {
|
||||
if (llaveLista.getText() != null && !llaveLista.getText().trim().equals("")) {
|
||||
boolean exito = listaEnlazada.eliminar(Integer.valueOf(llaveLista.getText()));
|
||||
if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) {
|
||||
boolean exito;
|
||||
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
|
||||
exito = listaEnlazada.eliminar(Integer.valueOf(valorLista.getText()));
|
||||
}
|
||||
else {
|
||||
exito = listaEnlazadaCircular.eliminar(Integer.valueOf(valorLista.getText()));
|
||||
}
|
||||
if (exito) {
|
||||
llaveLista.setText("");
|
||||
valorLista.setText("");
|
||||
generarGrafico();
|
||||
}
|
||||
@@ -229,8 +255,14 @@ public class ListaEnlazdaController implements Initializable {
|
||||
//codigoLista.setText(codigoTexto);
|
||||
|
||||
try {
|
||||
if (llaveLista.getText() != null && !llaveLista.getText().trim().equals("")) {
|
||||
ListaEnlazada.Enlace enlace = listaEnlazada.buscar(Integer.valueOf(llaveLista.getText()));
|
||||
if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) {
|
||||
Enlace enlace;
|
||||
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
|
||||
enlace = listaEnlazada.buscar(Integer.valueOf(valorLista.getText()));
|
||||
}
|
||||
else {
|
||||
enlace = listaEnlazadaCircular.buscar(Integer.valueOf(valorLista.getText()));
|
||||
}
|
||||
if (enlace != null) {
|
||||
generarGrafico();
|
||||
grafico = new Grafico(scene);
|
||||
@@ -281,8 +313,15 @@ public class ListaEnlazdaController implements Initializable {
|
||||
private void initializeLista() {
|
||||
scene = contenidoLista.getScene();
|
||||
grafico = new Grafico(scene);
|
||||
this.listaEnlazada = new ListaEnlazada();
|
||||
listaEnlazadaTipos = (ListaEnlazadaTipos) scene.getUserData();
|
||||
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
|
||||
listaEnlazada = new ListaEnlazada();
|
||||
listaEnlazada.setTipo(listaEnlazadaTipos.getTipo());
|
||||
}
|
||||
else {
|
||||
listaEnlazadaCircular = new ListaEnlazadaCircular();
|
||||
listaEnlazadaCircular.setTipo(ListaEnlazadaTipos.SIMPLE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -292,10 +331,55 @@ public class ListaEnlazdaController implements Initializable {
|
||||
grafico.removerDestacar();
|
||||
colores = new Colores();
|
||||
contenidoLista.getChildren().clear();
|
||||
for (int i = 0; i < listaEnlazada.size(); i++) {
|
||||
ListaEnlazada.Enlace enlace = listaEnlazada.getIndice(i);
|
||||
contenidoLista.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave()) + " | " + String.valueOf(enlace.getValor()), 50), Grafico.crearLineaVertical());
|
||||
colores.siguinteColor();
|
||||
|
||||
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
|
||||
for (int i = 0; i < listaEnlazada.size(); i++) {
|
||||
Enlace enlace = listaEnlazada.getIndice(i);
|
||||
if (listaEnlazada.getTipo() == ListaEnlazadaTipos.SIMPLE) {
|
||||
dibujarSimple(enlace);
|
||||
}
|
||||
else if (listaEnlazada.getTipo() == ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA) {
|
||||
if (i != listaEnlazada.size() - 1) {
|
||||
dibujarDoble(enlace);
|
||||
}
|
||||
else {
|
||||
dibujarSimple(enlace);
|
||||
}
|
||||
}
|
||||
colores.siguinteColor();
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (int i = 0; i < listaEnlazadaCircular.size(); i++) {
|
||||
Enlace enlace = listaEnlazadaCircular.getIndice(i);
|
||||
dibujarSimple(enlace);
|
||||
colores.siguinteColor();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dibujarlo con una flecha.
|
||||
* @param enlace Object: El enlace que tiene la llave y valor.
|
||||
*/
|
||||
private void dibujarSimple(Enlace enlace) {
|
||||
contenidoLista.getChildren().addAll(
|
||||
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave())),
|
||||
Grafico.crearLineaVertical(),
|
||||
Grafico.crearFlechaAbajo()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dibujarlo con dos flechas.
|
||||
* @param enlace El enlace que tiene la llave y valor.
|
||||
*/
|
||||
private void dibujarDoble(Enlace enlace) {
|
||||
contenidoLista.getChildren().addAll(
|
||||
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave())),
|
||||
Grafico.crearFlechaArriba(),
|
||||
Grafico.crearLineaVertical(),
|
||||
Grafico.crearFlechaAbajo()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -147,7 +147,35 @@ public class MenuController extends VBox implements Initializable {
|
||||
protected void menuListaEnlazadaSimple() {
|
||||
ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(ListaEnlazadaTipos.SIMPLE);
|
||||
loadStage(
|
||||
resourceBundle.getString("tituloMerge"),
|
||||
resourceBundle.getString("tituloListaEnlazadaSimple"),
|
||||
"/cl/cromer/estructuras/fxml/listaEnlazada.fxml",
|
||||
"/cl/cromer/estructuras/css/style.css",
|
||||
listaEnlazadaTipos
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Click en Lista Enlazada Circular.
|
||||
*/
|
||||
@FXML
|
||||
protected void menuListaEnlazadaCircular() {
|
||||
ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(ListaEnlazadaTipos.CIRCULAR);
|
||||
loadStage(
|
||||
resourceBundle.getString("tituloListaEnlazadaCircular"),
|
||||
"/cl/cromer/estructuras/fxml/listaEnlazada.fxml",
|
||||
"/cl/cromer/estructuras/css/style.css",
|
||||
listaEnlazadaTipos
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Click en Lista Enlazada Doble.
|
||||
*/
|
||||
@FXML
|
||||
protected void menuListaEnlazadaDoble() {
|
||||
ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA);
|
||||
loadStage(
|
||||
resourceBundle.getString("tituloListaEnlazadaDoble"),
|
||||
"/cl/cromer/estructuras/fxml/listaEnlazada.fxml",
|
||||
"/cl/cromer/estructuras/css/style.css",
|
||||
listaEnlazadaTipos
|
||||
|
@@ -9,6 +9,9 @@ tituloSeleccion=Selection
|
||||
tituloShell=Shell
|
||||
tituloQuick=Quick
|
||||
tituloMerge=Merge
|
||||
tituloListaEnlazadaSimple=Simple Linked List
|
||||
tituloListaEnlazadaCircular=Circular Linked List
|
||||
tituloListaEnlazadaDoble=Double Linked List
|
||||
|
||||
estructuras=Structures
|
||||
array=Array
|
||||
@@ -24,7 +27,7 @@ merge=merge
|
||||
listaEnlazada=Linked List
|
||||
listaSimple=Simple
|
||||
listaCircular=Circular
|
||||
doblementeEnlazada=Double Linked
|
||||
doblementeEnlazada=Double
|
||||
pila=Stack
|
||||
cola=Queue
|
||||
arboles=Tree
|
||||
@@ -56,8 +59,6 @@ cancelar=Cancel
|
||||
cerrar=Close
|
||||
error=Error
|
||||
|
||||
llave=Key:
|
||||
valor=Value:
|
||||
llenar=Fill
|
||||
vaciar=Empty
|
||||
insertar=Insert
|
||||
|
@@ -9,6 +9,9 @@ tituloSeleccion=Selecci\u00F3n
|
||||
tituloShell=Shell
|
||||
tituloQuick=Quick
|
||||
tituloMerge=Merge
|
||||
tituloListaEnlazadaSimple=Lista Enlazada Simple
|
||||
tituloListaEnlazadaCircular=Lista Enlazada Circular
|
||||
tituloListaEnlazadaDoble=Lista Enlazada Doble
|
||||
|
||||
estructuras=Estructuras
|
||||
array=Array
|
||||
@@ -56,8 +59,6 @@ cancelar=Cancelar
|
||||
cerrar=Cerrar
|
||||
error=Error
|
||||
|
||||
llave=Llave:
|
||||
valor=Valor:
|
||||
vaciar=Vaciar
|
||||
llenar=Llenar
|
||||
insertar=Insertar
|
||||
|
@@ -18,9 +18,6 @@
|
||||
<Button text="%insertar" onAction="#botonInsertar" />
|
||||
<Button text="%eliminar" onAction="#botonEliminar" />
|
||||
<Button text="%buscar" onAction="#botonBuscar" />
|
||||
<Text text="%llave" />
|
||||
<TextFieldLimited fx:id="llaveLista" maxLength="2" prefWidth="40" />
|
||||
<Text text="%valor" />
|
||||
<TextFieldLimited fx:id="valorLista" maxLength="2" prefWidth="40" />
|
||||
</HBox>
|
||||
<VBox fx:id="contenidoLista" alignment="CENTER" />
|
||||
|
@@ -18,8 +18,8 @@
|
||||
</Menu>
|
||||
<Menu text="%listaEnlazada">
|
||||
<MenuItem text="%listaSimple" onAction="#menuListaEnlazadaSimple"/>
|
||||
<MenuItem text="%listaCircular"/>
|
||||
<MenuItem text="%doblementeEnlazada"/>
|
||||
<MenuItem text="%listaCircular" onAction="#menuListaEnlazadaCircular"/>
|
||||
<MenuItem text="%doblementeEnlazada" onAction="#menuListaEnlazadaDoble"/>
|
||||
</Menu>
|
||||
<MenuItem text="%pila" onAction="#menuPila"/>
|
||||
<MenuItem text="%cola" onAction="#menuCola"/>
|
||||
|
Reference in New Issue
Block a user