Professional Documents
Culture Documents
UNIVERSIDAD
DE CANTABRIA
1. Introduccin
2. Estructuras de datos lineales
3. Estructuras de datos jerrquicas
4. Grafos y caminos
5. Implementacin de listas, colas y pilas
6. Implementacin de mapas, rboles y grafos
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA
Y COMPUTACIN
4
UNIVERSIDAD
DE CANTABRIA
5.1. Introduccin
5.2. Pilas, colas y vectores implementados mediante arrays
5.3. Implementaciones con listas enlazadas simples
5.4. Listas enlazadas con cursores
5.5. Listas doblemente enlazadas
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
5.1. Introduccin
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
Implementacin de estructuras de
datos propias para colecciones Java
UNIVERSIDAD
DE CANTABRIA
AbstractSet un Conjunto;
- como mnimo hay que proporcionar el iterador y el mtodo size
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
Implementacin de estructuras de
datos propias para colecciones Java
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
Implementacin de estructuras de
datos propias para colecciones Java
UNIVERSIDAD
DE CANTABRIA
AbstractMap un Mapa
- como mnimo hay que proporcionar la vista entrySet
- habitualmente esto se hace con la clase AbstractSet
- si el mapa es modificable, como mnimo hay que proporcionar el
mtodo put
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
UNIVERSIDAD
DE CANTABRIA
ESTADSTICA Y COMPUTACIN
Asignatura 2
Mara Fdez.
Gral. Dvila, 23...
Mara Fdez.
Gral. Dvila, 23...
Jess Prez
Canalejas, 13...
Andrs Puente
c/Salamanca, 8...
Andrs Puente
c/Salamanca, 8...
Pepe Gmez
c/Cdiz, 3...
DEPARTAMENTO DE MATEMTICAS,
UNIVERSIDAD
DE CANTABRIA
Hay datos
repetidos!
Alumnos
UNIVERSIDAD
DE CANTABRIA
Asignatura 2
Pepe Gmez
c/Cdiz, 3...
Mara Fdez.
Gral. Dvila, 23...
Andrs Puente
c/Salamanca, 8...
Jess Prez
Canalejas, 13...
...
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
...
...
10
Punteros
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
11
UNIVERSIDAD
DE CANTABRIA
Prximo
A1
A2
...
An
Celda
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
12
UNIVERSIDAD
DE CANTABRIA
A2
...
An
13
UNIVERSIDAD
DE CANTABRIA
Primer Elemento
Segundo Elemento
Lista
...
ultimo
ltimo Elemento
...
Vaco
length-1
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
14
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
15
UNIVERSIDAD
DE CANTABRIA
16
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
17
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
18
UNIVERSIDAD
DE CANTABRIA
import java.util.*;
/**
* Clase con una lista implementada en un array
* Se limita el numero de elementos que pueden
* meterse
*/
public class ListaArrayAcotada<E>
extends AbstractList<E>
{
public static int maxPorOmision=50;
// El array y el cursor ultimo
private E[] lista;
private int ultimo;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
19
UNIVERSIDAD
DE CANTABRIA
/**
* Constructor.Se le pasa tamao mximo de la lista
*/
public ListaArrayAcotada(int max) {
lista=(E[]) new Object[max];
ultimo=-1;
}
/**
* Constructor que crea la lista con un tamao igual
* a maxPorOmision
*/
public ListaArrayAcotada() {
this(maxPorOmision);
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
20
UNIVERSIDAD
DE CANTABRIA
/**
* Constructor. Se le pasa coleccin para copiarla
*/
public ListaArrayAcotada(Collection<E> c) {
// crea la lista del tamao de la coleccin
this(c.size());
// anade todos los elementos a la lista
for (E e:c) {
add(ultimo+1,e);
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
21
UNIVERSIDAD
DE CANTABRIA
/**
* Lectura posicional: get
* Lanza IndexOutOfBoundsException si
* el indice es incorrecto
*/
public E get(int indice) {
// comprueba errores
if (indice>ultimo) {
throw new IndexOutOfBoundsException();
}
// retorna el elemento
return lista[indice];
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
22
UNIVERSIDAD
DE CANTABRIA
/**
* Escritura posicional: set
* Lanza IndexOutOfBoundsException si
* el indice es incorrecto
*/
public E set(int indice, E elemento) {
// comprueba errores
if (indice>ultimo) {
throw new IndexOutOfBoundsException();
}
// escribe el elemento y retorna el antiguo
E antiguo=lista[indice];
lista[indice]=elemento;
return antiguo;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
23
UNIVERSIDAD
DE CANTABRIA
/**
* Aadir posicional: add
* Lanza IndexOutOfBoundsException si el indice es
* incorrecto; Lanza IllegalStateException si el
* elemento no cabe
*/
public void add(int indice, E elemento) {
// comprueba errores
if (indice>ultimo+1) {
throw new IndexOutOfBoundsException();
}
if (ultimo==lista.length-1) {
throw new IllegalStateException();
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
24
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
25
UNIVERSIDAD
DE CANTABRIA
/**
* Borrar posicional. Si el indice es incorrecto
* Lanza IndexOutOfBoundsException */
public E remove(int indice) {
if (indice>ultimo) {
throw new IndexOutOfBoundsException();
}
E borrado=lista[indice];
// desplaza elementos hacia atrs
for (int i=indice+1; i<=ultimo; i++) {
lista[i-1]=lista[i];
}
ultimo--;
return borrado;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
26
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el tamao: size
*/
public int size() {
return ultimo+1;
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
27
UNIVERSIDAD
DE CANTABRIA
Elemento ms viejo
Segundo Elemento
Pila
...
cima
Elemento ms nuevo
...
Vaco
Max
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
28
UNIVERSIDAD
DE CANTABRIA
29
UNIVERSIDAD
DE CANTABRIA
Cima
si la pila est vaca lanza noExiste
retorna el elemento de la casilla cima
EstaVacia
retorna cima==-1
Tamao
retorna cima+1
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
30
UNIVERSIDAD
DE CANTABRIA
import java.util.*;
/**
* Pila implementada mediante un array simple
*/
public class PilaArraySimple<E> implements Pila<E>
{
public static int maxPorOmision=50;
// atributos de la pila
private E[] contenido;
private int cima;
/**
* Constructor que crea una pila vaca cuyo
* tamano es maxPorOmision
*/
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
31
UNIVERSIDAD
DE CANTABRIA
public PilaArraySimple()
{
this(maxPorOmision);
}
/**
* Constructor que crea una pila vaca cuyo
* tamano es max
*/
public PilaArraySimple(int max)
{
contenido = (E[]) new Object[max];
cima=-1;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
32
UNIVERSIDAD
DE CANTABRIA
/**
* Apilar un elemento
* Lanza IllegalStateException si est llena
*/
public void apila(E e) {
if (estaLlena()) {
throw new IllegalStateException();
}
cima++;
contenido[cima]=e;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
33
UNIVERSIDAD
DE CANTABRIA
/**
* Desapilar un elemento
*/
public E desapila() throws NoSuchElementException
{
if (estaVacia()) {
throw new NoSuchElementException();
}
cima--;
return contenido[cima+1];
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
34
UNIVERSIDAD
DE CANTABRIA
/**
* Retornar el elem. de la cima, sin desapilarlo
*/
public E cima() throws NoSuchElementException {
if (cima==-1) {
throw new NoSuchElementException();
} else {
return contenido[cima];
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
35
UNIVERSIDAD
DE CANTABRIA
/**
* Saber si la pila esta vaca
*/
public boolean estaVacia() {
return cima==-1;
}
/**
* Saber si la pila esta llena
*/
public boolean estaLlena() {
return cima==contenido.length-1;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
36
UNIVERSIDAD
DE CANTABRIA
/**
* Hacer nula la pila
*/
public void hazNula() {
cima=-1;
}
/**
* Retornar el numero de elementos en la pila
*/
public int tamano() {
return cima+1;
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
37
UNIVERSIDAD
DE CANTABRIA
...
...
contenido
an
a1
an-1
...
a2
fin
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
principio
38
Elementos de la implementacin
mediante cola circular
UNIVERSIDAD
DE CANTABRIA
Array circular
contenido: es un array lineal en el que se considera que el
elemento siguiente al ltimo es el primero
Cursores
principio: primer elemento
fin: ltimo elemento
Almacenamiento de la situacin de cola vaca
dejando siempre al menos un hueco vaco, para distinguir la
cola llena de la cola vaca
o almacenando el nmero de elementos, o un booleano que diga
si la cola est vaca o no
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
39
UNIVERSIDAD
DE CANTABRIA
40
UNIVERSIDAD
DE CANTABRIA
Tamao
(fin-principio+max+1) mod max
Encola
si la cola est llena lanza NoCabe
fin=fin1
meter el elemento nuevo en la casilla fin
Desencola
si la cola est vaca lanza NoExiste
el elemento a retornar es el de la casilla principio
principio=principio1
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
41
Iterador de la cola
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
42
UNIVERSIDAD
DE CANTABRIA
import java.util.*;
/**
* Clase que representa una cola implementada mediante
* un array circular
*/
public class ColaCircular<E> extends AbstractQueue<E>
{
public static int maxPorOmision=50;
// atributos de la cola
private E[] contenido;
private int principio,fin;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
43
UNIVERSIDAD
DE CANTABRIA
/**
* Constructor que crea una cola vaca cuyo
* tamano es maxPorOmision
*/
public ColaCircular()
{
this(maxPorOmision);
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
44
UNIVERSIDAD
DE CANTABRIA
/**
* Constructor que crea una cola vaca cuyo
* tamano es max
*/
public ColaCircular(int max)
{
contenido = (E[]) new Object[max+1];
principio=0;
fin=contenido.length-1;
}
/**
* Constructor que crea una cola cuyos elementos
* obtiene de la coleccin que se le pasa
*/
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
45
UNIVERSIDAD
DE CANTABRIA
public ColaCircular(Collection<E> c) {
// crea la cola del tamano de la coleccin
this(c.size());
// aade todos los elementos a la cola
for (E e:c) {
offer(e);
}
}
// incrementar un cursor
private int incr(int x, int n) {
return (x+n)%contenido.length;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
46
UNIVERSIDAD
DE CANTABRIA
/**
* Aade un elem. a la cola; retorna false si no cabe
* y true si cabe; no admite elementos nulos
*/
public boolean offer(E e) {
if (isFull() || e==null) {
return false;
} else {
fin=incr(fin,1);
contenido[fin]=e;
return true;
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
47
UNIVERSIDAD
DE CANTABRIA
/**
* Elimina y retorna un elemento de la cola
* retorna null si no hay elementos
*/
public E poll() {
if (isEmpty()) {
return null;
} else {
E borrado=contenido[principio];
principio=incr(principio,1);
return borrado;
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
48
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el primer elem. de la cola sin eliminarlo
* retorna null si no hay elementos
*/
public E peek() {
if (isEmpty()) {
return null;
} else {
return contenido[principio];
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
49
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el nmero de elementos
*/
public int size() {
return (fin-principio+contenido.length+1)%
contenido.length;
}
/**
* Indica si la cola est vaca
*/
public boolean isEmpty() {
return incr(fin,1)==principio;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
50
UNIVERSIDAD
DE CANTABRIA
/**
* Indica si la cola esta llena
*/
public boolean isFull() {
return incr(fin,2)==principio;
}
/**
* Clase iterador de la cola circular
*/
public static class ColaCircularIterator<E>
implements Iterator<E>
{
private int siguiente;
private ColaCircular<E> cola;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
51
UNIVERSIDAD
DE CANTABRIA
/**
* Constructor al que se le pasa la cola
* No es pblico, para que se use el metodo
* iterator() al crearlo
*/
ColaCircularIterator(ColaCircular<E> cola) {
this.cola=cola;
siguiente=cola.principio;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
52
UNIVERSIDAD
DE CANTABRIA
/**
* Obtener el proximo elemento y
* avanzar el iterador
*/
public E next() {
if (hasNext()) {
E sig=cola.contenido[siguiente];
siguiente=cola.incr(siguiente,1);
return sig;
} else {
throw new NoSuchElementException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
53
UNIVERSIDAD
DE CANTABRIA
/**
* Indicar si hay elemento siguiente
*/
public boolean hasNext() {
return ! (cola.incr(cola.fin,1)==siguiente);
}
/**
* Borra no se implementa por poco eficiente
*/
public void remove() {
throw new UnsupportedOperationException();
}
} // fin de la clase iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
54
UNIVERSIDAD
DE CANTABRIA
/**
* Iterador de la cola
*/
public Iterator<E> iterator() {
return new ColaCircularIterator<E>(this);
}
} // fin de la clase ColaCircular
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
55
UNIVERSIDAD
DE CANTABRIA
Celdas
a1
a2
...
an
principio
lista
56
UNIVERSIDAD
DE CANTABRIA
Celdas
a1
principio
antUltAcc
ESTADSTICA Y COMPUTACIN
an
previo
iterador
lista
DEPARTAMENTO DE MATEMTICAS,
...
a2
57
UNIVERSIDAD
DE CANTABRIA
Celdas
a1
a2
antUltAcc
previo
...
an
principio
lista
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
58
UNIVERSIDAD
DE CANTABRIA
a) situacin inicial
a
...
c
prximo
antUltAcc
previo
b) despus de proximo
iterador
a
...
antUltAcc
previo
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
59
UNIVERSIDAD
DE CANTABRIA
a) situacin inicial
a
...
antUltAcc
previo
b) despus de previo
iterador
a
antUltAcc
previo
...
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
60
Diagrama de aade
UNIVERSIDAD
DE CANTABRIA
a) antes de aadir
a
...
...
b
prximo
previo
antUltAcc
previo
iterador
b) despus de aadir
a
...
b
prximo
antUltAcc
previo
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
previo
Michael Gonzlez Harbour
17/nov/09
61
UNIVERSIDAD
DE CANTABRIA
a) antes de borrar
a
...
antUltAcc
previo
b) despus de borrar
iterador
a
...
antUltAcc
previo
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
62
UNIVERSIDAD
DE CANTABRIA
a) antes de borrar
a
...
antUltAcc
previo
b) despus de borrar
iterador
a
...
antUltAcc
previo
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
63
UNIVERSIDAD
DE CANTABRIA
array simple
fijo
dinmico
aade
O(n)
O(1)
borra
O(n)
O(1)
busca
O(n)
O(n)
obten elemento i
O(1)
O(n)
cambia elemento i
O(1)
O(n)
O(1)
O(1)
O(1)
O(n)
Tiempo de Siguiente
O(1)
O(1)
Tiempo de Anterior
O(1)
O(n)
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
64
UNIVERSIDAD
DE CANTABRIA
import java.util.*;
/**
* Clase con una lista implementada mediante
* una lista enlazada simple
*/
public class ListaEnlazadaSimple<E>
extends AbstractSequentialList<E>
{
// atributos privados
private Celda<E> principio;
private int num;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
65
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
66
UNIVERSIDAD
DE CANTABRIA
/**
* Constructor que crea la lista vaca
*/
public ListaEnlazadaSimple()
{
// crea la cabecera
principio=new Celda<E>(null);
num=0;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
67
UNIVERSIDAD
DE CANTABRIA
/**
* Constructor que crea la lista vaca con los
* elementos de la coleccin c
*/
public ListaEnlazadaSimple(Collection<E> c)
{
this();
Celda<E> actual=principio;
for (E e:c) {
actual.siguiente=new Celda<E>(e);
actual=actual.siguiente;
num++;
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
68
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el tamano de la lista
*/
public int size() {
return num;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
69
UNIVERSIDAD
DE CANTABRIA
/**
* Clase iteradora de lista
*/
public static class IteradorListaEnlazada<E>
implements ListIterator<E>
{
// atributos del iterador
private Celda<E> previo;
private Celda<E> antUltAcc;
private ListaEnlazadaSimple<E> lista;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
70
UNIVERSIDAD
DE CANTABRIA
/*
* Constructor del iterador; no es publico
*/
IteradorListaEnlazada
(ListaEnlazadaSimple<E> lista)
{
this.lista=lista;
previo=lista.principio;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
71
UNIVERSIDAD
DE CANTABRIA
/*
* Constructor del iterador; no es publico
*/
IteradorListaEnlazada
(ListaEnlazadaSimple<E> lista, int i)
{
this(lista);
for (int j=0; j<i; j++) {
next();
}
antUltAcc==null;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
72
UNIVERSIDAD
DE CANTABRIA
/**
* Indica si hay elemento siguiente
*/
public boolean hasNext() {
return previo.siguiente!=null;
}
/**
* Indica si hay elemento previo
*/
public boolean hasPrevious() {
return previo!=lista.principio;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
73
UNIVERSIDAD
DE CANTABRIA
/**
* Obtiene el siguiente y avanza el iterador
*/
public E next() {
if (hasNext()) {
antUltAcc=previo;
previo=previo.siguiente;
return previo.contenido;
} else {
throw new NoSuchElementException();
}
}
/**
* Obtiene elem. previo y retrocede el iterador
*/
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
74
UNIVERSIDAD
DE CANTABRIA
public E previous() {
if (hasPrevious()) {
E cont=previo.contenido;
// buscar el elemento anterior al previo
Celda<E> anterior=lista.principio;
while (anterior.siguiente!=previo) {
anterior=anterior.siguiente;
}
previo=anterior;
antUltAcc=previo;
return cont;
} else {
throw new NoSuchElementException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
75
UNIVERSIDAD
DE CANTABRIA
/**
* Obtiene el indice del elemento proximo
*/
public int nextIndex() {
return previousIndex()+1;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
76
UNIVERSIDAD
DE CANTABRIA
/**
* Obtiene el indice del elemento previo
*/
public int previousIndex() {
int ind=-1;
Celda<E> actual=lista.principio;
while (actual!=previo) {
actual=actual.siguiente;
ind++;
}
return ind;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
77
UNIVERSIDAD
DE CANTABRIA
/**
* Borra el ultimo elemento accedido */
public void remove() {
if (antUltAcc!=null) {
Celda<E> borrar=antUltAcc.siguiente;
antUltAcc.siguiente=borrar.siguiente;
if (previo==borrar) {
previo=antUltAcc;
}
antUltAcc=null;
lista.num--;
} else {
throw new IllegalStateException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
78
UNIVERSIDAD
DE CANTABRIA
/**
* Cambia el ultimo elemento accedido
*/
public void set(E e) {
if (antUltAcc!=null) {
antUltAcc.siguiente.contenido=e;
} else {
throw new IllegalStateException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
79
UNIVERSIDAD
DE CANTABRIA
/**
* Anade un elem. entre el previo y el proximo
*/
public void add(E e) {
Celda<E> nueva=new Celda<E>(e);
nueva.siguiente=previo.siguiente;
previo.siguiente=nueva;
previo=nueva;
antUltAcc=null;
lista.num++;
}
} // fin de la clase iteradora
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
80
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el iterador
*/
public ListIterator<E> listIterator() {
return new IteradorListaEnlazada<E>(this);
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
81
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el iterador colocado
* en la posicion i
*/
public ListIterator<E> listIterator(int i) {
if (i>=0 && i<=size()) {
return new IteradorListaEnlazada<E>(this,i);
} else {
throw new IndexOutOfBoundsException();
}
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
82
UNIVERSIDAD
DE CANTABRIA
a1
a2
...
an
principio
fin
cola
83
UNIVERSIDAD
DE CANTABRIA
a) Insertar
a1
a2
principio
fin
...
an
an+1
cola
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
nuevaCelda
84
b) Extraer
a1
a2
...
UNIVERSIDAD
DE CANTABRIA
an
principio
Antes
fin
cola
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
Despus
85
UNIVERSIDAD
DE CANTABRIA
import java.util.*;
/**
* Clase que representa una cola implementada mediante
* una lista enlazada
*/
public class ColaEnlazada<E> extends AbstractQueue<E>
{
// atributos de la cola
private Celda<E> principio,fin;
private int num;
// clase privada que define la celda
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
86
UNIVERSIDAD
DE CANTABRIA
87
UNIVERSIDAD
DE CANTABRIA
/**
* Constructor que crea una cola con los elementos
* de la coleccin que se le pasa
*/
public ColaEnlazada(Collection<E> c) {
// crea la cola vaca
this();
// anade todos los elementos a la cola
for (E e:c) {
offer(e);
}
}
/**
* Anade elemento a la cola; retorna false si no cabe
* y true en otro caso; no admite elementos nulos */
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
88
UNIVERSIDAD
DE CANTABRIA
89
UNIVERSIDAD
DE CANTABRIA
90
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el 1 elemento de la cola sin eliminarlo
* retorna null si no hay elementos
*/
public E peek() {
if (isEmpty()) {
return null;
} else {
return principio.contenido;
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
91
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el numero de elementos
*/
public int size() {
return num;
}
/**
* Indica si la cola esta vaca
*/
public boolean isEmpty() {
return principio==null;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
92
UNIVERSIDAD
DE CANTABRIA
/**
* Clase iterador de la cola enlazada
*/
public static class ColaEnlazadaIterator<E>
implements Iterator<E>
{
private Celda<E> siguiente;
private ColaEnlazada<E> cola;
ColaEnlazadaIterator(ColaEnlazada<E> cola) {
this.cola=cola;
siguiente=cola.principio;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
93
UNIVERSIDAD
DE CANTABRIA
/**
* Obtener el proximo elem. y avanzar el iterador
*/
public E next() {
if (hasNext()) {
E sig=siguiente.contenido;
siguiente=siguiente.siguiente;
return sig;
} else {
throw new NoSuchElementException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
94
UNIVERSIDAD
DE CANTABRIA
/**
* Indicar si hay elemento siguiente
*/
public boolean hasNext() {
return siguiente!=null;
}
/**
* Borra no se implementa, por poco eficiente
*/
public void remove() {
throw new UnsupportedOperationException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
95
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el iterador de la cola enlazada
*/
public Iterator<E> iterator() {
return new ColaEnlazadaIterator<E>(this);
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
96
...
...
UNIVERSIDAD
DE CANTABRIA
97
principio
m
principio
<cab>
<cab>
-1
10
2
a
contenido
ESTADSTICA Y COMPUTACIN
10
0
DEPARTAMENTO DE MATEMTICAS,
-1
6
6
libre
7
4
4
5
UNIVERSIDAD
DE CANTABRIA
8
prximo
98
UNIVERSIDAD
DE CANTABRIA
libre
1
0
0
-1
contenido
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
prximo
99
Inicializacin
UNIVERSIDAD
DE CANTABRIA
mtodo inicializa
para i desde 0 hasta maxElem-2, paso -1
hacer
proximo[i]:=i+1;
fpara;
libre:=0;
proximo[maxElem-1]:=-1; // final de lista
fmtodo
Si las tablas son estticas, hay que asegurarse de que se
inicializan antes de que otros objetos puedan usarlas
En java se puede usar un inicializador esttico
static {
inicializa();
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
100
UNIVERSIDAD
DE CANTABRIA
a) antes de pedir
...
libre
b) despus de pedir
posicionCelda
...
libre
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
101
Pedir Celda
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
102
UNIVERSIDAD
DE CANTABRIA
libre
b) despus de liberar
posicionCelda
...
libre
posicionCelda
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
103
Liberar Celda
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
104
UNIVERSIDAD
DE CANTABRIA
mtodo Constructor()
principio=pedirCelda(null);
fmtodo;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
105
Iterador de la lista
UNIVERSIDAD
DE CANTABRIA
Celdas
a1
principio
antUltAcc
ESTADSTICA Y COMPUTACIN
an
previo
iterador
lista
DEPARTAMENTO DE MATEMTICAS,
...
a2
106
UNIVERSIDAD
DE CANTABRIA
import java.util.*;
/**
* Clase que representa una lista implementada con
* una lista enlazada simple
*/
public class ListaCursores<E>
extends AbstractSequentialList<E>
{
// Espacio para colocar las listas
// se define con atributos estticos
public static int maxElem=1000;
private static int[] proximo=new int[maxElem];
private static Object[] contenido=
new Object[maxElem];
private static int libre;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
107
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
108
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
109
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
110
UNIVERSIDAD
DE CANTABRIA
/**
* Constructor que crea la lista vaca
*/
public ListaCursores()
{
// crea la cabecera
principio=pedirCelda(null);
num=0;
}
/**
* Constructor que crea la lista vaca con los
* elementos de la coleccin c
*/
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
111
UNIVERSIDAD
DE CANTABRIA
public ListaCursores(Collection<E> c) {
this();
int actual=principio;
for (E e:c) {
proximo[actual]=pedirCelda(e);
actual=proximo[actual];
num++;
}
}
/**
* Retorna el tamano de la lista
*/
public int size() {
return num;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
112
UNIVERSIDAD
DE CANTABRIA
/**
* Clase iteradora de lista
*/
public static class IteradorListaCursores<E>
implements ListIterator<E>
{
// atributos del iterador
private int previo;
private int antUltAcc;
private ListaCursores<E> lista;
/*
* Constructor del iterador; no es publico
*/
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
113
UNIVERSIDAD
DE CANTABRIA
IteradorListaCursores(ListaCursores<E> lista) {
this.lista=lista;
previo=lista.principio;
antUltAcc=-1;
}
/** Constructor del iterador; no es publico */
IteradorListaCursores(ListaCursores<E> lista,
int i)
{
this(lista);
for (int j=0; j<i; j++) {
next();
}
antUltAcc==-1;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
114
UNIVERSIDAD
DE CANTABRIA
/**
* Indica si hay elemento siguiente
*/
public boolean hasNext() {
return proximo[previo]!=-1;
}
/**
* Indica si hay elemento previo
*/
public boolean hasPrevious() {
return previo!=lista.principio;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
115
UNIVERSIDAD
DE CANTABRIA
/**
* Obtiene el siguiente y avanza el iterador
*/
public E next() {
if (hasNext()) {
antUltAcc=previo;
previo=proximo[previo];
return (E) contenido[previo];
} else {
throw new NoSuchElementException();
}
}
/**
* Obtiene el elemento previo y retrocede
*/
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
116
UNIVERSIDAD
DE CANTABRIA
public E previous() {
if (hasPrevious()) {
E cont=(E) contenido[previo];
// buscar el elemento anterior al previo
int anterior=lista.principio;
while (proximo[anterior]!=previo) {
anterior=proximo[anterior];
}
previo=anterior;
antUltAcc=previo;
return cont;
} else {
throw new NoSuchElementException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
117
UNIVERSIDAD
DE CANTABRIA
/**
* Obtiene el indice del elemento previo
*/
public int previousIndex() {
int ind=-1;
int actual=lista.principio;
while (actual!=previo) {
actual=proximo[actual];
ind++;
}
return ind;
}
/**
* Borra el ultimo elemento accedido
*/
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
118
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
119
UNIVERSIDAD
DE CANTABRIA
/**
* Obtiene el indice del elemento proximo
*/
public int nextIndex() {
return previousIndex()+1;
}
/**
* Cambia el ultimo elemento accedido */
public void set(E e) {
if (antUltAcc!=-1) {
contenido[proximo[antUltAcc]]=e;
} else {
throw new IllegalStateException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
120
UNIVERSIDAD
DE CANTABRIA
/**
* Anade un nuevo e entre el previo y el proximo
*/
public void add(E e) {
int nueva=pedirCelda(e);
proximo[nueva]=proximo[previo];
proximo[previo]=nueva;
previo=nueva;
antUltAcc=-1;
lista.num++;
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
121
UNIVERSIDAD
DE CANTABRIA
/**
* Metodo que retorna el iterador
*/
public ListIterator<E> listIterator() {
return new IteradorListaCursores<E>(this);
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
122
UNIVERSIDAD
DE CANTABRIA
/**
* Metodo que retorna el iterador colocado
* en la posicion i
*/
public ListIterator<E> listIterator(int i) {
if (i>=0 && i<=size()) {
return new IteradorListaCursores<E>(this,i);
} else {
throw new IndexOutOfBoundsException();
}
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
123
UNIVERSIDAD
DE CANTABRIA
a1
a2
...
...
an
principio
fin
lista
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
124
Iterador de la lista
UNIVERSIDAD
DE CANTABRIA
a1
...
...
a2
an
principio
ultAcc
fin
iterador
lista
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
proximo
125
a1
UNIVERSIDAD
DE CANTABRIA
...
...
a2
an
principio
ultAcc
fin
iterador
lista
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
proximo
126
a1
UNIVERSIDAD
DE CANTABRIA
...
...
a2
an
principio
ultAcc
fin
iterador
lista
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
proximo
127
UNIVERSIDAD
DE CANTABRIA
a) situacin inicial
a
...
ultAcc
proximo
b) despus de proximo
iterador
a
...
ultAcc
proximo
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
128
UNIVERSIDAD
DE CANTABRIA
a) situacin inicial
a
...
ultAcc
proximo
b) despus de previo
iterador
a
...
ultAcc
proximo
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
129
Diagrama de aade
UNIVERSIDAD
DE CANTABRIA
a) situacin inicial
a
...
...
ultAcc
proximo
b) despus de aade
iterador
a
ultAcc
proximo
ESTADSTICA Y COMPUTACIN
...
a
nuevaCelda
iterador
DEPARTAMENTO DE MATEMTICAS,
130
UNIVERSIDAD
DE CANTABRIA
a) situacin inicial
a
ultAcc
proximo
...
b) despus de borra
iterador
a
...
ultAcc
proximo
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
131
UNIVERSIDAD
DE CANTABRIA
a) situacin inicial
a
ultAcc
proximo
...
b) despus de borra
iterador
a
...
ultAcc
proximo
iterador
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
132
UNIVERSIDAD
DE CANTABRIA
import java.util.*;
/**
* Clase que representa una lista implementada con
* una lista doblemente enlazada
*/
public class ListaDoblementeEnlazada<E>
extends AbstractSequentialList<E>
{
// atributos privados
private Celda<E> principio;
private Celda<E> fin;
private int num;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
133
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
134
UNIVERSIDAD
DE CANTABRIA
public ListaDoblementeEnlazada()
{
num=0;
}
/**
* Constructor que crea la lista vaca con los
* elementos de la coleccin c
*/
public ListaDoblementeEnlazada(Collection<E> c) {
this();
for (E e:c) {
add(e); // inserta al final
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
135
UNIVERSIDAD
DE CANTABRIA
/**
* Retorna el tamano de la lista
*/
public int size() {
return num;
}
/**
* Anade al final
*/
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
136
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
137
UNIVERSIDAD
DE CANTABRIA
/**
* Clase iteradora de lista
*/
public static class
IteradorListaDoblementeEnlazada<E>
implements ListIterator<E>
{
// atributos del iterador
private Celda<E> proximo;
private Celda<E> ultAcc;
private ListaDoblementeEnlazada<E> lista;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
138
UNIVERSIDAD
DE CANTABRIA
/*
* Constructores del iterador; no son pblicos
*/
IteradorListaDoblementeEnlazada
(ListaDoblementeEnlazada<E> lista)
{
this.lista=lista;
proximo=lista.principio;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
139
UNIVERSIDAD
DE CANTABRIA
IteradorListaDoblementeEnlazada
(ListaDoblementeEnlazada<E> lista, int i)
{
this(lista);
if (i==lista.num) {
proximo=null; // nos ponemos al final
} else {
// este bucle se podra optimizar empezando
// por el final si i>num/2
for (int j=0; j<i; j++) {
next();
}
ultAcc=null;
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
140
UNIVERSIDAD
DE CANTABRIA
/**
* Indica si hay elemento siguiente
*/
public boolean hasNext() {
return proximo!=null;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
141
UNIVERSIDAD
DE CANTABRIA
/**
* Obtiene el siguiente y avanza el iterador
*/
public E next() {
if (hasNext()) {
ultAcc=proximo;
proximo=proximo.siguiente;
return ultAcc.contenido;
} else {
throw new NoSuchElementException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
142
UNIVERSIDAD
DE CANTABRIA
/**
* Indica si hay elemento previo
*/
public boolean hasPrevious() {
return proximo!=lista.principio;
}
/**
* Obtiene el elemento previo y
* retrocede el iterador
*/
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
143
UNIVERSIDAD
DE CANTABRIA
public E previous() {
if (hasPrevious()) {
if (proximo==null) {
// estamos despus del final
proximo=lista.fin;
} else {
proximo=proximo.anterior;
}
ultAcc=proximo;
return proximo.contenido;
} else {
throw new NoSuchElementException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
144
UNIVERSIDAD
DE CANTABRIA
/**
* Obtiene el indice del elemento proximo
*/
public int nextIndex() {
return previousIndex()+1;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
145
UNIVERSIDAD
DE CANTABRIA
/**
* Obtiene el indice del elemento previo
*/
public int previousIndex() {
int ind=-1;
Celda<E> actual=lista.principio;
while (actual!=proximo) {
actual=actual.siguiente;
ind++;
}
return ind;
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
146
UNIVERSIDAD
DE CANTABRIA
/**
* Borra el ultimo elemento accedido
*/
public void remove() {
if (ultAcc!=null) {
if (ultAcc.anterior==null) {
// borrando el primero
lista.principio=ultAcc.siguiente;
} else {
ultAcc.anterior.siguiente=
ultAcc.siguiente;
}
if (ultAcc.siguiente==null) {
// borrando el ultimo
lista.fin=ultAcc.anterior;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
147
UNIVERSIDAD
DE CANTABRIA
} else {
ultAcc.siguiente.anterior=
ultAcc.anterior;
}
if (proximo==ultAcc) {
proximo=ultAcc.siguiente;
}
ultAcc=null;
lista.num--;
} else {
throw new IllegalStateException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
148
UNIVERSIDAD
DE CANTABRIA
/**
* Cambia el ultimo elemento accedido
*/
public void set(E e) {
if (ultAcc!=null) {
ultAcc.contenido=e;
} else {
throw new IllegalStateException();
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
149
UNIVERSIDAD
DE CANTABRIA
/**
* Anade un nuevo elemento entre el previo
* y el proximo
*/
public void add(E e) {
if (proximo==null) {
//anade al final
lista.add(e);
} else {
Celda<E> nueva=new Celda<E>(e);
Celda<E> previo=proximo.anterior;
nueva.siguiente=proximo;
proximo.anterior=nueva;
nueva.anterior=previo;
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
150
UNIVERSIDAD
DE CANTABRIA
if (previo==null) {
// insertar al principio
lista.principio=nueva;
} else {
previo.siguiente=nueva;
}
lista.num++;
}
ultAcc=null;
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
151
UNIVERSIDAD
DE CANTABRIA
/**
* Metodo que retorna el iterador
*/
public ListIterator<E> listIterator() {
return new
IteradorListaDoblementeEnlazada<E>(this);
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
152
UNIVERSIDAD
DE CANTABRIA
/**
* Metodo que retorna el iterador colocado
* en la posicion i
*/
public ListIterator<E> listIterator(int i) {
if (i>=0 && i<=size()) {
return new
IteradorListaDoblementeEnlazada<E>(this,i);
} else {
throw new IndexOutOfBoundsException();
}
}
}
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
153
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
154