Está en la página 1de 7

Estrcutura de Datos - Universidad Cesar 10/09/2017

Vallejo Lima Norte

AGENDA:
Estructura de datos dinmica: Punteros y
referencias

Ing. CIP Loncn Salazar, Pierre Paul


Listas Enlazadas y operaciones: insercin,
CURSO: eliminacin, ordenacin de nodos
ESTRUCTURA DE DATOS
Docente: Ing. CIP Loncn Salazar, Pierre Paul

SESIN N 6 2

LISTAS LISTAS ENLAZADAS (SIMPLES)


Son una secuencia de elementos llamados NODOS Son aquellas cuyos nodos contienen un nico campo de enlace y
Cada NODO se encuentra conectado con el siguiente y/o anterior dependiendo de su comportamiento pueden ser:
mediante un apuntador que sirve de ENLACE Tipo COLA
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


Tipo PILA Apuntadores de Lista
Todos los nodos de una lista son del mismo tipo de dato: tipo
CLASE Lista
Dependiendo del nmero de enlaces, una lista puede ser: INICIO FIN
Simple o Doble 8
null null
8
1
2 Direccin de Memoria del
NODO
Dependiendo de la forma en que sus nodos son anexados, una
lista puede ser: ENLADE del
Sin Orden o Con Orden 8 1 2 NODO
Dependiendo de la forma como terminan sus enlaces, una lista Cod: 001 n
1 Cod: 002 n
2 Cod: 003 n
puede ser: u u u
Nom: Juan l Nom: Pedro l Nom: Mara l
Circular o No Circular l l l
Toda Lista debe tener un apuntador llamado INICIO, el cual
3 4
apunta al primer elemento
Objeto contenido en el NODO

LISTAS LISTAS
(IMPLEMENTACIN DE LA CLASE CLIENTE) (IMPLEMENTACIN DE LA CLASE NODO)
public class Cliente implements Serializable public class Nodo_Simple implements Serializable
{ {
private String Codigo = "", Nombre = ""; private Cliente Elemento;
private Nodo_Simple Siguiente;
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul

public Cliente(Object[] Registro)


{ public Nodo_Simple(Cliente Elemento)
Codigo = Registro[0].toString(); {
Nombre = Registro[1].toString(); this.Elemento = Elemento;
} Siguiente = null;
}
public Object[] getRegistro()
{
public Cliente getElemento()
Object[] Registro = {Codigo,Nombre};
{return Elemento;}
return Registro;
public void setElemento(Cliente Elemento)
}
{this.Elemento = Elemento;}
public String getCodigo() {return Codigo;}
public void setCodigo(String Codigo) {this.Codigo = Codigo;} public Nodo_Simple getSiguiente()
5 {return Siguiente;} 6
public String getNombre() {return Nombre;} public void setSiguiente(Nodo_Simple Siguiente)
public void setNombre(String Nombre) {this.Nombre = Nombre;} {this.Siguiente = Siguiente;}
} }

Ing. CIP Loncn Salazar, Pierre Paul 1


Estrcutura de Datos - Universidad Cesar 10/09/2017
Vallejo Lima Norte

LISTAS LISTAS
(IMPLEMENTACIN BSICA DE UNA LISTA) (RECORRIDO DE UNA LISTA)
public class Lista_Simple implements Serializable Lista 8 1 2
{ INICIO FIN Cod: 001 n
1 Cod: 002 n
2 Cod: 003 n
private Nodo_Simple Inicio, Fin; u u u
8
null null
8
1
2 Nom: Juan l Nom: Pedro l Nom: Mara l

Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


public Lista_Simple() l l l
{
Inicio = Fin = null;
} Auxiliar INICIO // Auxiliar toma el valor de Inicio
8 8 Auxiliar = Inicio;
public Nodo_Simple getFin() {return Fin;}
public void setFin(Nodo_Simple Fin) {this.Fin = Fin;} Auxiliar Auxiliar
// Mientras Auxiliar no sea nulo
1
8 8 1
public Nodo_Simple getInicio() {return Inicio;} while(Auxiliar != null)
public void setInicio(Nodo_Simple Inicio) {this.Inicio = Inicio;} {
Auxiliar Auxiliar // Auxiliar toma el valor del
public void Agregar_Fin(Cliente Elemento) {...} 2
1 1 2 // puntero Siguiente
public Nodo_Simple Busca_Codigo(String codigo) {...} Auxiliar = Auxiliar.getSiguiente();
public void Elimina_Nodo(Nodo_Simple Auxiliar) {...} 7 } 8
Auxiliar Auxiliar
public void OrdenarSeleccion_PorNombre() {...}
} null
2 2 null

