Tema 6 Colas Listas

download Tema 6 Colas Listas

of 14

Transcript of Tema 6 Colas Listas

  • 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