Está en la página 1de 25

Fascculo

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

Mapa conceptual Fascculo 2

Logros

Laboratorio de Listas.

Revisin de conceptos de Lista enlazadas simples.

Modelamiento.

Clase Nodo.

La clase Lista.

Validar lista.

11

Actividad de trabajo colaborativo

18

Resumen

18

Bibliografa recomendada

19

Nexo

19

Seguimiento al autoaprendizaje

21
Crditos: 2
Tipo de asignatura: Prctica

Semestre 4

Laboratorio de programacin IV

Copyright2008 FUNDICIN UNIVERSITARIA SAN MARTN


Facultad de Universidad Abierta y a Distancia,
Educacin a Travs de Escenarios Mltiples
Bogot, D.C.
Prohibida la reproduccin total o parcial sin autorizacin
por escrito del Presidente de la Fundacin.
La actualizacin de este fascculo estuvo a cargo de
MIGUEL HERNNDEZ BEJARANO
Docente tutor Programa de Ingeniera de Sistemas a Distancia.
Sede Bogot, D.C.
Orientacin a cargo de;
ESPERANZA MARTINEZ G.
Directora Nacional de Material Educativo.
Diseo grfico y diagramacin a cargo de
SANTIAGO BECERRA SENZ
ORLANDO DAZ CRDENAS
Impreso en: GRFICAS SAN MARTN
Calle 61A No. 14-18 - Tels.: 2350298 - 2359825
Bogot, D.C., Mayo de 2011

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

Al finalizar el estudio de este fascculo el estudiante:


Aprender que es una referencia.
Codificar la clase nodo y campos de este.
Establecer el concepto recorrido, navegabilidad en una lista y apropiar
cmo implementar mtodos en el lenguaje que le permitan realizar las
operaciones bsicas de una lista.
Construir mtodos en java para anexar y retirar datos de la lista.

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

Cada elemento de la lista enlazada esta representado por un rectngulo


dividido en dos campos que se denomina nodo.
Un nodo contiene como mnimo dos campos: uno de informacin
(datos del cliente, datos del pasajero, datos de la cuenta, entre otros)
llamado inf. y otro que contiene la direccin del siguiente nodo, llamado
sig. Note que este ltimo es un apuntador a nodo.
Existe una referencia externa, llamado lst que apunta al primer nodo, a
travs del cual se tiene acceso a la lista enlazada. Esta referencia no
est incluido en ningn nodo. Los dems referencias son internos de la
lista.
El ltimo nodo de la lista contiene un valor especial, denominado null,
en el campo siguiente, el cual representa un apuntador vaco. Esto
indica el fin de la lista.
Si una lista no contiene nodos, se dice que es una lista vaca o nula. En
este caso el apuntador externo vale null.

Revisin y Trascripcin de programas


El objetivo de esta prctica de laboratorio de listas, es el desarrollo de una
aplicacin que implementa las operaciones bsicas que se realizan en una
lista enlazada simple. Entre dichas aplicaciones se tiene: anexar, borrar,
listar los datos almacenados.
Para la construccin de una versin acadmica se parte del siguiente
men de opciones:

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

Clase que modela el elemento bsico de la lista conformado por los


campos dato de tipo entero y la auto-referencia denominada enlace que
tiene el mismo nombre de la clase. La actividad de esta parte del
laboratorio consiste en que adems de leer el programa, se debe digitar la
clase, los mtodos y la correspondiente documentacin. A continuacin se
codifica la clase Nodo:
/**
* clase que modela el nodo
* @ Project : lista
* @ File Name : Nodo.java
* @author: Miguel Hernndez
Laboratorio de
programacin IV

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;

Clase aplicacin Lista


Modela las opciones del men, para crear la lista, anexar y borrar los
nodos, buscar elementos en la lista, e impresin de la informacin
almacenada en la lista.
Se recomienda en esta parte de la actividad del laboratorio, leer los
mtodos de la clase, digitar la clase, los mtodos y la correspondiente
documentacin, y al revisar que no tiene errores al ejecutar, observar la
salida o resultados que presenta en la aplicacin, probando las diferentes
opciones desde la primera hasta la ltima.
Laboratorio de
programacin IV

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
*/

public static void main(String []args) {


AplicacionLista lista=new AplicacionLista();
lista.leerMenu();
}

Mtodo del men de la aplicacin


public void leerMenu() {
do{

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);

Al seleccionar uno (1)


Se ejecuta la sentencia: case 1: crearLista(); y break;
Se crea la lista con 9 nodos y se imprime.
123456789
Al seleccionar dos (2)
Se ejecuta la sentencia: case 2: listar(); break;
Se imprime la informacin de la lista, que tenga almacenada en ese
momento:
123456789

Laboratorio de
programacin IV

16

Fascculo No. 2
Semestre 4

Laboratorio de programacin IV

Al seleccionar tres (3)


Al ejecutarse la sentencia: case 3: anexarNodoIncio(); break;
Se anexa un nodo al inicio de la lista e imprime la informacin de la lista
0123456789
Al seleccionar cuatro (4)
Al ejecutar la sentencia: case 4: anexarNodoFinal(); break;
se anexa un nodo al final de la lista e imprime la informacin de la lista
0 1 2 3 4 5 6 7 8 9 10
Al seleccionar cinco (5)
Se ejecuta la sentencia: case 5: buscarNodo(); break;
El programa requiere que se le ingrese un nmero, de encontrarse en la
lista imprime valor encontrado de lo contrario imprime valor no
encontrado.
Al seleccionar seis (6)
Informacin inicial
0 1 2 3 4 5 6 7 8 9 10
Resultado despus de ejecutar la accin case 6: borrarDatoIncio();
break;
1 2 3 4 5 6 7 8 9 10
Se borra el nodo con el valor de cero
Al seleccionar siete (7)
Informacin inicial
1 2 3 4 5 6 7 8 9 10
Resultado despus de ejecutar la accin case 7: borrarDatoFinal();
123456789
Fascculo No. 2
Semestre 4

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? ____________________________________________
________________________________________________________________

En grupo de dos o tres integrantes, implementar los mtodos para anexar o


borrar un nodo en una posicin determinada en la lista de enlace sencillo.
Suponga que se tiene la siguiente lista

En este laboratorio se realiz el diseo de modelado de las clases, la


codificacin en el lenguaje de programacin de java de una aplicacin que
implementa las operaciones bsicas de una lista enlazada simple.

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.

CAIR, O. & Guardati, S. (2006). Estructuras de Datos. Tercera edicin.


McGraw-Hill.
DEITEL, H. M., & Deitel, P. J. (2004). CMO PROGRAMAR EN JAVA.
Mxico, D.F.: PEARSON EDUCATION.
JOYANES, AGUILAR LUIS Y ZAHONERO, MARTNEZ IGNACIO.
ESTRUCTURA DE DATOS. ALGORITMOS, editorial Mc Graw-Hill, Madrid,
1998.

En el siguiente laboratorio se construirn las aplicaciones de pilas y colas,


que son conjuntos de datos dinmicas en los que hay restricciones sobre
el elemento que se puede retirar.
En las pilas se puede remover el elemento ms recientemente ingresado.
Aplica la tcnica last-in, first-out o LIFO. (ltimos en entrar primeros en
salir).
Y en las colas se lo pueden remover el elemento ms antiguo del conjunto
aplica la tcnica first-in, first-out o FIFO. (Primeros en entrar primeros en
salir).

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

También podría gustarte