Professional Documents
Culture Documents
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
OBJETIVOS:
Realizar práctica y análisis sobre la implementación de listas, mediante la implementación de las listas doblemente enlazadas, y con
la ayuda de los anteriores métodos ya resueltos de la lista simple, para tener un mejor manejo sobre lo métodos esenciales que tiene
cada lista.
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
OBJETIVOS ESPECIFICOS
Realizar las respectivas características principales de las clases Nodo,
Crear las clases que se van a usar para la implementación de lista doblemente enlazada,
Crear los métodos respectivos de cada lista, ya sea los principales de agregar, eliminar y buscar elemento.
Hacer capturas de pantalla de las diferentes compilaciones.
MATERIALES:
EQUIPOS: Computador
MUESTRA: N/A
INSTRUCCIONES:
}else{
if(pos==size-1){
Nodo<T> ant=getNodo(pos-1);
ant.setSiguiente(null);
this.ultimo=ant;
}
if(pos==0){
Nodo<T> sig=getNodo(1);
this.primero.setSiguiente(null);
this.primero=sig;
}
if(pos>=1&& pos<size-1){
Nodo<T> ant=getNodo(pos-1);
Nodo<T> sig=getNodo(pos+1);
ant.setSiguiente(sig);
}
}
this.size--;
}
public Nodo<T> getNodo(int pos){
if(pos>=0&&pos<size){
Nodo<T> aux=primero;
for(int i=0;i<pos;i++){
aux=aux.getSiguiente();
}
return aux;
}else{
return null;
}
}
public boolean modify(T vBuscar,T vRemplazo){
int pos=find(vBuscar);
if(pos!=-1){
Nodo<T> nodo=getNodo(pos);
nodo.setDato(vRemplazo);
return true;
} else {
return false;
}
}
@Override
public String toString() {
if(size>0){
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
return primero.toString();
} else{
return "la lista esta vacia";
}
}
}
Clase NODO
En la clase Nodo, debemos tomar en cuenta el dato, agregar el mismo tipo de nodo un siguiente y un anterior, esto es muy
importante al momento de usar lista doblemente enlazada.
Como en cualquier practica se crean los meotodos getts y setts de acuerdo a los atributos.
Ahora el método que se va a imprimir los datos del nodo en el que se va a almacenar, en este caso tendremos el dato anterior, el
dato del nodo y el dato del siguiente nodo.
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
CLASE LISTA
En el siguiente elemento de isEmpty, nos mostrara si la lista esta vacía y nos retornara verdadero en caso de que esta este vacía
y falso en caso de que si se encuentre elementos.
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
Como parametro tendremos el elemento que se desea eliminar, entonces se obtiene el dato del siguiente elemento,
y lo guarda en el primero, mientras que el anterior eliminado a ese se cada como null.
METODO MODIFICAR
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
Para el método de modificar tomamos en cuenta que tenemos dos parámetros el dato que se desea remplazar y el dato que va a
remplazar el elemento.
Para eso primero tenemos que buscar el dato dentro de la lista, una vez encontrado solo se le asigna el dato que deseamos a ese
elemento.
De igual manera la posición en la que se encuentra dicho dato no debe ser diferente de -1, es decir que dato al que se remplaza si
debe existir, caso contrario no se remplazaría por nada.
RESULTADOS OBTENIDOS:
Se realizaron los métodos principales de cada lista, y se obtuvo como resultado la lista de elementos
implementados ya los métodos esenciales.
Para mostrar los datos de los elementos ingresados en nuestros nodos debemos crear una clase que nos
actúe como MAIN, en este caso la llamaremos clase ListaDoblementeEnlazada.
Esta clase actuara únicamente como main, en la cual debemos crear una variable que llame a los métodos
creados en la otra clase, en esta se agregaran dos elementos, 20 en la posición 1, y el elemento 9 y 8 en la
posición 2.
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
También se mostrarán si la lista está vacía isEmpty y cuantos elementos contiene Size.
Para buscar los datos tenemos que usar el método Find e ingresar el elemento que queramos buscar y
continuación se mostrara la posición en la que está.
Ahora usamos el método addAgregarEspecifica en la cual tiene dos parámetros en elemento que haya que
ingresar y la posición en la que se quiere que encuentre.
Ahora para comprobar, tenemos que volver a preguntar sobre las posiciones de los elementos.
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
Ahora usaremos el método EliminarDato el cual tiene como parámetro de ingreso el elemento que se
desea eliminar. Una vez eliminada el elemento, volvemos a mostrar la lista para verificar si se elimino
correctamente.
Ahora tendremos que usar el método modificarElemento el cual tendrá como parámetro el elmento que
deseamos a modificar y el elemento que se desea remplazar, de igual manera tenemos que mostrar la lista
para ver si el método funciona correctamente.
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
CONCLUSIONES:
En conclusión, la práctica de laboratorio se la realizo con éxito. Ya que las listas enlazadas nos permiten
almacenar datos de una forma organizada, también es una estructura TDA dinámica lo cual quiere decir que
es una estructura de tipo de datos abstracto.
Cada nodo de la lista doblemente enlazada contiene dos punteros de forma que uno apunta al siguiente
nodo y el otro predecesor permite que se pueda recorrer la lista en ambos sentidos.
La lista doblemente enlazada es que el enlace anterior al primer nodo apunta al último y el enlace siguiente
al último nodo, apunta al primero. Y las inserciones y eliminación pueden ser realizadas desde cualquier
punto en acceso al nodo más cercano.
Las listas enlazadas permiten almacenar información en posiciones de memoria que no sean contiguas;
para almacenar la información contienen elementos llamados nodos. Estos nodos poseen dos campos uno
para almacenar la información o valor del elemento y otro para el enlace que determina la posición del
siguiente elemento o nodo de la lista.
RECOMENDACIONES:
Tomar en cuenta los métodos que se van a implementar de acuerdo a la lista doblemente enlazada
ya que, a comparación de lista simple, este añade un atributo más al nodo, el cual es el dato
anterior.
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
Realizar los métodos de la forma correcta de acuerdo a lo que se determine el concepto sobre lista
doblemente enlazada y tener en cuenta cada característica que pide este tipo de lista nueva a
implementar.
ANEXO
CODIGO
CLASE Main_Lista
public class Main_Lista {
public static void main(String[] args) {
Lista_Doblemente_Enlazada element=new Lista_Doblemente_Enlazada();
element.addAgregar(20, 1);
element.addAgregar(9, 2);
element.addAgregar(8, 2);
System.out.println("Lista vacia: "+element.isEmpty());
System.out.println("Cuantos elementos: "+element.Size());
System.out.println("El elemento 9 esta en la poicion: "+element.buscarElemento(9));
System.out.println("El elemento 20 esta en la poicion: "+element.buscarElemento(20));
System.out.println("\n Los elementos agregados son:");
element.VerLista();
System.out.println("\n Se agrega el elemento 15 en 1");
element.addAgregarEspecifica(15, 1);
element.VerLista();
System.out.println("\n Ahora vemos las nuevas posiciones");
System.out.println("El elemento 20 esta en la poicion: "+element.buscarElemento(20));
System.out.println("El elemento 9 esta en la poicion: "+element.buscarElemento(9));
System.out.println("El elemento 20 elimnado de la lista ");
element.EliminarDato(20);
element.VerLista();
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
CLASE Main_Lista
public class Lista_Doblemente_Enlazada<T> {
//Atributos
private Nodo primero;
private Nodo ultimo;
private int size;
// Contructor
public Lista_Doblemente_Enlazada(){
this.primero=null;
this.ultimo=null;
this.size=0;
}
this.primero = primero;
}
//Funciones propias
public int Size(){
return this.size;
}
//--------------------------------------------------------------
public boolean isEmpty(){
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
return size==0;
}
/**
* @param elemento
* @param iniofin 1 para el inicio y 2 para final
*/
public void addAgregar(T elemento, int dato){
Nodo<T> aux=new Nodo<T>(elemento);
Nodo<T> casoFinal=primero;
if(size==0){
primero=aux;
ultimo=aux;
}
else{
//Entonces desea ingresar al ultimo
if(dato==2){
//Si es que no hay nadie ocupando la posición final
if(primero==null){
primero = aux;
}
else{
while(casoFinal.getSiguiente() != null){
casoFinal = casoFinal.getSiguiente();
}
casoFinal.setSiguiente(aux);
aux.setAnterior(casoFinal);
}
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
}
//Entonces desea ingresar al inicio
if(dato==1)
{
//Si es que no hay nadie ocupando la posición inicial
if(primero==null){
primero = aux;
}
else{
aux.setSiguiente(primero);
primero.setAnterior(aux);
primero = aux;
}
}
}
this.size++;
}
if(pos == 1){
addAgregar(elemento, 1);
return;
}
Nodo<T> pri = primero;
UNIVERSIDAD DE LAS FUERZAS ARMADAS – ESPE
CÓDIGO: SGC.DI.505
VERSIÓN: 1.0
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN FECHA ÚLTIMA
REVISIÓN: 26/10/16
}
}else{
des = aux;
aux = aux.getSiguiente();
}
}
}
this.size--;
}
{
System.out.print("NO HAY NADA");
return;
}
System.out.print("[" + ptr.getAnterior() +", "+ primero.getDato()+ " , ");
ptr = primero.getSiguiente();
while (ptr.getSiguiente() != null)
{
System.out.print(ptr.getDato()+ " , ");
ptr = ptr.getSiguiente();
}
System.out.print(ptr.getDato()+ "," + ptr.getSiguiente() + "] ");
}
int pos=buscarElemento(vBuscar);
if(pos!=-1){
Nodo<T> nodo=getNodo(pos);
nodo.setDato(vRemplazo);
return true;
} else {
return false;
}
}
FIRMAS