Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Juanp Cabezas Semana3
Juanp Cabezas Semana3
DESARROLLO:
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;
};
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.
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;
}
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{
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 ){
}else{
actual = actual.getAnt();
}
}
//como ultimo elementoDescendente
if (actual.getAnt()==null && actual.getElemento2()>elem2){
actual.setAnt(nuevo);
}
}
}
}
}
System.out.println(actual.getElemento1()+"--"+actual.getElemento2());
actual = ultimo;
System.out.println("Listar desde ultimo");
}
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