Sunteți pe pagina 1din 29

Estructura de Datos Lineales Estructuras de Datos Lineales

Listas Secuenciales

Karim Guevara Puente de la Vega


kguevara72@gmail.com UNSA, 2013

Agenda

Lista lineal Lista lineal por medio de arreglos Lista Coleccin Conjunto

Estructura de Datos I

Estructuras de Datos Bsicas


Lista lineal Secuencia de cero o ms items x 1,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.
3

Estructura de Datos I

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. 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

Lista lineal (cont)

Un conjunto de operaciones necesario a una mayora de aplicaciones:


5. 6. 7.

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

Lista lineal (cont)

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

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

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

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. 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

Implementacin de TAD Lista

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

Implementacin de TAD Lista


listTypeImp.cpp
#include listType.h template<class T> bool listType::isEmpty(){ return(lenght==0) } template<class T> void listType::insert(T newitem){ if(!isFull()) list[lenght++]=newitem } template<class T> void listType::remove(T newitem){ if(!isEmpty()){ int i=search(newitem); if(i>=0){ list[i]=list[lenght-1]; lenght--; } } 11 Estructura de Datos I }

Implementacin de TAD Lista dinmica

Si la lista est implementada utilizando arreglos dinmicos, la declaracin sera: (listDinamicType.h)


template <class X> 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; };
12
Estructura de Datos I

Implementacin de TAD Lista dinmica

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

Implementacin de TAD Lista dinmica

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

Implementacin de TAD Lista dinmica

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

Implementacin de TAD Lista dinmica

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

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
19
Estructura de Datos I

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

20

Estructura de Datos I

Operaciones bsicas de las colecciones

21

Estructura de Datos I

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
22
Estructura de Datos I

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

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:

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


25
Estructura de Datos I

Operaciones bsicas de los conjuntos

26

Estructura de Datos I

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
27
Estructura de Datos I

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.
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

S-ar putea să vă placă și