Documentos de Académico
Documentos de Profesional
Documentos de Cultura
y de la informacin
TEMA: ADT Lista - Implementacin
mediante Arreglos, Ejemplos
Docente: Ing. Freddy Infantes Quiroz
Correo:
finfantesq@upao.edu.pe
AGENDA
ADT Lista.
ADT Lista - Operaciones.
ADT Lista - Implementacin mediante Arreglos
Ejemplo - Farmacia
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.
int
boolean
Object
void
int
int
Cantidad();
Vacia();
Obtener(int pos);
Modificar(Object dato, int pos);
Buscar(Object dato);
Buscar(Object dato, TComparar cmp);
Constructor:
public TListaA()
{
cantidad=0;
max=0;
elem=null;
}
Adicionar
public void Adicionar(Object dato)
{
if ( cantidad == max )
Crecer();
cantidad++;
elem[cantidad-1] = dato;
}
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;
}
}
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--;
}
}
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;
}
}
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;
}
}
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);
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;
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;
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;
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;