Les dejo un pequeño programa en Ruby para el algoritmo de la Pila
#Clase para implementar el algoritmo de una pila en Ruby
#El algoritmo de una pila se basa en LIFO (Last in First Out o lo que es: El ultimo en entrar es el primero en salir)
#Acentos y otra la letra enie nos las acepta Ruby, o en mi caso marca error
class Pila
def initialize #Metodo para inicializar variables de tipo instancia
@pos=0 #Una variable de tipo instancia se precede con un @
@tam=0 #Variable Pos me ubicará el puntero de mi matriz y variable tam me indicara el tamanio de esta
end #Fin de initialize
def mat #Metodo para obtener el tamaño de la matriz
print "Define tamanio de la matriz: "
@tam=gets.chomp
@tam=@tam.to_i
@matriz=Array.new(@tam) #Creo la matriz con el tamaño obtenido
menu #Llamo al metodo menú
end #Fin del método mat
def menu #Metodo que muestra y llama a las opciones disponibles
opc=1
while opc.to_i!=0 # Convertir el valor pedido por teclado a entero con la funcion .to_i
puts "*************"
puts "*0 Salir *"
puts "*1 Insertar *"
puts "*2 Liberar *"
puts "*3 Mostrar *"
puts "*************"
print "Opcion: "
STDIN.flush
opc=gets.chomp
opc=opc.to_i
case opc
when 1
meter
when 2
sacar
when 3
mostrar
end #Fin del Case
end #Fin del ciclo while
end #Fin del metodo menu
def meter
if @pos < @tam
print "Dame un valor numerico: "
STDIN.flush
val=gets.chomp
@matriz[@pos.to_i]=val
@pos += 1
else
print "=========>Error, la matriz esta llena\n"
end #Fin del if
end #fin del metodo meter
def sacar
if @matriz[0]==nil or @pos==0
print "=========>Error: matriz vacia!!!! \n"
else
@pos -=1
@matriz[@pos]=nil #Adjunto valor nil o nulo
print "Eliminado \n"
end #Fin del if
end #Fin del metodo sacar
def mostrar
for i in 0..(@matriz.length-1)
print "Posicion #{i}---> "
print @matriz[i]
print "\n"
end #Fin del ciclo for
end #Fin del metodo mostrar
end #Fin de la clase Pila
#Crearemos un objeto.
pil=Pila.new #Con la palabra new, automaticamente llama al metodo initialize
pil.mat #Llamamos al metodo mat