Added code showing to linked list.

Fixed typos.
Fixed warnings.
This commit is contained in:
Chris Cromer 2016-06-27 14:47:49 -04:00
parent 108eedaff2
commit 0a611b8e94
14 changed files with 485 additions and 27 deletions

View File

@ -3,10 +3,7 @@ package cl.cromer.estructuras;
import javafx.animation.Animation; import javafx.animation.Animation;
import javafx.animation.PauseTransition; import javafx.animation.PauseTransition;
import javafx.animation.SequentialTransition; import javafx.animation.SequentialTransition;
import javafx.geometry.Pos;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;

View File

@ -61,7 +61,7 @@ final public class ListaEnlazada {
// La lista no es vacia // La lista no es vacia
Enlace lista = this.lista; Enlace lista = this.lista;
while (lista.getLlave() != llave) { while (lista.getLlave() != llave) {
// Buscar hasta la llave es encontraddo // Buscar hasta la llave es encontrado
if (lista.getSiguente() != null) { if (lista.getSiguente() != null) {
// Buscar en la sigenute enlace // Buscar en la sigenute enlace
lista = (Enlace) lista.getSiguente(); lista = (Enlace) lista.getSiguente();
@ -88,13 +88,13 @@ final public class ListaEnlazada {
public boolean insertar(int llave) { public boolean insertar(int llave) {
if (buscar(llave) == null) { if (buscar(llave) == null) {
// Crear una enlace y agregarla a la lista // Crear una enlace y agregarla a la lista
Enlace nueva = new EnlaceNormal(); Enlace nuevo = new EnlaceNormal();
nueva.setLlave(llave); nuevo.setLlave(llave);
nueva.setSiguente(lista); nuevo.setSiguente(lista);
if (lista != null) { if (lista != null) {
lista.setPrevio(nueva); lista.setPrevio(nuevo);
} }
lista = nueva; lista = nuevo;
size++; size++;
return true; return true;
} }

View File

@ -132,12 +132,14 @@ final public class ListaEnlazadaCircular {
previo = lista; previo = lista;
lista = (Enlace) lista.getSiguente(); lista = (Enlace) lista.getSiguente();
} }
else {
// No se encuentra
return false;
}
i++; i++;
} }
if (lista.getLlave() != llave) {
// No se encontró
return false;
}
// Se encontró // Se encontró
if (lista == this.primer) { if (lista == this.primer) {
// Si es la primera enlace, cambiarla al siguente enlace // Si es la primera enlace, cambiarla al siguente enlace
@ -175,5 +177,4 @@ final public class ListaEnlazadaCircular {
return null; return null;
} }
} }
} }

View File

@ -3,7 +3,6 @@ package cl.cromer.estructuras;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.ButtonBar; import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog; import javafx.scene.control.Dialog;
@ -13,6 +12,7 @@ import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random; import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner;
import java.util.logging.Level; import java.util.logging.Level;
/** /**
@ -151,7 +151,7 @@ public class ListaEnlazdaController implements Initializable {
initializeLista(); initializeLista();
} }
/*String tipo; String tipo;
switch (listaEnlazadaTipos.getTipo()) { switch (listaEnlazadaTipos.getTipo()) {
case ListaEnlazadaTipos.SIMPLE: case ListaEnlazadaTipos.SIMPLE:
tipo = "Simple"; tipo = "Simple";
@ -160,15 +160,15 @@ public class ListaEnlazdaController implements Initializable {
tipo = "Circular"; tipo = "Circular";
break; break;
case ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA: case ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA:
tipo = "Doblemente"; tipo = "Doble";
break; break;
default: default:
tipo = "Simple"; tipo = "Simple";
}*/ }
// Mostrar el codigo // Mostrar el codigo
//String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/insertar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/insertar")).useDelimiter("\\Z").next();
//codigoLista.setText(codigoTexto); codigoLista.setText(codigoTexto);
if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) { if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) {
try { try {
@ -212,10 +212,24 @@ public class ListaEnlazdaController implements Initializable {
initializeLista(); initializeLista();
} }
String tipo;
switch (listaEnlazadaTipos.getTipo()) {
case ListaEnlazadaTipos.SIMPLE:
tipo = "Simple";
break;
case ListaEnlazadaTipos.CIRCULAR:
tipo = "Circular";
break;
case ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA:
tipo = "Doble";
break;
default:
tipo = "Simple";
}
// Mostrar el codigo // Mostrar el codigo
//String tipo = (array.isOrdered())?"Ordenado":"Simple"; String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/eliminar")).useDelimiter("\\Z").next();
//String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/eliminar")).useDelimiter("\\Z").next(); codigoLista.setText(codigoTexto);
//codigoLista.setText(codigoTexto);
try { try {
if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) { if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) {
@ -255,10 +269,24 @@ public class ListaEnlazdaController implements Initializable {
initializeLista(); initializeLista();
} }
String tipo;
switch (listaEnlazadaTipos.getTipo()) {
case ListaEnlazadaTipos.SIMPLE:
tipo = "Simple";
break;
case ListaEnlazadaTipos.CIRCULAR:
tipo = "Circular";
break;
case ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA:
tipo = "Doble";
break;
default:
tipo = "Simple";
}
// Mostrar el codigo // Mostrar el codigo
//String tipo = (array.isOrdered())?"Ordenado":"Simple"; String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/buscar")).useDelimiter("\\Z").next();
//String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/buscar")).useDelimiter("\\Z").next(); codigoLista.setText(codigoTexto);
//codigoLista.setText(codigoTexto);
try { try {
if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) { if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) {

View File

@ -34,6 +34,7 @@ public class TextFieldLimited extends TextField {
* Lista de estilos aplicable. * Lista de estilos aplicable.
* @return List: La lista de estilos. * @return List: La lista de estilos.
*/ */
@SuppressWarnings("unused")
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() { public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return TextFieldLimited.StyleableProperties.STYLEABLES; return TextFieldLimited.StyleableProperties.STYLEABLES;
} }
@ -93,6 +94,7 @@ public class TextFieldLimited extends TextField {
* Asignar un valor maximo de caracters permitidio en el TextFieldLimited. * Asignar un valor maximo de caracters permitidio en el TextFieldLimited.
* @param value int: La cantidad maxima. * @param value int: La cantidad maxima.
*/ */
@SuppressWarnings("unused")
public final void setMaxLength(int value) { public final void setMaxLength(int value) {
if (maxLength != null || value > 0) { if (maxLength != null || value > 0) {
maxLengthProperty().set(value); maxLengthProperty().set(value);
@ -138,6 +140,7 @@ public class TextFieldLimited extends TextField {
} }
@Override @Override
@SuppressWarnings("unchecked")
public StyleableProperty<Number> getStyleableProperty(TextFieldLimited node) { public StyleableProperty<Number> getStyleableProperty(TextFieldLimited node) {
return (StyleableProperty<Number>) node.maxLengthProperty(); return (StyleableProperty<Number>) node.maxLengthProperty();
} }

View File

@ -0,0 +1,47 @@
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 < elementos) {
// Buscar hasta la llave es encontrado
lista = lista.getSiguente();
i++;
}
if (lista.getLlave() == llave) {
// Devoler el enlace encontrado.
return lista;
}
else {
// No se encontró.
return null;
}
}
else {
// La lista es vacia, devolver null
return null;
}
}
final public class Enlace {
private int llave;
private Enlace siguente;
public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente;
this.llave = llave;
}
public int getLlave() {
return llave;
}
public Enlace getSiguente() {
return siguente;
}
public void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
}

View File

@ -0,0 +1,57 @@
public void eliminar(int llave) {
if (primer != null) {
// Crear una lista temporario para trabajar
Enlace lista = this.primer;
// Guardar el enlace previo
Enlace previo = lista;
// Solo busca mientras que i es menor que la cantidad de enlaces
int i = 0;
while (lista.getLlave() != llave && i < elementos) {
// Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) {
// Buscar en el sigenute enlace
previo = lista;
lista = lista.getSiguente();
}
i++
}
if (lista.getLlave != llave) {
// No se encontró
return;
}
// Se encontró
if (lista == this.lista) {
// Si es el primer enlace, cambiarlo al siguente enlace
this.lista = this.lista.getSiguente();
}
else {
// Sino cortar este enlace de la lista
previo.setSiguente(lista.getSiguente());
}
elementos--;
}
}
final public class Enlace {
private int llave;
private Enlace siguente;
public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente;
this.llave = llave;
}
public int getLlave() {
return llave;
}
public Enlace getSiguente() {
return siguente;
}
public void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
}

View File

@ -0,0 +1,39 @@
public void insertar(int llave) {
if (buscar(llave) == null) {
// Crear un enlace nuevo
Enlace nuevo = new Enlace(primer, llave);
if (primer == null) {
// Si el primer enlace es null, el ul
ultimo = nuevo;
}
// El primer es el nuevo.
primer = nuevo;
// El ultimo apunta al primer.
ultimo.setSiguente(primer);
elementos++;
}
}
final public class Enlace {
private int llave;
private Enlace siguente;
public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente;
this.llave = llave;
}
public int getLlave() {
return llave;
}
public Enlace getSiguente() {
return siguente;
}
public void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
}

View File

@ -0,0 +1,54 @@
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 el sigenute enlace
lista = lista.getSiguente();
}
else {
// No se encuentra
return null;
}
}
// Se encontró, devolver el enlace
return lista;
}
else {
// La lista es vacia, devolver null
return null;
}
}
final public class Enlace {
private int llave;
private Enlace siguente;
private Enlace previo;
public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente;
this.llave = llave;
}
public int getLlave() {
return llave;
}
public Enlace getSiguente() {
return siguente;
}
public void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
public Enlace getPrevio() {
return previo;
}
public void setPrevio(Enlace previo) {
this.previo = previo;
}
}

