Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorio de
Programacin IV
Semestre 4
Laboratorio de programacin IV
Laboratorio de
programacin IV
Semestre 4
Laboratorio de programacin IV
Tabla de contenido
Pgina
Introduccin
Conceptos previos
Logros
Laboratorio de Listas.
Modelamiento.
Clase Nodo.
La clase Lista.
Validar lista.
11
18
Resumen
18
Bibliografa recomendada
19
Nexo
19
Seguimiento al autoaprendizaje
21
Crditos: 2
Tipo de asignatura: Prctica
Semestre 4
Laboratorio de programacin IV
Laboratorio de
programacin IV
Semestre 4
Laboratorio de programacin IV
Introduccin
Una lista enlazada es una coleccin de nodos uno detrs de otro que se
conectan al siguiente elemento por medio de una referencia. En este
laboratorio se construye una aplicacin de una lista enlazada simple, teniendo como punto de partida un men de opciones de las operaciones
bsicas que se realizan en la lista.
Se disea el diagrama de clases, que ilustra qu clases conforman el sistema, cada una de estas clases es codificada en el lenguaje de Programacin Java.
Al estudiante, se le plantea hacer una lectura del cdigo, digitar cada una
de las clases, realizar la correcciones de los errores sintcticos producidos
al transcribir este cdigo, compilar, ejecutar la aplicacin y observar la
salidas generadas al seleccionar cada una de las opciones del men de la
aplicacin.
Conceptos Previos
El uso de estructuras de datos se constituye en un recurso fundamental en
el mbito de la programacin ya que permiten guardar desde pequeas
hasta grandes cantidades de informacin en memoria segn sean los
requerimientos.
Para una mayor compresin y apropiacin de los conceptos que se
desarrollarn en este fascculo, el estudiante debe tener conocimiento de
los siguientes temas:
Fundamentos
Tipos de datos primitivos (dato numrico, dato lgico, datos tipo
carcter).
Variable y constantes.
Fascculo No. 2
Semestre 4
Laboratorio de
programacin IV
Laboratorio de programacin IV
Operaciones de asignacin.
Estructura general de un programa en java.
Estructuras de control
Condicionales
De tipo simples (if).
Compuestos (if-else).
Anidados (if-else-if).
Seleccin (switch- case).
Estructuras repetitivas o ciclos
while
do while
for
for mejorado o foreach
ciclos anidados
Estructura de datos estticas
Vectores
Matrices
Programacin orientada a objetos
Clase
Atributo
Mtodo
Objeto
Mensaje
Encapsulamiento
Modularidad
Abstraccin
Sobrecarga de mtodos
Laboratorio de
programacin IV
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
Mapa Conceptual fascculo 2.
Logros
Laboratorio de listas
Una lista enlazada es una estructura de datos que permite almacenar
informacin dinmicamente, es decir la memoria se reserva a tiempo de
ejecucin del programa. Observe el siguiente diagrama de una lista
enlazada.
Fascculo No. 2
Semestre 4
Laboratorio de
programacin IV
Laboratorio de programacin IV
Laboratorio de
programacin IV
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
Listas Enlazadas Simples
============================
1) Crear Lista.
2) Imprimir Lista.
3) Agregar nodo al inicio.
4) Agregar nodo al final.
5) Buscar un elemento en Lista.
6) Borrar nodo al inicio.
7) Borrar nodo al final.
8) Salir de la aplicacin.
primero
Modelamiento
El elemento base de todo lista son los nodos, se implementa una clase
denominada Nodo.
Las operaciones bsicas correspondientes a los requerimientos se
encapsulan en la clase llamada Lista en las que se incluye:
Crear Lista.
Imprimir Lista.
Agregar nodo al inicio.
Agregar nodo al final.
Buscar un elemento en Lista.
Borrar nodo al inicio.
Borrar nodo al final.
Las opciones del men se encapsulan en la clase denominada
AplicacionLista
Fascculo No. 2
Semestre 4
Laboratorio de
programacin IV
Laboratorio de programacin IV
Diagrama de clases de la lista enlazada
Nodo
-dato: int
-enlace: Nodo
<<create>>+Nodo()
<<create>>+Nodo(dato: int)
+getDato(): int
+setDato(dato: int)
+getEnlace(): Nodo
+setEnlace(enlace: Nodo)
AplicacionLista
Lista
-primero: Nodo
-ultimo: Nodo
<<create>>+Lista()
+anexarInicioLista(dato: int)
+anexarFinalLista(dato: int)
+esVacia(): boolean
+buscarNodo(dato: int): boolean
+borrarNodoInicio(): boolean
+borrarNodoFinal(): boolean
+imprimirLista(): String
-lst: Lista
-menuOpciones: String
-opcion: String
-numero: int
-dato: int
-datoInicio: int
<<create>>+AplicacionLista()
+leerMenu()
+crearLista()
+anexarNodoInicio()
+anexarNodoFinal()
+listar()
+buscarNodo()
+borrarDatoInicio()
+borrarDatoFinal()
+main(args: String)
Clase Nodo
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
* @version 1.0
*/
public class Nodo {
private int dato;
//auto referencia
private Nodo enlace;
/**
* Constructor Nodo
* Se inicializan los atributos de la clase
* por defecto
*/
public Nodo() {
this.dato = 0;
this.enlace = null;
}
/**
* Constructor Nodo
* Inicializa el atributo dato de la clase.
* @param dato
*/
public Nodo(int dato) {
this.dato = dato;
this.enlace = null;
}
/**
* Se Obtiene el dato del Nodo
* @return valor entero correspondiente al dato
*/
public int getDato() {
return dato;
}
/**
* Se actualiza el dato del nodo
* @param dato
*/
public void setDato(int dato) {
this.dato = dato;
}
/**
* Obtiene el valor de la referencia
* @return referencia del siguiente nodo
*/
public Nodo getEnlace() {
Fascculo No. 2
Semestre 4
Laboratorio de
programacin IV
Laboratorio de programacin IV
return enlace;
}
/**
* Se actualiza la referencia del nodo
* @param enlace
*/
public void setEnlace(Nodo enlace) {
this.enlace = enlace;
}
La clase Lista
Clase que modela la implementacin de los mtodos para crear la lista,
anexar nodos al inicio y final de la lista; borrar nodos al inicio y final de la
lista, buscar un elemento en la lista, impresin de los datos almacenados
en la lista, en otras palabras se realizan las operaciones bsicas de lista
enlazada simple.
Se recomienda en esta actividad del laboratorio, adems de leer los mtodos de la clase, digitar la clase, los mtodos y la correspondiente documentacin; tambin ejecutar la aplicacin y observar la salida o resultados
que esta genera.
/**
* clase que modela las operaciones bsicas de lista
* @ Project : lista
* @ File Name : Listaultimo.java
* @author : Miguel Hernndez
* @version 1.0
*/
public class Lista {
private Nodo primero;
private Nodo ultimo;
/**
* Constructor de la clase
*/
public Lista() {
this.primero = null;
this.ultimo = null;
}
Laboratorio de
programacin IV
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
/**
* se anexa un nodo al inicio de la lista
* @param dato
*/
public void anexarInicioLista (int dato){
Nodo nuevo;
nuevo=new Nodo(dato);
if (primero==null){
primero=nuevo;
ultimo=nuevo;
}
else
{
nuevo.setEnlace(primero);
primero=nuevo;
}
}
/**
* se anexa un nodo al inicio de la lista
* @param dato
*/
public void anexarFinalLista (int dato){
Nodo nuevo;
nuevo=new Nodo(dato);
if (primero==null){
primero=nuevo;
ultimo=nuevo;
}
else
{
ultimo.setEnlace(nuevo);
ultimo=nuevo;
ultimo.setEnlace(null);
}
}
/**
* Se evalua si lista es vacia
* @return true si es vacia o false en caso contrario
*/
public boolean esVacia (){
return (primero==null);
}
/**
* busca un valor en los nodos de la lista
Fascculo No. 2
Semestre 4
Laboratorio de
programacin IV
Laboratorio de programacin IV
* @param dato
* @return verdado o falso dependiendo del valor encontrado
*/
public boolean buscarNodo(int dato){
boolean encontro=false;
Nodo p=primero;
while (p.getEnlace()!=null && encontro==false)
{
if(p.getDato()==dato)
encontro=true;
p=p.getEnlace();
}
return encontro;
}
/**
* metodo que borra un nodo al inicio de la lista
* @return false o true dependiendo si borro nodo
*/
public boolean borrarNodoInicio(){
if (esVacia())
return false;
if(primero.getEnlace()==null){
primero=null;
ultimo=null;
return false;
}
else
{
Nodo temp=primero;
primero=primero.getEnlace();
temp.setEnlace(null);
return true;
}
}
/*
* metodo que borra un nodo al final de la lista
* @return false o true dependiendo si el borro nodo
*/
public boolean borrarNodoFinal(){
if (esVacia())
return false;
if(primero.getEnlace()==null){
primero=null;
ultimo=null;
return false;
}
Laboratorio de
programacin IV
10
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
else
{
Nodo temp=primero;
Nodo aux=primero;
while(temp.getEnlace()!=null){
aux=temp;
temp=temp.getEnlace();
}
ultimo=aux;
ultimo.setEnlace(null);
return true;
/**
* Mtodo que almacena en un string los nodos de la lista
* a imprimir o el mensaje de lista vacia, si no hay nodos
* @return string
*/
public String imprimirLista( ){
String str= "";
if(!esVacia()) {
Nodo p =primero;
while(p.getEnlace()!=null){
str += p.getDato()+" ";
p=p.getEnlace();
}
} else {
str= "Lista Vacia";
}
}
return str;
Validacin de lista
Mtodo que valida si la lista est vaca, es decir que no tiene nodos, antes
de realizar proceso de anexar nodos, impresin o borrado, el cual se
puede invocar en cualquiera de los mtodos implementado, para las
operaciones de la lista simplemente enlazada.
public boolean esVacia (){
return (primero==null);
}
Fascculo No. 2
Semestre 4
11
Laboratorio de
programacin IV
Laboratorio de programacin IV
En el mtodo borrarNodoInicio, invoca el mtodo esVacia, en caso de
no haber nodos en la lista, ese retorna el valor de false y no ejecuta
ninguna accin.
Cuando el mtodo tiene nodos en la lista se verifica si tiene un slo nodo
con la sentencia if(primero.getEnlace()==null), al ser verdadera se
inicializa con null las referencias primero y ultimo y se retorna false.
Para el caso cuando la lista tiene ms de un nodo, se realiza el proceso de
borrado del elemento en la sentencia else.
public boolean borrarNodoInicio(){
if (esVacia())
return false;
if(primero.getEnlace()==null){
primero=null;
ultimo=null;
return false;
}
else
{
Nodo temp=primero;
primero=primero.getEnlace();
temp.setEnlace(null);
return true;
12
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
import java.util.Scanner;
/**
*
* @ Project : listacola
* @ File Name : ListaApp.java
* @author : Miguel Hernndez
* @version 1.0
*/
public class AplicacionLista {
private Lista lst;
private String menuOpciones;
private String opcion;
private int numero;
private int dato;
private int datoInicio;
private Scanner input;
/**
* constructor de la clase ListaApp
*/
public AplicacionLista() {
this.lst=new Lista ();
this.menuOpciones="Listas Enlazadas Simples\n" +
"=========================\n"+
"1. Crear lista\n2. Imprimir lista" +
"\n3. Anexar nodos Inicio \n4. Anexar nodos
final\n5. Buscar nodos\n6. Borrar nodo inicio" +"\n7.
Borrar nodo final\n8. Salir";
this.opcion="";
this.dato=0;
this.numero=0;
this.datoInicio=0;
this.input = new Scanner(System.in);
}
/**
* Metodo que tiene las opciones del menu de la lista
*/
public void leerMenu() {
do{
Fascculo No. 2
Semestre 4
listarMenu(menuOpciones);
numero=input.nextInt();
switch (numero){
case 1: crearLista();
break;
13
Laboratorio de
programacin IV
Laboratorio de programacin IV
case 2: listar(); break;
case 3: anexarNodoInicio(); break;
case 4: anexarNodoFinal(); break;
case 5: buscarNodo(); break;
case 6: borrarDatoIncio(); break;
case 7: borrarDatoFinal(); break;
}
}while(numero !=8);
/**
* Metodo que imprime el menu de opciones de la aplicacion
* @param menu
*/
public void listarMenu(String menu){
System.out.println(menu);
}
/**
* creacion de la lista con 10 nodos
*/
public void crearLista() {
lst=new Lista ();
for (int dato=1; dato<=10; dato++){
lst.anexarFinalLista(dato);
this.dato=dato;
}
listar();
}
/**
* Se anexa un nodo al inicio de la lista
*/
public void anexarNodoInicio() {
lst.anexarInicioLista(datoInicio);
--datoInicio;
listar();
}
/**
* Se anexa un nodo al final de la lista
*/
public void anexarNodoFinal() {
dato++;
lst.anexarFinalLista(dato);
listar();
Laboratorio de
programacin IV
14
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
}
/**
* Se imprime la lista
*/
public void listar() {
String laLista=lst.imprimirLista();
System.out.println(laLista);
}
/**
* metodo que a partir de un valor invoca el metodo a buscar
* este numero en la lista
*/
public void buscarNodo(){
int n=0;
System.out.println("digite el numero a buscar");
n=input.nextInt();
if(lst.buscarNodo(n)){
System.out.println("valor encontrado");
}
else{
}
listar();
System.out.println("valor no encontrado");
}
/**
* metodo que borra el primer nodo de la lista
*/
public void borrarDatoInicio(){
if(lst.borrarNodoInicio()){
System.out.println("nodo borrado");
}
else{
}
listar();
System.out.println("valor no borrado");
}
/**
* metodo que borra el nodo al final de la lista
*/
public void borrarDatoFinal(){
if(lst.borrarNodoFinal()){
System.out.println("nodo borrado");
}
else{
System.out.println("valor no borrado");
}
Fascculo No. 2
Semestre 4
15
Laboratorio de
programacin IV
Laboratorio de programacin IV
}
listar();
/**
* metodo principal
* @param args
*/
listarMenu(menuOpciones);
numero=input.nextInt();
switch (numero){
case 1: crearLista(); break;
case 2: listar(); break;
case 3: anexarNodoInicio(); break;
case 4: anexarNodoFinal(); break;
case 5: buscarNodo(); break;
case 6: borrarDatoIncio(); break;
case 7: borrarDatoFinal(); break;
}
}while(numero !=8);
Laboratorio de
programacin IV
16
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
17
Laboratorio de
programacin IV
Laboratorio de programacin IV
Se borra nodo con el valor del 10
Al seleccionar ocho (8)
Cmo el ciclo while, ejecuta las sentencias que estn dentro de l mientras
que se digita 8 que es la opcin de salir del programa, terminando la
ejecucin de la aplicacin.
Cierre laboratorio
Tuvo errores de compilacin ______________________________________
Cules fueron los errores? _______________________________________
________________________________________________________________
________________________________________________________________
Cmo los solucion? ____________________________________________
________________________________________________________________
Laboratorio de
programacin IV
18
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
Para la aplicacin se implementaron tres clases: Nodo, Lista y Aplicacin
Lista y se codificaron en el lenguaje de programacin de java.
Fascculo No. 2
Semestre 4
19
Laboratorio de
programacin IV
Laboratorio de programacin IV
Laboratorio de
programacin IV
20
Fascculo No. 2
Semestre 4
Laboratorio de programacin IV
Seguimientoal autoaprendizaje
Laboratorio de Programacin IV- Fascculo No. 2
Nombre_______________________________________________________
Apellidos ________________________________ Fecha: _________________
Ciudad___________________________________Semestre: _______________
1. Implementar un mtodo que permita calcular el tamao que corresponde al
nmero de nodos de la lista.
2. Construir un mtodo para crear un lista con nmeros entero aleatorio o al
azar.
3. Suponga que tiene una lista conformada por 10 elementos y desea ingresar
un nodo despus del quinto nodo, implemente el mtodo que permita cumplir
este requerimiento.
4. Disear la clase del Nodo para capturar la informacin del cliente como su
identificacin, nombre, apellidos, direccin, telfono y cuenta correo, implemente dos constructores y los mtodos set y get, para cada atributo.
5. Elabore el mtodo que permita buscar los datos de un cliente a partir del
nmero del documento, donde se tiene registrada la informacin de todos los
cliente en una lista enlazada simple.
Fascculo No. 2
Semestre 4
21
Laboratorio de
programacin IV