8/19/2019 Tema 6 Colas Listas
1/14
1
Colas y Listas Enlazadas
ColasListas Enlazadas
Colas doblemenre enlazadas
8/19/2019 Tema 6 Colas Listas
2/14
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).
8/19/2019 Tema 6 Colas Listas
3/14
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 colaisEmpty(): 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
8/19/2019 Tema 6 Colas Listas
4/14
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?
8/19/2019 Tema 6 Colas Listas
5/14
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 aQueueEmptyException
return Q[f]
Algoritmo dequeue():
if isEmpty() then
throw
QueueEmptyExceptiontemp← 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
8/19/2019 Tema 6 Colas Listas
6/14
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?
8/19/2019 Tema 6 Colas Listas
7/14
7
Extración de la Cabeza
8/19/2019 Tema 6 Colas Listas
8/14
8
Insertando por la cola
8/19/2019 Tema 6 Colas Listas
9/14
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()
8/19/2019 Tema 6 Colas Listas
10/14
8/19/2019 Tema 6 Colas Listas
11/14
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.
8/19/2019 Tema 6 Colas Listas
12/14
12
Implementación de Deques con
Listas Doblemente Enlazadas•La eliminación al final de una listaenlazada simple no se puede realizar en
tiempo constante.
•Para implementar una deque, se usa
una lista doblemente enlazada, connodos 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 uncorren en tiempo O(1).
8/19/2019 Tema 6 Colas Listas
13/14
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.
8/19/2019 Tema 6 Colas Listas
14/14
Top Related