LISTAS LISTAS
(IMPLEMENTACIN RECORRIDO - CONTAR) (IMPLEMENTACIN RECORRIDO - SUMAR)
public int Contar() public double Suma_Sueldo()
{ {
// Empieza al inicio de la lista // Empieza al inicio de la lista
Nodo_Simple_Cliente Auxiliar = Inicio; Nodo_Simple_Empleado auxiliar = Inicio;
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


// Contador tipo entero // Acumulador tipo double
int x = 0; double suma = 0;

// Mientras no sea null // Mientras no sea null


while(Auxiliar != null) while(auxiliar != null)
{ {
// Aumenta el contador // Extrae el sueldo y lo acumula
x++; suma = suma + auxiliar.getElemento().getSueldo();
// Pasa al siguiente nodo // Pasa al siguiente nodo
Auxiliar = Auxiliar.getSiguiente(); auxiliar = auxiliar.getSiguiente();
} }
// Termin la lista y retorna la suma
// Termin la lista y retorna el contador 9 return suma; 10
return x; }
}

LISTAS LISTAS
(IMPLEMENTACIN RECORRIDO - SUMAR) (IMPLEMENTACIN RECORRIDO - PRECIO)
public double Suma_Sueldo() public void Incrementa_Precio(double tasa )
{ {
// Acumulador tipo double // Empieza al inicio de la lista
double suma = 0; Nodo_Simple_Producto auxiliar = Inicio;
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul

// Mientras no sea null // Variable para el precio


for(Nodo_Simple_Empleado aux = Inicio ; aux != null ; aux = aux.getSiguiente()) double precio;
{
// Extrae el sueldo y lo acumula // Mientras no sea null
suma = suma + aux.getElemento().getSueldo(); while(auxiliar != null)
} {
// Termin la lista y retorna la suma // Extrae el precio
return suma; precio = auxiliar.getElemento().getPrecio();
} // Calcula el nuevo precio
precio = precio * ( 1 + tasa );
// Actualiza el precio
auxiliar.getElemento().setPrecio(precio);
11 // Pasa al siguiente nodo 12
auxiliar = auxiliar.getSiguiente();
}
}

Ing. CIP Loncn Salazar, Pierre Paul 2


Estrcutura de Datos - Universidad Cesar 10/09/2017
Vallejo Lima Norte

LISTAS LISTAS
(IMPLEMENTACIN RECORRIDO - PRECIO/CAT) (INSERTAR UN ELEMENTO) AL INICIO
public void Incrementa_Precio(double tasa , String Categoria) Lista 23 19
{ n
// Empieza al inicio de la lista FIN Cod: 130 19 Cod: 218
INICIO u
Nodo_Simple_Producto auxiliar = Inicio;
23 null
19
8
1 Nom: Juan Nom: Luis l

Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


l
// Variable para el precio
double precio;
// Mientras no sea null Nuevo
while(auxiliar != null)
{ 25 23 19
// Compara Categora del producto con Categora recibida 23
n n // El nodo NUEVO apunta
if(auxiliar.getElemento().getCategoria().equals(Categoria)) Cod: 75 Cod: 130 19 Cod: 218
u u // al nodo INICIO
{ Nom: Ines l Nom: Juan Nom: Luis l
// Extrae el precio Nuevo.setSiguiente(Inicio);
l l
precio = auxiliar.getElemento().getPrecio();
// Calcula el nuevo precio
precio = precio * ( 1 + tasa );
// Actualiza el precio Lista
auxiliar.getElemento().setPrecio(precio); // Se actualiza el nodo INICIO
} INICIO FIN Inicio = Nuevo;
// Pasa al siguiente nodo 23
25 19
auxiliar = auxiliar.getSiguiente(); 13 14
}
}

