c3t3 Eda1 Listas 2013
-
Upload
fernando-xadrizes -
Category
Documents
-
view
8 -
download
0
Transcript of c3t3 Eda1 Listas 2013
-
Karim Guevara Puente de la Vega
UNSA, 2013
Estructura de Datos Lineales
Estructuras de Datos Lineales Listas Secuenciales
-
Estructura de Datos I 2
Agenda
Lista lineal
Lista lineal por medio de arreglos
Lista
Coleccin
Conjunto
-
Estructura de Datos I 3
Lista lineal
Secuencia de cero o ms items x1,x2,,xn en el cual xi es de un determinado tipo y n representa el tamao de la lista.
Su principal propiedad estructural envuelve las posiciones relativas de los items en una dimensin:
Asumiendo n 1, xi es el primer item de la lista y xn el ltimo
xi precede xi+1 para i =1,2,,n-1
xi sucede xi-1 para i =2,,n
El elemento xi est en la i-sima posicin.
Estructuras de Datos Bsicas
-
Estructura de Datos I 4
Lista lineal (cont)
El conjunto de operaciones a ser definido depende de cada aplicacin
Un conjunto de operaciones necesario a una mayora de aplicaciones:
1. Verificar si la lista est vaca
2. Verificar si la lista est llena
3. Insertar un nuevo item inmediatamente despus del i-simo item
4. Localizar el i-simo item para examinar y/o alterar el contenido
5. Retirar el i-simo item
-
Estructura de Datos I 5
Lista lineal (cont)
Un conjunto de operaciones necesario a una mayora
de aplicaciones:
5. Combinar dos o ms listas en una nica
6. Partir una lista en dos o ms listas
7. Hacer una copia de una lista
8. Ordenar los items de una lista
9. Buscar la ocurrencia de un item
-
Estructura de Datos I 6
Lista lineal (cont)
La lista lineal se puede representar por medio de un TAD Lista, definido por:
Hay varias opciones de estructuras de datos que permiten una implementacin eficiente para listas (p.e. el tipo estructurado array).
typeName
listType
Domain
cada elemento del tipo listType es un
conjunto de hasta 1000 numeros
Operations
comprobar si la lista est vaca
comprobar si la lista est llena
buscar un elemento dado en la lista
eliminar un elemento de la lista
insertar un elemento en la lista
ordenar la lista
destruir la lista
imprimir la lista
-
Estructura de Datos I 7
Implementacin de Listas Lineales
Varias estructuras de datos pueden ser utilizadas
para representar una lista lineal.
Las dos representaciones ms utilizadas son las
implementaciones son:
Por medio de arreglos
Por medio de punteros
-
Estructura de Datos I 8
Listas por medio de arreglos
Los items de la lista son almacenados en posiciones
continuas de la memoria.
La lista puede ser recorrida en cualquier direccin
La insercin de un nuevo item puede ser realizada
despus del ltimo item con costo constante
La insercin de un nuevo item en el medio de la lista
requiere una translacin de todos los items
localizados despus del punto de insercin.
-
Estructura de Datos I 9
Listas por medio de arreglos
Retirar un item del inicio de la lista requiere una
translacin de los items para rellenar el espacio vaco
dejado.
x1
x2
xlongitud
. . .
. . .
xn
0
1
Primero =
Longitud - 1
Tamao mximo - 1
Los items son almacenados en un
arreglo
Longitud apunta a la posicin siguiente a
la del ltimo elemento de la lista
El i-simo item de la lista est
almacenado en la i-sima-1 posicin del
arreglo, 0 i < longitud
-
Estructura de Datos I 10
Implementacin de TAD Lista
La implementacin puede ser por medio de un arreglo esttico
de 1000 elementos (listType.h)
Template class ListType{
bool isEmpty();
//Precondition: La lista debe de existir.
//Postcondition: retorna true si la lista esta
vaca, false en otro caso.
bool isFull();
int search(T searchItem);
void insert(T newitem);
void remove(T removeitem);
void destroy();
void printList();
ListType();
private:
T list[1000];
int length;
};
-
Estructura de Datos I 11
Implementacin de TAD Lista
listTypeImp.cpp
#include listType.h
template bool listType::isEmpty(){
return(lenght==0)
}
template void listType::insert(T newitem){
if(!isFull())
list[lenght++]=newitem
}
template void listType::remove(T newitem){
if(!isEmpty()){
int i=search(newitem);
if(i>=0){
list[i]=list[lenght-1];
lenght--;
}
}
}
-
Si la lista est implementada utilizando arreglos dinmicos, la
declaracin sera: (listDinamicType.h)
Estructura de Datos I 12
template
class listDinamicType {
listDinamicType(int = 1000);
~listDinamicType( );
bool isFull();
bool isEmpty();
void printList( );
bool insert(X );
X remove( int);
private:
X *list:
int lenght;
int size;
};
Implementacin de TAD Lista dinmica
-
listDinamicTypeImp.cpp
Estructura de Datos I 13
template
listDinamicType::listDinamicType(int psize ) {
size = psize;
list = new X [size];
lenght=0;
}
template listDinamicType::~listDinamicType( ) {
if (list != NULL) {
delete[] list;
list=NULL;
lenght=0;
}
}
Implementacin de TAD Lista dinmica
-
listDinamicTypeImp.cpp
Estructura de Datos I 14
template bool listDinamicType::isFull( ) {
return(length==size);
}
template bool listDinamicType::insert(X newitem) {
if (isFull()){
cout
-
Estructura de Datos I 15
template X listDinamicType::remove(int position ) {
int item = -1;
if ( isEmpty() || position >= lenght)
cout
-
listDinamicTypeImp.cpp
Estructura de Datos I 16
template void listDinamicType::printList( ) {
if ( isEmpty())
cout
-
Estructura de Datos I 17
Ventajas y desventajas
Ventaja:
Los apuntadores son implcitos en esta estructura.
Acceso directo al elemento i-simo por su posicin
Desventajas:
Costo de la eliminacin e insercin puede ser alta
(translacin de todos los items).
No existe previsin sobre el crecimiento de la lista
-
Listas
Una lista es una secuencia de objetos ordenados, en la
que se dispone de un iterador especial, con el que se
puede:
insertar o eliminar elementos en cualquier posicin
recorrer los elementos de la lista hacia adelante y
opcionalmente, hacia atrs
etc.
Algunas listas (Vectores) disponen de acceso posicional
eficiente
El orden es el que define la secuencia de elementos; no
necesariamente es su orden natural
Estructura de Datos I 18
-
Ejemplos de uso de listas
Escribir un mtodo que reemplace todos los elementos de una lista que coincidan con un elemento, por otro elemento
Escribir una clase que represente una baraja de cartas espaolas, con las siguientes operaciones:
constructor: inicialmente la baraja contiene las 40 cartas ordenadas
barajar: para cada carta i desde la ltima hasta la segunda se intercambia esa carta con la de la casilla de ndice aleatorio entre 0 e i
Repartir: retorna una lista que contiene las num ltimas cartas de la baraja, y las elimina de la baraja
Estructura de Datos I 19
-
Colecciones (collection) o bolsas (bag)
La coleccin es un ADT que permite almacenar grupos
de objetos llamados elementos:
pueden estar repetidos
no es preciso almacenar ninguna relacin de orden o
secuencia
Tambin se llaman bolsas
Estructura de Datos I 20
-
Operaciones bsicas de las colecciones
Estructura de Datos I 21
-
Operaciones bsicas de las colecciones
constructor: Crea la coleccin con cero elementos
aade: Aade el parmetro elElemento a la coleccin. Si elElemento es incompatible con los elementos que se almacenan en esta coleccin lanza una excepcin
borra: Si existe en la coleccin al menos una instancia de elElemento, la borra de la coleccin y retorna true. En otro caso, retorna false
hazNula: Elimina todos los elementos de la coleccin, dejndola vaca
pertenece: Si existe en la coleccin al menos una instancia de elElemento, retorna true. En otro caso, retorna false
estaVacia: Si la coleccin est vaca retorna true. En otro caso, retorna false
tamao: Retorna un entero que dice cuntos elementos hay en la coleccin
Estructura de Datos I 22
-
Ejemplo de usos
Una aplicacin de una coleccin es almacenar una
lista de visitas a un lugar
una misma persona puede visitar el lugar varias veces
no interesa el orden en el que se hacen
interesa si alguien ha visitado el lugar o no, y cuntas
veces
Estructura de Datos I 23
-
Ejercicio
Crear una clase capaz de almacenar en un atributo
una coleccin de nombres de personas (Strings)
Escribir un mtodo para aadir una visita
Escribir un mtodo para saber cuntas visitas ha
hecho una persona (que deje la coleccin igual que
estaba)
Estructura de Datos I 24
-
Conjuntos (set)
Un conjunto es un ADT que permite almacenar grupos
de objetos llamados elementos de modo que:
no pueden estar repetidos
no es preciso almacenar ninguna relacin de orden o
secuencia
Adems suelen tener operaciones para operar con
ellos:
Interseccin
Unin
diferencia
Estructura de Datos I 25
-
Operaciones bsicas de los conjuntos
Estructura de Datos I 26
-
Estructura de Datos I 27
Operaciones bsicas de los conjuntos
Las operaciones bsicas son idnticas a las de las colecciones, con la excepcin de aade:
constructor: Crea el conjunto con cero elementos
aade: Si elElemento ya pertenece al conjunto retorna false. En caso contrario, aade el parmetro elElemento al conjunto y retorna true. Si elElemento es incompatible con los elementos que se almacenan en este conjunto lanza una excepcin
borra: Si existe en el conjunto al menos una instancia de elElemento, la borra del conjunto y retorna true. En otro caso, retorna false
hazNulo: Elimina todos los elementos del conjunto, dejndolo vaco
pertenece: Si existe en el conjunto al menos una instancia de elElemento, retorna true. En otro caso, retorna false
estaVacio: Si el conjunto est vaco retorna true. En otro caso, retorna false
tamao: Retorna un entero que dice cuntos elementos hay en el conjunto
-
Estructura de Datos I 28
Operaciones bsicas de los conjuntos
interseccin: Retorna un conjunto que contiene los elementos comunes al conjunto actual y a otroConjunto.
unin: Retorna un conjunto que contiene los elementos del conjunto actual y los de otroConjunto.
diferencia: Retorna un conjunto que contiene los elementos del conjunto actual que no pertenecen a otroConjunto.
incluidoEn: Retorna true si todos los elementos del conjunto original pertenecen a otroConjunto, y false en caso contrario.
-
Estructura de Datos I 29
Ejemplo de uso
En el ejemplo anterior, aadir un mtodo para mostrar
todos los elementos duplicados (aquellos con ms de una
visita).
Hacer un mtodo para obtener un conjunto con todas las
visitas, pero sin duplicidades.