uoc.ei.tads
Class ListaDoblementeEncadenada<E>

java.lang.Object
  extended by uoc.ei.tads.ListaEncadenada<E>
      extended by uoc.ei.tads.ListaDoblementeEncadenada<E>
All Implemented Interfaces:
java.io.Serializable, Contenedor<E>, Lista<E>

public class ListaDoblementeEncadenada<E>
extends ListaEncadenada<E>

Secuencia posicional que se caracteriza por disponer de operaciones basadas en la posición que ocupa un elemento dentro del contenedor. Hereda de lista encadenada la estructura con un solo encadenamiento (nodo siguiente) y añade un segundo para optimizar las operaciones que necesitan conocer al nodo anterior dentro de la secuencia.

See Also:
Posicion, Serialized Form

Nested Class Summary
protected static class ListaDoblementeEncadenada.NodoDoblementeEncadenado<E>
          Clase que implementa un nodo con dos encadenamientos a nodo, al siguiente y al anterior en una lista doblemente encadenada..
protected static class ListaDoblementeEncadenada.RecorridoBidireccionalLista<E>
          Clase que proporciona un recorrido de las posiciones.
 
Nested classes/interfaces inherited from class uoc.ei.tads.ListaEncadenada
ListaEncadenada.NodoEncadenado<E>, ListaEncadenada.RecorridoUnidireccionalLista<E>
 
Field Summary
 
Fields inherited from class uoc.ei.tads.ListaEncadenada
n, ultimo
 
Constructor Summary
ListaDoblementeEncadenada()
           
 
Method Summary
protected  ListaEncadenada.NodoEncadenado<E> anterior(ListaEncadenada.NodoEncadenado<E> nodo)
          Retorna el nodo anterior al recibido como parámetro.
 E borrar(Posicion<E> nodo)
          Borra la posición recibida.
 E borrarPrimero()
          Borra la primera posición de la lista.
 E borrarSiguiente(Posicion<E> nodo)
          Borra la posición siguiente.
 IteradorBidireccional<E> elementos(RecorridoBidireccional.InicioRecorrido inicio)
          Accesor de lectura de los elementos que hay en el contenedor.
protected  ListaEncadenada.NodoEncadenado<E> nuevaPosicion(ListaEncadenada.NodoEncadenado<E> nodo, E elem)
          Crea un nodo encadenado.
 RecorridoBidireccional<E> posiciones(RecorridoBidireccional.InicioRecorrido inicio)
          Método que soporta múltiples recorridos, de las posiciones del contenedor, simultáneos e independientes entre ellos.
 
Methods inherited from class uoc.ei.tads.ListaEncadenada
elementos, estaVacio, insertarAlFinal, insertarAlPrincipio, insertarAntesDe, insertarDespuesDe, intercambiar, numElems, posiciones, reemplazar, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ListaDoblementeEncadenada

public ListaDoblementeEncadenada()
Method Detail

borrarPrimero

public E borrarPrimero()
                throws ExcepcionContenedorVacio
Borra la primera posición de la lista.

Specified by:
borrarPrimero in interface Lista<E>
Overrides:
borrarPrimero in class ListaEncadenada<E>
Returns:
elemento que había en la posición
Throws:
ExcepcionContenedorVacio - si la lista está vacía

borrar

public E borrar(Posicion<E> nodo)
Borra la posición recibida.

Specified by:
borrar in interface Lista<E>
Overrides:
borrar in class ListaEncadenada<E>
Parameters:
nodo - posición que se quiere eliminar
Returns:
elemento que había a la posición
Throws:
ExcepcionPosicionInvalida - si la posición es null o no válida

borrarSiguiente

public E borrarSiguiente(Posicion<E> nodo)
Borra la posición siguiente.

Specified by:
borrarSiguiente in interface Lista<E>
Overrides:
borrarSiguiente in class ListaEncadenada<E>
Parameters:
nodo - posición anterior a la que se quiere eliminar; si es null se elimina la primera posición.
Returns:
elemento que había en la posición siguiente
Throws:
ExcepcionPosicionInvalida - si la posición es no válida

anterior

protected ListaEncadenada.NodoEncadenado<E> anterior(ListaEncadenada.NodoEncadenado<E> nodo)
Retorna el nodo anterior al recibido como parámetro. En esta lista doblemente encadenada la operación tiene un coste temporal u: O(1).

Overrides:
anterior in class ListaEncadenada<E>
Parameters:
nodo - posición de referencia, no null
Returns:
nodo anterior al recibido como parámetro

nuevaPosicion

protected ListaEncadenada.NodoEncadenado<E> nuevaPosicion(ListaEncadenada.NodoEncadenado<E> nodo,
                                                          E elem)
Crea un nodo encadenado. Se puede sobrescribir por las subclases que necesiten trabajar con descendientes de NodoEncadenado.

Overrides:
nuevaPosicion in class ListaEncadenada<E>
Parameters:
nodo - posición anterior a la del nuevo nodo; puede ser nulo
elem - elemento que se quiere añadir a la lista
Returns:
nodo nuevo conteniendo el elemento recibo como parámetro; situado entre el nodo recibo como parámetro y su siguiente

elementos

public IteradorBidireccional<E> elementos(RecorridoBidireccional.InicioRecorrido inicio)
Accesor de lectura de los elementos que hay en el contenedor. Retorna una enumeración. Enumerar es simplemente enunciar la una detrás la otra (las cosas de una serie, las partes de un todo). Pero si el contenedor tiene definido algún tipo de ordenación o de recorrido, la enumeración debe ser consecuente y ofrecer los elementos por orden (FIFO, LIFO, inordre, etc.), sin alterar el estado actual del contenedor. Si durante el recorrido se altera la estructura de posiciones del contenedor, los resultados son imprevisibles.

Parameters:
inicio - donde se inicia el recorrido; valores válidos son: - InicioRecorrido.PRINCIPIO y - InicioRecorrido.FINAL
Returns:
enumeración de los elementos del contenedor en un sentido
Throws:
ExcepcionPosicionInvalida - si se quiere obtener el siguiente elemento de la enumeración y no hay ningún o no hay ningún más
See Also:
Iterador.haySiguiente(), Iterador.siguiente(), IteradorBidireccional.hayAnterior(), IteradorBidireccional.anterior()

posiciones

public RecorridoBidireccional<E> posiciones(RecorridoBidireccional.InicioRecorrido inicio)
Método que soporta múltiples recorridos, de las posiciones del contenedor, simultáneos e independientes entre ellos.

Returns:
enumeración de las posiciones del contenedor
See Also:
RecorridoBidireccional