View File

@ -0,0 +1,63 @@
public void eliminar(int llave) {
if (lista != null) {
// Crear una lista temporario para trabajar
Enlace lista = this.lista;
// Guardar el enlace previo
Enlace previo = lista;
while (lista.getLlave() != llave) {
// Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) {
// Buscar en el sigenute enlace
previo = lista;
lista = lista.getSiguente();
}
else {
// No se encuentra la llave
return;
}
}
// Se encontró
if (lista == this.lista) {
// Si es el primer enlace, cambiarlo al siguente enlace
this.lista = this.lista.getSiguente();
if (this.lista.getPrevio() != null) {
this.lista.setPrevio(null);
}
}
else {
// Sino cortar este enlace de la lista
previo.setSiguente(lista.getSiguente());
}
}
}
final public class Enlace {
private int llave;
private Enlace siguente;
private Enlace previo;
public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente;
this.llave = llave;
}
public int getLlave() {
return llave;
}
public Enlace getSiguente() {
return siguente;
}
public void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
public Enlace getPrevio() {
return previo;
}
public void setPrevio(Enlace previo) {
this.previo = previo;
}
}

View File

@ -0,0 +1,43 @@
public void insertar(int llave) {
if (buscar(llave) == null) {
// Crear un enlace nuevo
Enlace nuevo = new Enlace(lista, llave);
if (lista != null) {
// El previo es el nuevo.
lista.setPrevio(nuevo);
}
// Agregar el enlace a la lista
lista = nuevo;
}
}
final public class Enlace {
private int llave;
private Enlace siguente;
private Enlace previo;
public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente;
this.llave = llave;
}
public int getLlave() {
return llave;
}
public Enlace getSiguente() {
return siguente;
}
public void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
public Enlace getPrevio() {
return previo;
}
public void setPrevio(Enlace previo) {
this.previo = previo;
}
}

