Está en la página 1de 23

Curso: Estructura de datos

y de la informacin
TEMA: ADT Lista - Implementacin
mediante Arreglos, Ejemplos
Docente: Ing. Freddy Infantes Quiroz
Correo:

finfantesq@upao.edu.pe

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

AGENDA

ADT Lista.
ADT Lista - Operaciones.
ADT Lista - Implementacin mediante Arreglos
Ejemplo - Farmacia

Ing. Freddy Infantes Quiroz

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

ADT LISTA
Coleccin de datos, con las siguientes caractersticas:
Por lo general los datos son de un mismo tipo.
Cada elemento tiene asociado un ndice posicin, a travs del
cual se puede acceder y que lo identifica de manera nica en la
coleccin.
a0 a1 a2 a3 ... aN-1
Esto quiere decir que los elementos en una lista se encuentran
organizados de una manera lineal e identificados a travs de una
posicin.
No se especifica cmo estn organizados fsicamente en la memoria.

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

ADT LISTA - OPERACIONES

Crear - crea e inicializa la lista


Destruir - destruye la lista
Adicionar - adiciona un nuevo elemento, al final de la lista
Insertar - inserta un nuevo elemento en una posicin
Eliminar - elimina un elemento dada su posicin
Obtener - retorna un elemento dada su posicin
Modificar - modifica un elemento dada su posicin y el nuevo
valor
Cantidad - retorna la cantidad de elementos de la lista
Vacia - retorna verdadero si la lista est vaca, falso si no
Buscar - determina la posicin de un elemento en la lista
Nota: Estas operaciones son las nicas permitidas sobre una lista.
Son independientes de cmo sea implementada

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

ADT LISTA INTERFACE JAVA