LISTAS LISTAS
(INSERTAR UN ELEMENTO) AL FINAL (INSERTAR UN ELEMENTO) INTERMEDIO
Lista 23 19 Lista 23 19
Cod: 130 19 Cod: 218 n Cod: 130 19 Cod: 218 n
INICIO FIN u INICIO FIN u
23 null
19
8
1 Nom: Juan Nom: Luis l 23 null
19
8
1 Nom: Juan Nom: Luis l
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


l l

Nuevo Nuevo // Establecemos el nodo


// ANTERIOR

Ant = Inicio;
23 19 25 25
// El nodo FIN apunta
Cod: 130 19 Cod: 218 25
n Cod: 75 n Cod: 75 n // Obtenemos el nodo
u u // al nodo NUEVO u
Nom: Juan Nom: Luis l Nom: Ines l Nom: Ines l // SIGUIENTE
Fin.setSiguiente(Nuevo);
l l l Sig = Ant.getSiguiente();
Anterior Siguiente
// Enlazamos el nodo NUEVO
Lista // con el nodo SIGUIENTE
// Se actualiza el nodo FIN 23 19
25 19 Nuevo.setSiguiente(Sig);
INICIO FIN Fin = Nuevo; Cod: 130 25
19 Cod: 75 19
Cod:218 n Cod: 218 n
u u // Enlazamos el nodo ANTERIOR
23 25
19 15 Nom: Juan Luis l
Nom: Ines Nom: Luis l 16
l l // con el nodo NUEVO
Ant.setSiguiente(Nuevo);

LISTAS LISTAS
(INSERTAR UN ELEMENTO) AL INICIO (INSERTAR UN ELEMENTO) AL FINAL
public void Agregar_Inicio(Cliente Elemento) public void Agregar_Fin(Cliente Elemento)
{ {
//Crear Nodo //Crear Nodo
Nodo_Simple Nuevo = new Nodo_Simple(Elemento); Nodo_Simple Nuevo = new Nodo_Simple(Elemento);
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul

if(Inicio == null) //Pregunta si no hay nodos if(Inicio == null) //Pregunta si no hay nodos
{ {
//Se apunta al nico nodo //Se apunta al nico nodo
Inicio = Fin = Nuevo; Inicio = Fin = Nuevo;
} }
else else
{ {
//se agrega al inicio de la lista //se agrega al final de la lista
Nuevo.setSiguiente(Inicio); Fin.setSiguiente(Nuevo);
//se actualiza el inicio de la lista //se actualiza el final de la lista
Inicio = Nuevo; Fin = Nuevo;
} }
} 17 } 18

Ing. CIP Loncn Salazar, Pierre Paul 3


Estrcutura de Datos - Universidad Cesar 10/09/2017
Vallejo Lima Norte

