Documente Academic
Documente Profesional
Documente Cultură
Listas Secuenciales
Agenda
Lista lineal Lista lineal por medio de arreglos Lista Coleccin Conjunto
Estructura de Datos I
Estructura de Datos I
El conjunto de operaciones a ser definido depende de cada aplicacin Un conjunto de operaciones necesario a una mayora de aplicaciones:
1. 2. 3.
4.
5.
Verificar si la lista est vaca Verificar si la lista est llena Insertar un nuevo item inmediatamente despus del isimo item Localizar el i-simo item para examinar y/o alterar el contenido Retirar el i-simo item
4
Estructura de Datos I
8.
9.
Combinar dos o ms listas en una nica Partir una lista en dos o ms listas Hacer una copia de una lista Ordenar los items de una lista Buscar la ocurrencia de un item
Estructura de Datos I
La lista lineal se puede representar por medio de un TAD Lista, definido por:
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
Hay varias opciones de estructuras de datos que permiten una implementacin eficiente para listas (p.e. el tipo estructurado array).
6
Estructura de Datos I
Varias estructuras de datos pueden ser utilizadas para representar una lista lineal. Las dos representaciones ms utilizadas son las implementaciones son:
Estructura de Datos I
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
Retirar un item del inicio de la lista requiere una translacin de los items para rellenar el espacio vaco dejado. Los items son almacenados en un x1 Primero = 0 arreglo 1 x2 Longitud apunta a la posicin siguiente a ... la del ltimo elemento de la lista xlongitud Longitud - 1 El i-simo item de la lista est ... almacenado en la i-sima-1 posicin del xn Tamao mximo - 1 arreglo, 0 i < longitud
9
Estructura de Datos I
La implementacin puede ser por medio de un arreglo esttico de 1000 elementos (listType.h)
Template <class T> 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; 10 Estructura de Datos I };
listDinamicTypeImp.cpp
template<class X> listDinamicType::listDinamicType(int psize ) { size = psize; list = new X [size]; lenght=0; } template<class X> listDinamicType::~listDinamicType( ) { if (list != NULL) { delete[] list; list=NULL; lenght=0; } }
13
Estructura de Datos I
listDinamicTypeImp.cpp
template<class X> bool listDinamicType::isFull( ) { return(length==size); }
template<class X> bool listDinamicType::insert(X newitem) { if (isFull()){ cout<<Error! Lista llena \n; return false; } else { list[lenght++] = newitem; return true: } }
14
Estructura de Datos I
listDinamicTypeImp.cpp
template<class X> X listDinamicType::remove(int position ) { int item = -1; if ( isEmpty() || position >= lenght) cout<<List is empty \n; else { item = list[position]; for (int i = position; i < length-1; i++ ) list[i] = list[i+1]; lenght--: } return item; } template<class X> bool listCircleType::isEmpty( ){ return(length==0); }
15
Estructura de Datos I
listDinamicTypeImp.cpp
template<class X> void listDinamicType::printList( ) { if ( isEmpty()) cout<<Lista vacia \n; else { for (int i = 0; i < lenght; i++ ) cout<< list[i]; } }
16
Estructura de Datos I
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
17
Estructura de Datos I
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
18
Estructura de Datos I
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
19
Estructura de Datos I
20
Estructura de Datos I
21
Estructura de Datos I
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
22
Estructura de Datos I
Ejemplo de usos
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
23
Estructura de Datos I
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)
24
Estructura de Datos I
Conjuntos (set)
Un conjunto es un ADT que permite almacenar grupos de objetos llamados elementos de modo que:
26
Estructura de Datos I
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
27
Estructura de Datos I
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.
28
Estructura de Datos I
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.
29
Estructura de Datos I