View File

@ -0,0 +1,45 @@
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 el sigenute enlace
lista = lista.getSiguente();
}
else {
// No se encuentra
return null;
}
}
// Se encontró, devolver el enlace
return lista;
}
else {
// La lista es vacia, devolver null
return null;
}
}
final public class Enlace {
private int llave;
private Enlace siguente;
public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente;
this.llave = llave;
}
public int getLlave() {
return llave;
}
public Enlace getSiguente() {
return siguente;
}
public void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
}

View File

@ -0,0 +1,51 @@
public void eliminar(int llave) {
if (lista != null) {
// Crear una lista temporario para trabajar
Enlace lista = this.lista;
// Guardar el enlace previo
Enlace previo = lista;
while (lista.getLlave() != llave) {
// Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) {
// Buscar en el sigenute enlace
previo = lista;
lista = lista.getSiguente();
}
else {
// No se encuentra la llave
return;
}
}
// Se encontró
if (lista == this.lista) {
// Si es el primer enlace, cambiarlo al siguente enlace
this.lista = this.lista.getSiguente();
}
else {
// Sino cortar este enlace de la lista
previo.setSiguente(lista.getSiguente());
}
}
}
final public class Enlace {
private int llave;
private Enlace siguente;
public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente;
this.llave = llave;
}
public int getLlave() {
return llave;
}
public Enlace getSiguente() {
return siguente;
}
public void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
}

View File

@ -0,0 +1,30 @@
public void insertar(int llave) {
if (buscar(llave) == null) {
// Crear un enlace nuevo
Enlace nuevo = new Enlace(lista, llave);
// Agregar el enlace a la lista
lista = nuevo;
}
}
final public class Enlace {
private int llave;
private Enlace siguente;
public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente;
this.llave = llave;
}
public int getLlave() {
return llave;
}
public Enlace getSiguente() {
return siguente;
}
public void setSiguente(Enlace siguente) {
this.siguente = siguente;
}
}