Sei sulla pagina 1di 4

EDA I

Listas
Listas 2
EDA I
Diferentes tipos de listas
Una lista es una coleccin lineal de elementos.
Segn sus caractersticas, las vamos a clasificar
en tres categoras:
Listas ordenadas
Sus elementos estn ordenados segn una relacin
de orden definida para los mismos
Listas desordenadas
Sus elementos no estn ordenados por sus
caractersticas sino por como han sido colocados en
la lista
Listas indexadas
Se puede acceder a sus elementos mediante un
ndice numrico
Listas 3
EDA I
Diferentes tipos de lista
aadir Ordenada
15 23 37 54 70
42
aadir:
a) al principio
b) detrs de X
c) al final
X
a)
b)
c)
Sin orden
0 1 2 3 4
aadir
en ndice 3
Indexada
Listas 4
EDA I
Operaciones comunes
a todas las listas
Da acceso al primer elemento de la lista first
Elimina un elemento concreto de la lista remove
Elimina el ltimo elemento de la lista removeLast
Determina el nmero de elementos de la lista size
Determina si la lista est vaca isEmpty
Determina si la lista contiene un elemento concreto contains
Da acceso al ltimo elemento de la lista last
Elimina el primer elemento de la lista removeFirst
Descripcin Operacin
Listas 5
EDA I
Operacin particular de las listas
ordenadas
Aade un elemento a la lista (en el lugar de orden
que le corresponde)
add
Descripcin Operacin
Listas 6
EDA I
Operaciones particulares de las
listas desordenadas
Aade un elemento detrs de otro elemento concreto que
ya se encuentra en la lista
addAfter
Aade un elemento al final de la lista addToRear
Aade un elemento al principio de la lista addToFront
Descripcin Operacin
Listas 7
EDA I
Operaciones particulares de las
listas indexadas
Inserta un elemento en un ndice concreto o al final de la
lista
add
Elimina el elemento situado en un ndice concreto remove
Determina el ndice de un elemento de la lista indexOf
Da acceso al elemento situado en un ndice concreto get
Configura el elemento situado en un ndice concreto set
Descripcin Operacin
Listas 8
EDA I
Implementacin de Lista con Array
public class ListaArray<T> implements ListaTAD<T> {
private int maxSize; // tamao del array
private T[] laLista;
private int longitud; // ndice de la primera celda libre y
// nmero de elementos de la lista
//------------------------------------------------------------------
public ListaArray(int longitudMax)
{
maxSize = longitudMax;
laLista = (T[])(new Object[maxSize]);
longitud = 0;
}
//--------------------------------------------------------------
public T first () // primero de la lista
{
return laLista[0];
}
//--------------------------------------------------------------
public T last () // ltimo de la lista
{
return laLista[longitud-1];
}
Listas 9
EDA I
Implementacin de Lista con Array
public T removeLast () { // retira el ltimo de la lista
T temp = laLista[--longitud]; // el ltimo de la lista
laLista[longitud] = null; // anular la referencia
return temp;
}
//-----------------------------------------------------------------------
public boolean isEmpty () { // Determina si la lista est vaca
return (longitud == 0);
}
La implementacin del resto de las operaciones
queda como ejercicio.
Obsrvese que las clases que nos interesa
implementar son ListaOrdenadaTAD,
ListaSinOrdenTAD y ListaIndexadaTAD
Listas 10
EDA I
Implementacin de Lista con
estructura ligada
Una posibilidad es usar nodos con un solo
enlace a su siguiente (como LinkG usado
en las implementaciones de Pila y Cola).
Dejamos esto como ejercicio.
Otra posibilidad es usar nodos con dos
enlaces: uno a su siguiente y otro a su
precedente
Data
previous
next
Listas 11
EDA I
Listas doblemente ligadas (0)
class LinkDobleG<T>
{
public T data; // informacin
public LinkDobleG<T> next; // nodo siguiente
public LinkDobleG<T> previous; // nodo precedente
.
}
null
first
last
Data
previous
next
Data
previous
next
Data
previous
next
null
Listas 12
EDA I
Insercin al principio (1)
first
last
Data
previous
next
Data
previous
next
Data
previous
next
null
Data
previous
next
null
2
1
3
public void insertFirst(T dato)
{
LinkDobleG<T> newLink = new LinkDobleG<T>(dato);
if( isEmpty() )
last = newLink; // newLink <-- last
else
first.previous = newLink; // newLink <-- old first
newLink.next = first; // newLink --> old first
first = newLink; // first --> newLink
}
Coste: O(1)
newLink
Listas 13
EDA I
Insercin (2)
Data
previous
next
first
last
Data
previous
next
Data
previous
next
Data
previous
next
null
newLink
1
2
current
null
3
4 Buscar ---con current--- la posicin adecuada de insercin y despus
if(current==last) // si es el ltimo
{
newLink.next = null; // newLink --> null
last = newLink; // newLink <-- last
}
else // si no es el ltimo
{
newLink.next = current.next; // newLink --> old next
// newLink <-- old next
current.next.previous = newLink;
}
newLink.previous = current; // old current <-- newLink
current.next = newLink; // old current --> newLink Coste: O(n)
por la bsqueda
Listas 14
EDA I
Borrado (3)
null
first
last
Data
previous
next
Data
previous
next
null
Data
previous
next 1
2
current
current.pre current.next
Buscar ---con current--- el nodo que hay que borrar y despus
if(current==first) // si es el primero
first = current.next; // first --> old next
else // si no es el primero
// old previous --> old next
current.previous.next = current.next;
if(current==last) // si es el ltimo
last = current.previous; // old previous <-- last
else // si no es el ltimo
// old previous <-- old next
current.next.previous = current.previous;
Coste: O(n)
por la bsqueda
Listas 15
EDA I
Lectura
De [Lewis, Chase 2006]
Captulo 8

Potrebbero piacerti anche