Está en la página 1de 6

Universidad Israel

DEPARTAMENTO: Ciencias de la Ingeniería PROFESOR: Mg. Luis Fernando Aguas B.


CARRERA: Sistemas de Información ESTUDIANTE: Juan Pablo Cabezas Torres
CURSO: Quinto PARALELO: “A“ DESCRIPCIÓN: Tarea Semana 3
ASIGNATURA: Estructuras de Datos

TEMA: LISTAS DOBLEMENTE ENLAZADAS

DESARROLLO:

¿Qué son las listas doblemente enlazas?

Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos
enlaces, uno al nodo siguiente, y otro al anterior.

Las listas doblemente enlazadas no necesitan un nodo especial para acceder a ellas,
pueden recorrerse en ambos sentidos a partir de cualquier nodo, esto es porque a
partir de cualquier nodo, siempre es posible alcanzar cualquier nodo de la lista, hasta
que se llega a uno de los extremos.

struct nodo {
int dato;
struct nodo *siguiente;
struct nodo *anterior;
};

¿Para qué sirven las listas doblemente enlazadas?

Como podemos observar en el gráfico anterior el movimiento a través de listas


doblemente enlazadas es más sencillo, y como veremos las operaciones de búsqueda,
inserción y borrado, también tienen más ventajas.

una lista doblemente encadenada tiene dos punteros por cada nodo, uno apunta al
nodo siguiente y otro al nodo anterior por lo tanto tendremos un puntero (raiz) que
tiene la dirección del primer nodo. El puntero siguiente del último nodo igual que las
1

Ciencias de la Ingeniería
listas simplemente encadenadas apunta a null, y el puntero anterior del primer nodo
apunta a null.
Se pueden plantear Listas tipo pila, cola y genéricas con enlace doble.
Hay que tener en cuenta que el requerimiento de memoria es mayor en las listas
doblemente encadenadas ya que tenemos dos punteros por nodo.

 Es un tipo de lista enlazada que permite moverse hacia delante y hacia atrás.
 Cada nodo de una lista doblemente enlazada tiene dos enlaces, además de los
campos de datos. Un enlace, el derecho, se utiliza para navegar la lista hacia
delante. El otro enlace, el izquierdo, se utiliza para navegar la lista hacia atrás.
 Las Listas pueden navegarse hacia delante y hacia atrás.
 Las Listas pueden crear, actualizar y eliminar elementos.
 En las Listas la posición de los elementos es relevante.
 Las Listas admiten elementos duplicados.
 Las Listas tienen dos protocolos, uno secuencial y el otro directo.

A continuación, un ejemplo completo de como hacer una lista doblemente enlazada

public class MyClass {


public static void main(String args[]) {
System.out.println("Comenzamos");
listaDoble n1=new listaDoble();

System.out.println("insertar 2-20");
n1.insertar(2,20);
n1.listar();

System.out.println("insertar 1-10");
n1.insertar(1,10);
n1.listar();
System.out.println("insertar 3-15");
n1.insertar(3,15);
n1.listar();
System.out.println("insertar 0-40");
n1.insertar(0,40);
n1.listar();

}
}
class Nodo{
private int elemento1;
private int elemento2;
private Nodo siguiente;
private Nodo anterior;
1

Ciencias de la Ingeniería
public Nodo (int elem1,int elem2, Nodo sig, Nodo ant){
elemento1 = elem1;
elemento2 = elem2;
siguiente = sig;
anterior=ant;
}
public int getElemento1(){
return elemento1;
}
public int getElemento2(){
return elemento2;
}
public Nodo getSig(){
return siguiente;
}
public Nodo getAnt(){
return anterior;
}
public void setElemento1(int elem1){
elemento1 = elem1;
}
public void setElemento2(int elem2){
elemento2 = elem2;
}
public void setSig(Nodo sig){
siguiente = sig;
}
public void setAnt(Nodo ant){
anterior= ant;
}
}

class listaDoble{
private Nodo primero;
private Nodo ultimo;
private int numElem;
public listaDoble(){
ultimo=null;
primero = null;
numElem = 0;
}

public void insertar(int elem1,int elem2){


Nodo nuevo = new Nodo(elem1,elem2, null,null);
//Insertar primer elemento de la lista

if (primero == null){
primero=nuevo;
ultimo=nuevo;
1

Ciencias de la Ingeniería
}
//Insertar Segundo Elemento
else if (primero.getSig()==null){
//orden ascendente puntero primero
if (primero.getElemento1()<elem1){
primero.setSig(nuevo);
}else{
nuevo.setSig(primero);
primero=nuevo;
}
//orden descendente puntero último
if ( ultimo.getElemento2()>elem2){
ultimo.setAnt(nuevo);

}else{
nuevo.setAnt(ultimo);
ultimo=nuevo;
}
}
//insertar elementos sucesivos
else{

Nodo actual = primero;


//como primer elemento ascendente
if (primero.getElemento1()>elem1){
nuevo.setSig(primero);
primero=nuevo;
}
else{
while (actual.getSig()!=null ){

if(actual.getSig().getElemento1() > elem1)


{
nuevo.setSig(actual.getSig());

actual.setSig(nuevo);

actual=nuevo.getSig();

}else{
actual = actual.getSig();
}
}
//como ultimo elemento Ascendente
if (actual.getSig()==null && actual.getElemento1()<elem1){
actual.setSig(nuevo);
}
}
actual=ultimo;
// Como primer elemento Descendente
1

if (ultimo.getElemento2()<elem2){

Ciencias de la Ingeniería
nuevo.setAnt(ultimo);
ultimo=nuevo;
}else{
while (actual.getAnt()!=null ){

if(actual.getAnt().getElemento2() < elem2)


{
nuevo.setAnt(actual.getAnt());
actual.setAnt(nuevo);
actual=nuevo.getAnt();

}else{
actual = actual.getAnt();
}
}
//como ultimo elementoDescendente
if (actual.getAnt()==null && actual.getElemento2()>elem2){
actual.setAnt(nuevo);

}
}
}
}

public void listar(){


Nodo actual = primero;

System.out.println("Listar desde primero");


while (actual.getSig()!= null){
System.out.println(actual.getElemento1()+"--"+actual.getElemento2());
actual = actual.getSig();

}
System.out.println(actual.getElemento1()+"--"+actual.getElemento2());

actual = ultimo;
System.out.println("Listar desde ultimo");

while (actual.getAnt()!= null){


System.out.println(actual.getElemento1()+"--"+actual.getElemento2());
actual = actual.getAnt();

}
System.out.println(actual.getElemento1()+"--"+actual.getElemento2());

}
}
1

Ciencias de la Ingeniería
COMENTARIO:

Las listas doblemente enlazadas tienen una particularidad que nos ayuda para
inserción o borrado de datos de manera más efectiva y fácil, dicha particularidad es
que tiene dos punteros el uno apunta al nodo anterior y el otro al nodo siguiente así
podemos “navegar” dentro de la lista de manera más ágil.

BIBLIOGRAFÍA:
Coronado, Salvador Pozo. c.conclase.ne. 09 de 2001. http://c.conclase.net/edd/?
cap=005 (último acceso: 24 de 10 de 2020).
desconocido. www.fceia.unr.edu.ar. s.f.
https://www.fceia.unr.edu.ar/estruc/2005/listendo.htm (último acceso: 24 de 10
de 2020).
Enriquez, Curros. www.deltapci.com. s.f. https://www.deltapci.com/java-listas-
doblemente-enlazadas/ (último acceso: 24 de 10 de 2020).

Ciencias de la Ingeniería

También podría gustarte