LISTAS LISTAS
(INSERTAR UN ELEMENTO) INTERMEDIO (BUSCAR UN ELEMENTO)
public void Agregar_Intermedio(Nodo_Simple Anterior, Cliente Elemento) Lista 23 25 19
{ Cod: 130 25 Cod: 75 19 Cod: 218 n
//Crear Nodo INICIO FIN u
Nodo_Simple Nuevo = new Nodo_Simple(Elemento); 23 null
19
8
1 Nom: Juan Nom: Ines Nom: Luis l

Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


l
if(Anterior != null) //Pregunta si no hay nodos
{ // Dato a Buscar
Auxiliar Auxiliar Auxiliar Nombre = Luis";
// Obtenemos el nodo SIGUIENTE
Nodo_Simple Siguiente = Anterior.getSiguiente(); // Nos ubicamos al inicio
// Enlazamos el nodo NUEVO con el nodo SIGUIENTE 23 25 19
19 n Aux = Inicio;
Nuevo.setSiguiente(Siguiente); Cod: 130 25 Cod: 75 Cod: 218
u
// Enlazamos el nodo ANTERIOR con el nodo NUEVO Nom: Juan Nom: Ines Nom: Luis l
Nom // Mientras no sea null
Anterior.setSiguiente(Nuevo); l while(Aux != null)
} {
}
Elemento = Aux.getElemento();
Elemento Dato = Elemento.getNombre();
Encontrado if(Dato.equals(Nombre))
return Aux;
19 20
Aux = Aux.getSiguiente();
}
return null;

LISTAS LISTAS
(BUSCAR UN ELEMENTO) (ELIMINAR UN ELEMENTO) AL INICIO
public Nodo_Simple Busca_Codigo(String codigo) Lista 23 25 19
{ Cod: 130 25 Cod: 75 19 Cod: 218 n
// empieza al inicio de la lista INICIO FIN u
Nodo_Simple auxiliar = Inicio; 23 null
19
8
1 Nom: Juan Nom: Ines Nom: Luis l
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


l
// mientras no sea null
while(auxiliar != null) Auxiliar (Nodo a Eliminar)
{
if(codigo.equals(auxiliar.getElemento().getCodigo()) ) 23 25 19
return auxiliar; // retorna nodo encontrado Cod: 130 25 Cod: 75 19 Cod: 218 n
else // pasa al siguiente u
auxiliar = auxiliar.getSiguiente(); Nom: Juan Nom: Ines Nom: Luis l
l
}
// termin la lista y no lo encontr
return null; Lista // Se actualiza el nodo INICIO
}
INICIO FIN Inicio = Auxiliar.getSiguiente();

21 23
25 19 22

LISTAS LISTAS
(ELIMINAR UN ELEMENTO) AL FINAL (ELIMINAR UN ELEMENTO) INTERMEDIO
Lista 23 25 19 Lista 23 25 19
Cod: 130 25 Cod: 75 19 Cod: 218 n Cod: 130 25 Cod: 75 19 Cod: 218 n
INICIO FIN u INICIO FIN u
23 null
19
8
1 Nom: Juan Nom: Ines Nom: Luis l 23 null
19
8
1 Nom: Juan Nom: Ines Nom: Luis l
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul

l l

Anterior Auxiliar (Nodo a Eliminar) Anterior Siguiente // Obtenemos el nodo


// SIGUIENTE
// El nodo Anterior
23 25 19 Sig = Aux.getSiguiente();
n
19 // apunta a null 23 25 19
Cod: 130 25 Cod: 75 Cod: 218 n 19 n
u u Anterior.setSiguiente(null); Cod: 130 25 Cod: 75 Cod: 218
Nom: Juan Nom: Ines l Nom: Luis l u // Enlazamos el nodo ANTERIOR
l l Nom: Juan Nom: Ines Nom: Luis l
l // con el nodo SIGUIENTE
Ant.setSiguiente(Sig);

Lista (Auxiliar)
INICIO FIN // Se actualiza el nodo FIN Nodo a Eliminar
Fin = Anterior;
23 25
19 23 24

Ing. CIP Loncn Salazar, Pierre Paul 4


Estrcutura de Datos - Universidad Cesar 10/09/2017
Vallejo Lima Norte

