La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Colas y Listas Enlazadas

Presentaciones similares


Presentación del tema: "Colas y Listas Enlazadas"— Transcripción de la presentación:

1 Colas y Listas Enlazadas
Colas doblemenre enlazadas

2 Colas Una cola se diferencia de una pila en que las operaciones de inserción y extracción siguen el principio de primero en entrar - primero en salir (first-in-first-out, FIFO). Los elementos se pueden insertar en cualquier momento, pero solo el elemento que ha permanecido el mayor tiempo puede ser extraído. Los elementos se insertan (enqueued) al final (rear) y se extraen (dequeued) desde el frente (front).

3 El tipo de Dato Abstracto Cola
La cola tiene dos métodos fundamentales: enqueue(o): Inserta objecto o al final de la cola dequeue(): Extrae el objeto del frente de la cola y lo devuelve; ocurre un error si la cola está vacía Los siguientes métodos de soporte deben ser definidos: size(): Devuelve el núemro de objetos en la cola isEmpty(): Devuelve un valor lógico que indica si la cola está vacía front(): Devuelve, sin eliminar, el objeto del frente de la cola; ocurre un error si la cola está vacía

4 Cola basada en Array Crea una cola usando un array de forma circular.
Se especifica un tamaño máximo N, e.g. N = 1,000. La cola consiste de un array Q de N-elementos y dos variables enteras: -f, índice del elemento del frente -r, índice del elemento siguiente al final de la cola “configuración normal” Preguntas: Qué significa f=r? Cómo se calcula el número de elementos en la cola desde f y r?

5 Cola basada en Array (1) Pseudocódigo Algoritmo size():
return (N - f + r) mod N Algoritmo isEmpty(): return (f = r) Algoritmo front(): if isEmpty() then throw a QueueEmptyException return Q[f] Algoritmo dequeue(): if isEmpty() then throw QueueEmptyException temp  Q[f] Q[f]  null f  (f + 1) mod N return temp Algoritmo enqueue(o): if size = N - 1 then throw QueueFullException Q[r]  o

6 Implementación de una Cola con una Lista Enlazada Simple
Lista Enlazada Simple: Nodos conectados en cadena por enlaces La cabeza de la lista es el frente de la cola, la cola de la lista es el final de la cola. Porqué no lo contrario?

7 Extración de la Cabeza

8 Insertando por la cola

9 Colas con finales dobles
Una cola con doble-final, o deque, soporta inserción y extracción desde el frente y el final. El Tipo de Dato Abstracto Deque insertFirst(e): Inserta e al de-inicio de la deque. insertLast(e): Inserta e al de-final de la deque removeFirst(): Extrae y devuelve primer elemento removeLast(): Extrae y devuelve último elemento Métodos de soporte adicionales: first() last() size() isEmpty()

10 Implementando Pilas y Colas con Deques
Pilas con Deques: Colas con Deques:

11 El Patrón Adaptor El uso de un deque para implementar una pila o cola es un ejemplo del patrón adaptor. Los patrones Adaptor patterns implementan una clase mediante el uso de métodos de otra clase. En general, las clases adaptor especializan clases generales Dos aplicaciones son: Especializar una clase general mediante la modificación de algunos métodos. Ej: implementación de una pila con un deque. Especializar los tipos de objetos usados por una clase general. Ej: Definición de la clase IntegerArrayStack que adapta ArrayStack para almacenar solo enteros.

12 Implementación de Deques con Listas Doblemente Enlazadas
La eliminación al final de una lista enlazada simple no se puede realizar en tiempo constante. Para implementar una deque, se usa una lista doblemente enlazada, con nodos cabeceros y finales especiales Un nodo de una lista doblemente enlazada tiene un enlace next y prev. Soporta los siguientes métodos: setElement(Object e) setNext(Object newNext) setPrev(Object newPrev) getElement() getNext() getPrev() Mediante el uso de una lista doblemente enlazada, todos los métodos de un corren en tiempo O(1).

13 Implementación de Deques con Listas Doblemente Enlazadas (1)
Cuando se implementan listas doblemente enlazadas, se añaden dos nodos especiales en los finales de las listas: los nodos header y trailer. El nodo header va antes del primer elemento de la lista. Tiene un enlace válido next y null como enlace prev. El nodo trailer va después del último elemento. Tiene una referencia prev válida pero una referencia nula en next. NOTA: los nodos header y trailer son centinelas o nodos “vacios” porque no guardan elementos.

14 Implementación de Deques con Listas Doblemente Enlazadas (2)
Visualización del código para removeLast().


Descargar ppt "Colas y Listas Enlazadas"

Presentaciones similares


Anuncios Google