Вы находитесь на странице: 1из 29

Karim Guevara Puente de la Vega

kguevara72@gmail.com
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 x
1
,x
2
,,x
n
en el cual
x
i
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, x
i
es el primer item de la lista y x
n

el ltimo
x
i
precede x
i+1
para i =1,2,,n-1
x
i
sucede x
i-1
para i =2,,n
El elemento x
i
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.
x
1
x
2
x
longitud
. . .
. . .
x
n
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 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;
};
Estructura de Datos I
11
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--;
}
}
}
Si la lista est implementada utilizando arreglos dinmicos, la
declaracin sera: (listDinamicType.h)

Estructura de Datos I
12
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;
};
Implementacin de TAD Lista dinmica
listDinamicTypeImp.cpp

Estructura de Datos I
13
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;
}
}
Implementacin de TAD Lista dinmica
listDinamicTypeImp.cpp

Estructura de Datos I
14
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:
}
}
Implementacin de TAD Lista dinmica
Estructura de Datos I
15
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);
}

Implementacin de TAD Lista dinmica
listDinamicTypeImp.cpp

listDinamicTypeImp.cpp

Estructura de Datos I
16
template<class X> void listDinamicType::printList( ) {
if ( isEmpty())
cout<<Lista vacia \n;
else {
for (int i = 0; i < lenght; i++ )
cout<< list[i];
}
}
Implementacin de TAD Lista dinmica
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.