LISTAS LISTAS
(ELIMINAR UN ELEMENTO) (ORDENAR NODOS)
public void Elimina_Nodo(Nodo_Simple Auxiliar) public void OrdenarSeleccion_PorNombre()
{ {
if(Auxiliar == Inicio) // Si el nodo a eliminar es el inicial Class_Cliente Temp;
{ Class_Nodo_Simple Menor, Auxiliar_J, Auxiliar_X;
Inicio = Auxiliar.getSiguiente(); Auxiliar_J = Inicio;

Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


} while(Auxiliar_J != null)
else {
{ Menor = Auxiliar_J;
Nodo_Simple Anterior = Inicio; Auxiliar_X = Menor.getSiguiente();
// Hallar el nodo anterior al que se desea eliminar while(Auxiliar_X != null)
while(Anterior.getSiguiente() != Auxiliar) {
{ if(Auxiliar_X.getElemento().getNombre().compareTo
Anterior = Anterior.getSiguiente(); (Menor.getElemento().getNombre()) < 0)
} {
if(Auxiliar == Fin) // Si el nodo a eliminar es el ltimo Menor = Auxiliar_X;
{ }
Anterior.setSiguiente(null); Auxiliar_X = Auxiliar_X.getSiguiente();
Fin = Anterior; }
} Temp = Auxiliar_J.getElemento();
else // Si el nodo a eliminar es un nodo intermedio Auxiliar_J.setElemento(Menor.getElemento());
{ Menor.setElemento(Temp);
Nodo_Simple Siguiente = Auxiliar.getSiguiente(); Auxiliar_J = Auxiliar_J.getSiguiente();
Anterior.setSiguiente(Siguiente); 25 } 26
} }
}
}

EJERCICIO 01 PARTE 1
Desarrolle una Aplicacin que permita gestionar
datos sobre mascotas en forma de una Lista
Simple:
Cree una Clase Mascota:
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


Con los siguientes atributos:
Cdigo (String)

Nombre (String)

Raza (String)

Propietario (String)

Con los mtodos siguientes mtodos

Constructor en blanco

Constructor que llama al mtodo setRegistro

Recibe un arreglo de objetos


setRegistro Recibe un arreglo de objetos

getRegistro Devuelve un arreglo de objetos


27 28
Getter y Setter de cada Atributo

EJERCICIO 01 PARTE 1 EJERCICIO 01 PARTE 2


import java.io.Serializable;
Desarrolle una Aplicacin que permita gestionar
public class Mascota implements Serializable
{ datos sobre mascotas en forma de una Lista Simple:
private String Codigo = "", Nombre = "", Raza = "", Propietario = "";
public Mascota( ) {} Cree una Clase NodoMascota:
public Mascota(Object[] Registro) { setRegistro(Registro); } Con los siguientes atributos:
public final void setRegistro(Object[] Registro)
Elemento (Mascota)
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul

{
Codigo = Registro[0].toString();
Nombre = Registro[1].toString(); Siguiente (NodoMascota)
Raza = Registro[2].toString();
Con los mtodos siguientes mtodos
Propietario = Registro[3].toString();
} Constructor Recibe una instancia de la clase Mascota
public Object[] getRegistro()
{ Getter y Setter de cada Atributo
Object[] Registro = {Codigo,Nombre,Raza,Propietario};
return Registro;
}
public String getCodigo() {return Codigo;}
public void setCodigo(String Codigo) {this.Codigo = Codigo;}
public String getNombre() {return Nombre;}
public void setNombre(String Nombre) {this.Nombre = Nombre;}
public String getRaza() {return Raza;}
public void setRaza(String Raza) {this.Raza = Raza;}
public String getPropietario() {return Propietario;}
29
public void setPropietario(String Propietario) {this.Propietario = Propietario;} 30
}

Ing. CIP Loncn Salazar, Pierre Paul 5


Estrcutura de Datos - Universidad Cesar 10/09/2017
Vallejo Lima Norte

EJERCICIO 01 PARTE 2 EJERCICIO 01 PARTE 3


Desarrolle una Aplicacin que permita gestionar
import java.io.Serializable;

