Clase PilaLIFO

Código fuente PHP

// 021-CodigoPHP.php
// Versión 1.0 23/11/2017 Juan Manuel Cueva Lovelle. Universidad de Oviedo

/**
 * Definición de la clase PilaLIFO
 */

class PilaLIFO {

    protected $pila;
    protected $tamagnoMax; //número de elementos máximo que se pueden almacenar en la pila

    public function __construct($tamagnoMax = 5 ){
        // Crea la pila con un array con 5 elementos como máximo (valor por defecto)
        $this->pila = array();
        // El tamaño es el número máximo de elementos en la pila
        $this->tamagnoMax = $tamagnoMax;
    }

    public function apilar($elemento) {
        // precondición: Comprueba que la pila no supere el tamaño máximo
        if ($this->longitud() < $this->tamagnoMax) {
            // inserta un elemento en la cabeza del array
            array_unshift($this->pila, $elemento);
        } else {
            throw new RunTimeException('¡Pila llena: no hay espacio para apilar más elementos!');
        }
    }

    public function desapilar() {
        //precondición: comprueba que la pila no esté vacía    
        if ($this->vacia()) {
            throw new RunTimeException('¡Pila vacía! No se pueden desapilar elementos');
        } else {
            // desapila un elemento del inicio del array
            return array_shift($this->pila);
        }
    }
            
    public function getTamagnoMax(){
         //devuelve el número de elementos máximo que se pueden almacenar en la pila
         return $this->tamagnoMax;   
    }
    
    public function longitud(){
         //devuelve el número de elementos de la pila
         return count($this->pila);   
    }

    public function ultimo() {
        return current($this->pila);
    }

    public function vacia() {
        return empty($this->pila);
    }
            
    public function ver(){
        echo '<pre>';
        print_r($this->pila);
        echo '</pre>';
    } 

}

/**
 * Objetos de la clase PilaLIFO
 */
echo "<p>Crear pila</p>";           
$miPila = new PilaLIFO();
$miPila->apilar(1);
$miPila->apilar("Juego de Tronos");
$miPila->apilar(2.7181823);
$miPila->apilar(3);
$miPila->apilar(3.141592);           

echo "<p>Ver la pila</p>";
echo "<p>" .$miPila->ver(). "</p>";
            
echo "<p>Último de la pila = " .$miPila->ultimo(). "</p>";

echo "<p>Elemento desapilado = " .$miPila->desapilar(). "</p>";

echo "<p>apilar(4)</p>";  
$miPila->apilar(4);
            
echo "<p>Ver la pila</p>";
echo "<p>" .$miPila->ver(). "</p>";
            
echo "<p>Tamaño máximo de la pila =" .$miPila->getTamagnoMax(). "</p>";
echo "<p>Número de elementos en la pila =" .$miPila->longitud(). "</p>";

try{
    echo "<p>Intentar apilar</p>";
    $miPila->apilar(5);
}
catch(Exception $e) {
            echo "<p>Mensaje: " .$e->getMessage()."</p>";
}
            
echo "<p>Elemento desapilado = " .$miPila->desapilar(). "</p>";
echo "<p>Elemento desapilado = " .$miPila->desapilar(). "</p>";
echo "<p>Elemento desapilado = " .$miPila->desapilar(). "</p>";
echo "<p>Elemento desapilado = " .$miPila->desapilar(). "</p>";
echo "<p>Elemento desapilado = " .$miPila->desapilar(). "</p>";
            
echo "<p>Número de elementos en la pila =" .$miPila->longitud(). "</p>";
            
try{
    echo "<p>Intentar desapilar</p>";
    $miPila->desapilar();
}
catch(Exception $e) {
            echo "<p>Mensaje: " .$e->getMessage()."</p>";
}          

Ejecución del código PHP

Crear pila

Ver la pila

Array
(
    [0] => 3.141592
    [1] => 3
    [2] => 2.7181823
    [3] => Juego de Tronos
    [4] => 1
)

Último de la pila = 3.141592

Elemento desapilado = 3.141592

apilar(4)

Ver la pila

Array
(
    [0] => 4
    [1] => 3
    [2] => 2.7181823
    [3] => Juego de Tronos
    [4] => 1
)

Tamaño máximo de la pila =5

Número de elementos en la pila =5

Intentar apilar

Mensaje: ¡Pila llena: no hay espacio para apilar más elementos!

Elemento desapilado = 4

Elemento desapilado = 3

Elemento desapilado = 2.7181823

Elemento desapilado = Juego de Tronos

Elemento desapilado = 1

Número de elementos en la pila =0

Intentar desapilar

Mensaje: ¡Pila vacía! No se pueden desapilar elementos