Ir al contenido

Pila acotada

De Wikipedia, la enciclopedia libre
Esta es la versión actual de esta página, editada a las 04:06 27 nov 2021 por AVIADOR (discusión · contribs.). La dirección URL es un enlace permanente a esta versión.
(difs.) ← Revisión anterior · Ver revisión actual (difs.) · Revisión siguiente → (difs.)

Una pila acotada es una estructura de datos de tipo LIFO (el último elemento en entrar, es el primero en salir) cuyo tamaño máximo queda limitado en su especificación.

Operaciones[editar]

Una pila acotada cuenta con operaciones básicas:

  • Crear: se crea la pila vacía.
  • Apilar: se añade un elemento a la pila.(push)
  • Desapilar: se elimina el elemento frontal de la pila.(pop)
  • Cima: devuelve el elemento que está en la cima de la pila. (top o peek)
  • Vacía: devuelve cierto si la pila está vacía o falso en caso contrario.
  • Llena: devuelve cierto si la pila está llena o falso en caso contrario.

Lógicamente no podremos apilar en una pila que está llena.

Implementación[editar]

Para ilustrar exponemos la implementación de una pila acotada.

En MAUDE[editar]

Necesitaremos una teoría para definir el tama o máximo de la pila.

fth CONSTANTE is
  protecting NAT .
  op cte: -> NAT .
endfth

Pasamos a definir la pila acotada parametrizada.

fmod PILA-ACOTADA {X :: TRIV , AC :: CONSTANTE} is
  protecting NAT .
  sorts PilaAC{X , AC} PilaACNV{X , AC} .
  subsort PilaACNV{X , AC} < PilaAC{X , AC} .
  *** generadores
  op crear : -> PilaAC{X , AC} [ctor] .
  op apilar : X$Elt PilaAC{X , AC} -> PilaACNV{X , AC} [ctor] .
  *** constructores
  op desapilar : PilaAC{X , AC} -> PilaAC{X , AC} .
  *** selectores
  op cima : PilaACNV{X , AC} -> X$Elt .
  op longitud : PilaAC{X , AC} -> Nat .
  op estaLlena? : PilaAC{X , AC} -> Bool .
  *** variables
  var P : PilaAC{X , AC} .
  var E : X$Elt .
  *** ecuaciones impurificadoras
  ceq apilar (E, P) = P if estaLlena?(P) .
  eq desapilar (crear) = crear .
  ceq desapilar (apilar(E, P)) = P if not estaLlena?(P) .
  ceq cima (apilar(E, P)) = E if not estaLlena?(P) .
  eq longitud (crear) = 0 .                    
  ceq longitud (apilar(E, P)) = 1 + longitud (P)
     if not estaLlena?(P) .                      
  eq estaLlena?(P) = longitud (P) >= cte .
endfm

Véase también[editar]