Adt Listas - Impletacion de Arreglos

23
Curso: Estructura de datos y de la información TEMA: ADT Lista - Implementación mediante Arreglos, Ejemplos Docente: Ing. Freddy Infantes Quiroz Correo: [email protected]

description

ESTRUCTURA DE DATOS

Transcript of Adt Listas - Impletacion de Arreglos

Page 1: Adt Listas - Impletacion de Arreglos

Curso: Estructura de datos

y de la información

TEMA: ADT Lista - Implementaciónmediante Arreglos, Ejemplos

Docente: Ing. Freddy Infantes QuirozCorreo: [email protected]

Page 2: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

AGENDA

• ADT Lista.

• ADT Lista - Operaciones.

• ADT Lista - Implementación mediante Arreglos

• Ejemplo - Farmacia

Ing. Freddy Infantes Quiroz

Page 3: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

ADT LISTA

Colección de datos, con las siguientes características:

• Por lo general los datos son de un mismo tipo.

• Cada elemento tiene asociado un índice ó posición, a través del

cual se puede acceder y que lo identifica de manera única en la

colección.

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 través de una

posición.

No se especifica cómo están organizados físicamente en la memoria.

Page 4: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación 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 posición

• Eliminar - elimina un elemento dada su posición

• Obtener - retorna un elemento dada su posición

• Modificar - modifica un elemento dada su posición y el nuevo

valor

• Cantidad - retorna la cantidad de elementos de la lista

• Vacia - retorna verdadero si la lista está vacía, falso si no

• Buscar - determina la posición de un elemento en la lista

Nota: Estas operaciones son las únicas permitidas sobre una lista.

Son independientes de cómo sea implementada

Page 5: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

ADT LISTA – INTERFACE JAVApublic interface TLista

{

void Adicionar(Object dato);

void Insertar(Object dato, int pos);

void Eliminar(int pos);

int Cantidad();

boolean Vacia();

Object Obtener(int pos);

void Modificar(Object dato, int pos);

int Buscar(Object dato);

int Buscar(Object dato, TComparar cmp);

}

• Los elementos de la lista serán de tipo Object

• La operación de Crear la hará el constructor de la clase que

implementa TLista

• La operación Destruir no es necesaria ya que la realiza el sistema

automático de recolección de basura del Java

Page 6: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

ADT LISTA – IMPLEMENTACIÓN MEDIANTE

ARREGLOS

Campos a considerar:

• El Arreglo (de Objects) que almacenará los elementos de la lista

• Cantidad de elementos que están en la lista

• Máximo (ó capacidad) del Arreglo

Page 7: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

ADT LISTA – IMPLEMENTACIÓN 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;

}

Page 8: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Adicionarpublic void Adicionar(Object dato)

{

if ( cantidad == max )

Crecer();

cantidad++;

elem[cantidad-1] = dato;

}

Page 9: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

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

}

}

Page 10: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Eliminarpublic void Eliminar(int pos)

{

if ( pos >= 0 && pos < cantidad ) {

for (int i = pos; i < cantidad-1; i++ )

elem[i] = elem[i+1];

cantidad--;

}

}

Page 11: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación 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;

}

Page 12: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación 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;

}

Page 13: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ejemplo 1. Caso de la Farmacia:

En este caso sólo analizaremos lo relacionado con la lista de

Medicamentos en la Farmacia

Page 14: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ejemplo 1. (continuación) Uso de arreglos

public class Farmacia {

private Medicamento medics[];

private int nmedics;

public Almacen() {

medics = new Medicamento[100];

nmedics = 0;

}

public void nvoMedicamento( Medicamento m ) {

medics[nmedics++] = m;

}

public Medicamento obtMedicamento( int i ) {

return medics[i];

}

public int cantidadMedicamentos() {

return nmedics;

}

}

Arreglo, y la cantidad

Reservar espacio

(limitado a 100)

Llevar el control de la

cantidad y posición

Page 15: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ejemplo 1. (continuación) 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();

}

}

Page 16: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación 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 serán personas (nombre y dni)

private class TPersona {

String nombre;

long dni;

}

Page 17: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ejemplo 2. (continuación…)Clases para buscar por Nombre y por DNIprivate 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;

}

}

Page 18: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ejemplo 2. (continuación…)

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

Page 19: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ejemplo 2. (continuación…)

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;

Page 20: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ejemplo 1. (continuación…)

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;

Page 21: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ejemplo 1. (continuación…)

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;

Page 22: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ejemplo 2. (continuación…)

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;

Page 23: Adt Listas - Impletacion de Arreglos

UPAO : Facultad de Ingeniería

Curso: Programación Orientada a Objetos

Ciclo : 2014

Ventajas del uso de arreglos para implementar listas:

1. Facilidad de implementación dado que los arreglos son parte del propio

lenguaje y permiten representar precisamente una colección de datos,

cada uno con una posición

2. Acceso a los elementos es directo. El costo es igual para cualquier

elemento, independientemente de la posición

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 inserción y eliminación requieren corrimiento de los

elementos, a la derecha y a la izquierda respectivamente