Colas y listas enlazadas
Download
1 / 14

Colas y Listas Enlazadas - PowerPoint PPT Presentation


  • 90 Views
  • Uploaded on

Colas y Listas Enlazadas. Colas Listas Enlazadas Colas doblemenre enlazadas. 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) .

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Colas y Listas Enlazadas' - qiana


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Colas y listas enlazadas
Colas y Listas Enlazadas

Colas

Listas Enlazadas

Colas doblemenre enlazadas


Colas
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).


El tipo de dato abstracto cola
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


Cola basada en array
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?


Cola basada en array 1
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


Implementaci n de una cola con una lista enlazada simple
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?




Colas con finales dobles
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()


Implementando pilas y colas con deques
Implementando Pilas y Colas con Deques

Pilas con Deques:

Colas con Deques:


El patr n adaptor
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.


Implementaci n de deques con listas doblemente enlazadas
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).


Implementaci n de deques con listas doblemente enlazadas 1
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.


Implementaci n de deques con listas doblemente enlazadas 2
Implementación de Deques con Listas Doblemente Enlazadas (2)

Visualización del código para removeLast().


ad