public class NodoMascota implements Serializable
{ datos sobre mascotas en forma de una Lista
private Mascota Elemento;
private NodoMascota Siguiente;
Simple:
public NodoMascota(Mascota Elemento)
Cree una Clase ListaMascota:

Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


{ Con los siguientes atributos:
this.Elemento = Elemento;
Siguiente = null; Inicio (NodoMascota)
}
Fin (NodoMascota)

public Mascota getElemento() Con los mtodos siguientes mtodos


{return Elemento;}
public void setElemento(Mascota Elemento) Constructor Inicializa los atributos en null;
{this.Elemento = Elemento;}
Getter y Setter de cada Atributo

public NodoMascota getSiguiente() AgregarFin Recibe una instancia de la clase Mascota


{return Siguiente;}
public void setSiguiente(NodoMascota Siguiente)
y la agrega a la lista como un nuevo nodo.
{this.Siguiente = Siguiente;}
}

31 32

EJERCICIO 01 PARTE 3 EJERCICIO 01 PARTE 4


Desarrolle una Aplicacin que permita gestionar
import java.io.Serializable;

public class ListaMascota implements Serializable
{ datos sobre mascotas en forma de una Lista
private NodoMascota Inicio, Fin;
Simple:
public ListaMascota()
{ Para la Clase ListaMascota:
Inicio = Fin = null;
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


} Cree el Siguiente Mtodo
public NodoMascota getFin() {return Fin;} BuscarCodigo Recibe un dato tipo String y retorna la
public void setFin(NodoMascota Fin) {this.Fin = Fin;} instancia de la clase NodoMascota cuando encuentra el
public NodoMascota getInicio() {return Inicio;}
public void setInicio(NodoMascota Inicio) {this.Inicio = Inicio;}
cdigo y retorna null cuando no haya coincidencia.
public void Agregar_Fin(Mascota Elemento)
{
NodoMascota Nuevo = new NodoMascota(Elemento);
if(Inicio == null)
{
Inicio = Fin = Nuevo;
}
else
{
Fin.setSiguiente(Nuevo);
Fin = Nuevo;
}
33 34
}
}

EJERCICIO 01 PARTE 4 EJERCICIO 01 PARTE 5


public NodoMascota BuscarCodigo(String codigo) Desarrolle una Aplicacin que permita gestionar
{
NodoMascota auxiliar = Inicio; datos sobre mascotas en forma de una Lista
while(auxiliar != null)
Simple:
{
if(codigo.equals(auxiliar.getElemento().getCodigo()) )
Para la Clase ListaMascota:
Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul

return auxiliar; Cree el Siguiente Mtodo


else
auxiliar = auxiliar.getSiguiente(); Eliminar Recibe un dato tipo NodoMascota y procede
} a eliminarlo de la lista.
return null;
}

35 36

Ing. CIP Loncn Salazar, Pierre Paul 6


Estrcutura de Datos - Universidad Cesar 10/09/2017
Vallejo Lima Norte

EJERCICIO 01 PARTE 5 EJERCICIO 01 PARTE 6


public void Eliminar(NodoMascota Auxiliar) Desarrolle una Aplicacin que permita gestionar
{
if(Auxiliar == Inicio) datos sobre mascotas en forma de una Lista
{
Inicio = Auxiliar.getSiguiente();
Simple:
}
else
Disee el Siguiente Formulario:

Ing. CIP Loncn Salazar, Pierre Paul

Ing. CIP Loncn Salazar, Pierre Paul


{
NodoMascota Actual = Inicio;

while(Actual.getSiguiente() != Auxiliar)
{
Actual = Actual.getSiguiente();
}
if(Auxiliar == Fin)
{
Actual.setSiguiente(null);
Fin = Actual;
}
else
{
Actual.setSiguiente(Auxiliar.getSiguiente());
}
}
}
37 38

EJERCICIO 01 PARTE 7
Desarrolle una Aplicacin que permita gestionar
datos sobre mascotas en forma de una Lista
Simple:
Disee el Siguiente Dialogo:
Ing. CIP Loncn Salazar, Pierre Paul

39

Ing. CIP Loncn Salazar, Pierre Paul 7

También podría gustarte