Es que las doblemente enlazada contiene dos punteros uno apunta al nodo siguiente y otro apunta al nodo anterior y en la simplemente enlazada solo contiene un puntero
para explicar mejor las listas doblemente enlazada observemos el siguiente ejemplo
como podemos observar en la imagen anterior de 12 apunta a nulo, siguiente de 12 apunta a anterior de 57 inicio de 57 apunta a anterior de 95 y siguiente de 95 apunta a nulo, anterior de 95 apunta a siguiente de 57 y anterior de 57 apunta a siguiente de 12
a continuación les mostrare el siguiente ejercicio de lista doblemente enlazadas
ALGORITMOS DE LA CLASE LISTA
Declaramos dos variables que son inicio y fin
de tipo privadas
Luego creamos un constructor
Donde inicio es igual a fin igual a nulo
·
Algoritmo
para saber si la lista está vacía
Método de tipo booleano
Retornamos inicio igual de igual de nulo
*Donde
retornamos verdadero porque la lista esta vacía
·
Algoritmo
para agregar nodo al final
Método tipo void
Si no está vacía
Fin igual a nuevo (elemento, nulo, fin)
Fin de anterior de siguiente igual fin
Entonces
Inicio igual fin igual nuevo (elemento)
·
Algoritmo
para agregar nodo al inicio
Método tipo void
Si no está vacía
Inicio igual nuevo (elemento, inicio, nulo)
Inicio de siguiente de anterior igual inicio
Entonces
Inicio igual fin igual nuevo (elemento)
·
Algoritmo
para mostrar la lista de inicio a fin
Método void
Si no está vacía
Nodo Doble auxiliar igual inicio
Mientras (auxiliar no es igual a nulo)
Datos igual datos más auxiliar de datos
Auxiliar igual auxiliar de siguiente
·
Algoritmo
para mostrar fin de inicio
Método void
Si no está vacía
Nodo Doble auxiliar igual fin
Mientras (auxiliar no es igual a nulo)
Datos igual datos más auxiliar de datos
Auxiliar igual auxiliar de anterior
package
listadoblemente;
import
javax.swing.JOptionPane;
public class ListaDoble {
private NodoDoble inicio,fin;
//CONSTRUCTOR DE LA LISTA
public ListaDoble (){
inicio=fin=null;
}
//METODO PARA SABER SI LA LISTA ESTA VACIA
public boolean estaVacia (){
return inicio == null;
}
//METODO PARA AGREGAR UN NODO AL FINAL
public void agregarAlFinal(int el){
if(!estaVacia()){
fin=new NodoDoble(el,null,fin);
fin.anterior.siguiente = fin;
} else {
inicio=fin=new NodoDoble(el);
}
}
//METODO PARA AGREGAR AL INICIO
public void agregarAlInicio(int el){
if(!estaVacia()){
inicio=new
NodoDoble(el,inicio,null);
inicio.anterior.siguiente = inicio;
} else {
inicio=fin=new NodoDoble(el);
}
}
//METODO PARA MOSTRAR DE INICIO A FIN
public void mostrarListaInicioFin(){
if(!estaVacia()){
String
datos="<-->";
NodoDoble auxiliar=inicio;
while(auxiliar!=null){
datos = datos + "[ "
+ auxiliar.dato + " ]" + "<-->";
auxiliar = auxiliar.siguiente;
}
JOptionPane.showMessageDialog(null,
datos, "Mostrando"
+ "Lista de inicio a
fin",JOptionPane.INFORMATION_MESSAGE);
}
}
//METODO PARA MOSTRAR DE FIN A INICIO
public void mostrarListaFinInicio(){
if(!estaVacia()){
String
datos="<-->";
NodoDoble auxiliar=fin;
while(auxiliar!=null){
datos = datos + "[ "
+ auxiliar.dato + " ]" + "<-->";
auxiliar = auxiliar.anterior;
}
JOptionPane.showMessageDialog(null,
datos, "Mostrando"
+ "Lista de fin a
inicio",JOptionPane.INFORMATION_MESSAGE);
}
}
}
ALGORITMOS DE LA CLASE NODOS
Declaramos
dato, siguiente, anterior de tipo entero
Luego
creamos un constructor para inicializar las variables
Dato
igual a elemento
Siguiente
igual de S
Anterior
igual de A
En el
segundo constructor para cuando no haya nodos
Mandamos
a llamar el elemento
Y le
colocamos nulo
Que
nos dice que no tenemos ningún nodo
package listadoblemente;
public class NodoDoble {
public int dato;
NodoDoble
siguiente,anterior;
//CONSTRUCTOR CUANDO
YA HAY NODOS
public NodoDoble(int
el, NodoDoble s, NodoDoble a){
dato = el;
siguiente = s;
anterior = a;
}
//CONSTRUCTOR CUANDO
NO HAY NODOS
public NodoDoble (int
el){
this(el,null,null);
}
}
ALGORITMOS PARA EL MAIN
- Instanciar objeto de la clase lista
- Declarar variables opción/opción y elemento/el
- iniciar variable opción = 0
-hacer
-un do while donde colocamos las opciones y
donde va ir try case
-Controlar errores (try- catch)
-opción va a ser igual a las opciones de menú
(en este caso son 5
opciones)
-menú de opciones con la variable opción (switch)
-realizar cada una de las opciones dentro del
menú
-mientras opción sea diferente del número de
opciones (en este caso 8)
package
listadoblemente;
import
javax.swing.JOptionPane;
public
class ListaDoblemente {
public static void main(String[] args) {
ListaDoble impLista = new ListaDoble();
int opcion=0;
String el;
do{
try{
opcion =
Integer.parseInt(JOptionPane.showInputDialog(null,""
+"1. Agregar
un elemento al final de la lista\n"
+"2. Agregar
un elemento al final de la lista\n"
+"3. Mostrar los elementos de inicio
a fin\n"
+"4. Mostrar
los elementos de fin a inicio\n"
+"5.
Salir","Opciones del programa",3));
switch(opcion){
case 1: //1. Agregar un elemento
al final de la lista
try{
el=JOptionPane.showInputDialog
(
null,
"Ingreso
el elemento",
"Insertando al final",3
);
impLista.agregarAlFinal(el);
}catch(NumberFormatException n){
JOptionPane.showMessageDialog(null, "Error" + n.getMessage());
}
break;
case 2: //2. Agregar un
elemento al inicio de la lista
try{
el=JOptionPane.showInputDialog
(
null,
"Ingreso el elemento",
"Insertando al inicio",3
);
impLista.agregarAlInicio(el);
}catch(NumberFormatException n){
JOptionPane.showMessageDialog(null, "Error" + n.getMessage());
}
break;
case 3: //3. Mostrar los
elementos de inicio a fin
impLista.mostrarListaInicioFin();
break;
case 4: //4. Eliminar un
elementos de fin a inicio
impLista.mostrarListaFinInicio();
break;
default:
JOptionPane.showMessageDialog(null, "Opcion incorrecta");
break;
case 5://5. Salir
JOptionPane.showMessageDialog(null, "Programa terminado...");
break;
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,
"Error"+ e.getMessage());
}
} while (opcion !=5);
}
}
No hay comentarios.:
Publicar un comentario