Colas y Listas Enlazadas - PowerPoint PPT Presentation

About This Presentation
Title:

Colas y Listas Enlazadas

Description:

Los elementos se pueden insertar en cualquier momento, pero solo el elemento que ... enqueue(o): Inserta objecto o al final de la cola ... – PowerPoint PPT presentation

Number of Views:922
Avg rating:3.0/5.0
Slides: 15
Provided by: pedroco7
Category:

less

Transcript and Presenter's Notes

Title: Colas y Listas Enlazadas


1
Colas y Listas Enlazadas
Colas 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 fr?
  • 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 Qf
Algoritmo dequeue() if isEmpty() then throw
QueueEmptyException temp ? Qf Qf ? null f
? (f 1) mod N return temp Algoritmo
enqueue(o) if size N - 1 then throw
QueueFullException Qr ? 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().
Write a Comment
User Comments (0)
About PowerShow.com