02-12-2020

Pilas y colas en php: cómo implementarlas

Las pilas y colas en php son una lista doblemente enlazada, en ambas direcciones. Son bastante sencillas de usar. Seguro que muchos programadores de php usan arrays que permiten "simular" una pila y una cola ya que hay funciones que permiten sacar el último y primer elemento de un array (aparte de usar el índice 0 para el primer índice y el índice del tamaño del array menos 1 para el último elemento, suponiendo que no sea un array asociativo).
Os muestro un ejemplo sencillo de cada:
  • Pilas (SplStack): Es una pila y como tal los elementos se añaden al final y se van "sacando" por el último.

      //Crea la pila
      $stack = new SplStack();
    
      //Añade elementos
      $stack->push('1');
      $stack->push('2');
      $stack->push('3');
    
      //Muestra el número de elementos de la pila (3)
      echo $stack->count();
    
      //Situa el puntero al final de la cola
      $stack->rewind();
    
      //Muestra los elementos (3, 2, 1)
      while( $stack->valid() )
      {
    echo $stack->current(), PHP_EOL;
    $stack->next();
      }
    
    //Saca de la pila el último elemento y lo muestra
    echo $stack->pop();
    
      //Situa el puntero al final de la cola
    $stack->rewind();
    
    //Muestra el número de elementos de la pila (2)
    echo $stack->count();
    
      //Muestra los elementos (2, 1)
    while( $stack->valid() )
    {
    echo $stack->current(), PHP_EOL;
    $stack->next();
    }
    
  • Colas (SplQueue): Es una cola y como tal los elementos se añaden al final y se van "sacando" por el primero.

      //Crea la cola
      $queue= new SplQueue();
    
      //Añade elementos
      $queue->enqueue('1');
      $queue->enqueue('2');
      $queue->enqueue('3');
    
      //Muestra el número de elementos de la cola(3)
      echo $queue->count();
    
      //Situa el puntero al principio de la cola
      $queue->rewind();
    
      //Muestra los elementos (1, 2, 3)
      while( $queue->valid() )
      {
    echo $queue->current(), PHP_EOL;
    $queue->next();
      }
    
    //Saca de la cola el primer elemento y lo muestra
    echo $queue->dequeue();
    
      //Situa el puntero al principio de la cola
    $queue->rewind();
    
    //Muestra el número de elementos de la cola(2)
    echo $queue->count();
    
      //Muestra los elementos (2, 3)
    while( $queue->valid() )
    {
    echo $queue->current(), PHP_EOL;
    $queue->next();
    }