public interface TLista
{
void
Adicionar(Object dato);
void
Insertar(Object dato, int pos);
void
Eliminar(int pos);

int
boolean
Object
void
int
int

Cantidad();
Vacia();
Obtener(int pos);
Modificar(Object dato, int pos);
Buscar(Object dato);
Buscar(Object dato, TComparar cmp);

Los elementos de la lista sern de tipo Object


La operacin de Crear la har el constructor de la clase que
implementa TLista
La operacin Destruir no es necesaria ya que la realiza el sistema
automtico de recoleccin de basura del Java

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

ADT LISTA IMPLEMENTACIN MEDIANTE


ARREGLOS
Campos a considerar:
El Arreglo (de Objects) que almacenar los elementos de la lista
Cantidad de elementos que estn en la lista
Mximo ( capacidad) del Arreglo

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

ADT LISTA IMPLEMENTACIN MEDIANTE


ARREGLOS, JAVA
public class TListaA implements TLista
{
private Object elem[];
private int cantidad;
private int max;
.......
}

Constructor:
public TListaA()
{
cantidad=0;
max=0;
elem=null;
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Adicionar
public void Adicionar(Object dato)
{
if ( cantidad == max )
Crecer();
cantidad++;
elem[cantidad-1] = dato;
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Insertar
public void Insertar(Object dato, int pos)
{
if ( pos >= 0 && pos <= cantidad ) {
if ( cantidad == max )
Crecer();
cantidad++;
for (int i = cantidad-1; i > pos; i--)
elem[i] = elem[i-1];
elem[pos] = dato;
}
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Eliminar
public void Eliminar(int pos)
{
if ( pos >= 0 && pos < cantidad ) {
for (int i = pos; i < cantidad-1; i++ )
elem[i] = elem[i+1];
cantidad--;
}
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

public int Cantidad()


{
return cantidad;
}
public boolean Vacia()
{
return cantidad == 0;
}
public Object Obtener(int pos)
{
if ( pos < 0 || pos >= cantidad )
pos = 0;
return elem[pos];
}
public void Modificar(Object dato, int pos)
{
if ( pos < 0 || pos >= cantidad )
pos = 0;
elem[pos] = dato;
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

public int Buscar(Object dato)


{
int encontrado = -1;
for ( int i=0; i < cantidad && encontrado == -1; i++ )
if ( elem[i].equals( dato ) )
encontrado = i;
return encontrado;
}
public int Buscar(Object dato, TComparar cmp)
{
int encontrado = -1;
for ( int i=0; i < cantidad && encontrado == -1; i++ )
if ( cmp.Compara(elem[i],dato) == 0 )
encontrado = i;
return encontrado;
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 1. Caso de la Farmacia:

En este caso slo analizaremos lo relacionado con la lista de


Medicamentos en la Farmacia

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 1. (continuacin) Uso de arreglos


public class Farmacia {
private Medicamento medics[];
private int nmedics;

Arreglo, y la cantidad

public Almacen() {
Reservar espacio
medics = new Medicamento[100];
(limitado a 100)
nmedics = 0;
}
public void nvoMedicamento( Medicamento m ) {
medics[nmedics++] = m;
Llevar el control de la
}
cantidad y posicin
public Medicamento obtMedicamento( int i ) {
return medics[i];
}
public int cantidadMedicamentos() {
return nmedics;
}
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 1. (continuacin) Uso del nuevo tipo de datos


implementado (TListaA)
public class Farmacia {
private TListaA medics;
public Almacen() {
medics = new TListaA();
}
public void nvoMedicamento( Medicamento m ) {
medics.adicionar(m);
}
public Medicamento obtMedicamento( int i ) {
return (Medicamento)medics.obtener(i);
}
public int cantidadMedicamentos() {
return medics.cantidad();
}
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 2. Programa que permita:

Adicionar elementos a una lista


Listar todos los elementos
Buscar por dos criterios.

Los elementos de la lista sern personas (nombre y dni)


private class TPersona {
String nombre;
long
dni;
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 2. (continuacin)
Clases para buscar por Nombre y por DNI
private class CmpNombre implements TComparar
{
public int Compara(Object a, Object b)
{
TPersona e1 = (TPersona)a;
TPersona e2 = (TPersona)b;
return e1.nombre.compareTo(e2.nombre);
}
}
private class CmpDNI implements TComparar
{
public int Compara(Object a, Object b)
{
TPersona e1 = (TPersona)a;
TPersona e2 = (TPersona)b;
if ( e1.dni == e2.dni )
return 0;
else
if ( e1.dni < e2.dni )
return -1;
else
return 1;
}
}

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 2. (continuacin)
Algoritmo principal
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
TListaA L;
TPersona per;
int opc, pos;
String o;
L = new TListaA();
do {
System.out.println("1.-Nueva Persona");
System.out.println("2.-Listar todos");
System.out.println("3.-Buscar por nombre");
System.out.println("4.-Buscar por dni");
System.out.println("0.-Salir");
System.out.print("\n
Ingrese la opcion: ");
o = br.readLine();
opc = Integer.valueOf(o).intValue();
switch ( opc ) {

}
while (opc != 0);

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 2. (continuacin)
Opciones
case 1: // Nueva persona
per = new TPersona();
System.out.println("");
System.out.print("Nombre: ");
o = br.readLine();
per.nombre = o;
System.out.print("\nDNI: ");
o = br.readLine();
per.dni = Long.valueOf(o).longValue();
L.Adicionar(per);
break;

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 1. (continuacin)
Opciones
case 2: // Listar todas las personas
System.out.println("");
for (int i=0; i < L.Cantidad(); i++ )
{
per = (TPersona)L.Obtener(i);
System.out.print(i+1);
System.out.print(": ");
System.out.print(per.nombre);
System.out.print(": ");
System.out.print(per.dni);
System.out.println("");
}
break;

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 1. (continuacin)
Opciones
case 3: // buscar por Nombre
per = new TPersona();
System.out.println("");
System.out.print("Nombre a buscar: ");
o = br.readLine();
per.nombre = o;
pos = L.Buscar( per, new CmpNombre() );
if ( pos >= 0 )
{
System.out.print("Nombre encontrado en la posicion: ");

System.out.println(pos+1);

}
else
System.out.print("NO ENCONTRADO");

break;

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ejemplo 2. (continuacin)
Opciones
case 4: // buscar por DNI
per = new TPersona();
System.out.println("");
System.out.print("DNI a buscar: ");
o = br.readLine();
per.dni = Long.valueOf(o).longValue();
pos = L.Buscar( per, new CmpDNI() );
if ( pos >= 0 )
{
System.out.print("DNI encontrado en la posicion: ");

System.out.println(pos+1);

}
else
System.out.print("NO ENCONTRADO");

break;

UPAO : Facultad de Ingeniera


Curso: Programacin Orientada a Objetos
Ciclo : 2014

Ventajas del uso de arreglos para implementar listas:


1. Facilidad de implementacin dado que los arreglos son parte del propio
lenguaje y permiten representar precisamente una coleccin de datos,
cada uno con una posicin
2. Acceso a los elementos es directo. El costo es igual para cualquier
elemento, independientemente de la posicin

Desventajas del uso de arreglos para implementar listas:


1. Ineficiente uso de la memoria dado que es necesario reservar un espacio
que puede ser demasiado grande en algunos casos, y en otros no ser
suficiente
2. Las operaciones de insercin y eliminacin requieren corrimiento de los
elementos, a la derecha y a la izquierda respectivamente

También podría gustarte