La clase Deque

(No version information available, might only be in Git)

Introducción

Un Deque (pronunciado “deck”) es una secuencia de valores en un búfer contiguo que crece y se contrae automáticamente. El nombre es una abreviación inglesa común de “double-ended queue” (cola de doble final) y es usado internamente por Ds\Queue.

Dos punteros son usados para mantener el seguimiento de una cabecera y una cola. Los punteros pueden “envolver alrededor” el final del búfer, lo cual evita la necesidad de mover otros valores alrededor para hacer un espacio. Esto permite que hacer cambios y deshacer cambios sean muy rápidos —  algo en que Ds\Vector no puede competir.

Accediendo a un valor por el índice requiere una traducción entre el índice y su posición correspondiente en el búfer: ((cabecera + posición) % capacidad).

Fortalezas

  • Soporta la sintaxis array (corchetes).
  • Utiliza menos memoria total que un array para el mismo número de valores.
  • Automáticamente libera la memoria asignada cuando su tamaño cae lo suficientemente bajo.
  • get(), set(), push(), pop(), shift(), y unshift() son todos O(1).

Debilidades

  • La capacidad debe ser una potencia de 2.
  • insert() y remove() son O(n).

Sinopsis de la Clase

Ds\Deque implements Ds\Sequence {
/* Constantes */
const int MIN_CAPACITY = 8 ;
/* Métodos */
public allocate ( int $capacity ) : void
public apply ( callable $callback ) : void
public capacity ( void ) : int
public clear ( void ) : void
public contains ([ mixed $...values ] ) : bool
public copy ( void ) : Ds\Deque
public filter ([ callable $callback ] ) : Ds\Deque
public find ( mixed $value ) : mixed
public first ( void ) : mixed
public get ( int $index ) : mixed
public insert ( int $index [, mixed $...values ] ) : void
public isEmpty ( void ) : bool
public join ([ string $glue ] ) : string
public last ( void ) : mixed
public map ( callable $callback ) : Ds\Deque
public merge ( mixed $values ) : Ds\Deque
public pop ( void ) : mixed
public push ([ mixed $...values ] ) : void
public reduce ( callable $callback [, mixed $initial ] ) : mixed
public remove ( int $index ) : mixed
public reverse ( void ) : void
public reversed ( void ) : Ds\Deque
public rotate ( int $rotations ) : void
public set ( int $index , mixed $value ) : void
public shift ( void ) : mixed
public slice ( int $index [, int $length ] ) : Ds\Deque
public sort ([ callable $comparator ] ) : void
public sorted ([ callable $comparator ] ) : Ds\Deque
public sum ( void ) : number
public toArray ( void ) : array
public unshift ([ mixed $values ] ) : void
}

Constantes predefinidas

Ds\Deque::MIN_CAPACITY

Tabla de contenidos