Pilas y colas con arreglos
La función shift extrae el 1er elemento de un arreglo y ademas lo elimina. La función pop extrae el último elemento de un arreglo y lo elimina. Por otro lado existen las funciones unshift y push que realizan lo inverso respectivamente. Unshift agrega un elemento o una lista de elementos al comienzo de una lista y push hace lo mismo, pero al final de la lista.
Ejemplo:
#!/usr/local/bin/perl
@a = ('a'..'e');
$b = shift(@a); # $b se instancia con 'a'
for ($n=0; $n<@a; $n++) {print $a[$n].” “}; print “\n”;
# Se imprimen los valores b, c, d y e
@a = ('a'..'e');
$b = pop(@a); # $b se instancia con 'e'
for ($n=0; $n<@a; $n++) {print $b[$a].” “}; print “\n”;
# Se imprimen los valores a, b, c y d
unshift(@a, 1); # agrega 1 al principio del arreglo
push(@a, 999); # agrega 999 al final del arreglo
for ($n=0; $n<@a; $n++) {print $b[$a].” “}; print “\n”;
Con las funciones descriptas es posible construir una estructura de datos denominada pila (stack); se caracteriza por que su acceso es LIFO, (last input first output) es decir que el último elemento añadido es el primero en ser leido, para lo cual se utiliza la función shift para extraer y la función unshift para insertar.
Toda estructura de datos llamada cola opera en modo FIFO (First Input First Output), donde el primer elemento en ingresar es el primer elemento en salir. Por ejemplo, se podría implementar una cola leyendo con shift y agregando con push. Alternativamente se podría leer con la función pop, y agregar con unshift.
A continuación se muestran invertidos una lista de números ingresados por teclado
Ejemplo:
#!/usr/local/bin/perl
@pila = (); # se crea la pila
print "Ingrese una lista de números [terminar con –1] ";
$numero = [STDIN]; # reemplazar llaves por símbolos menor y mayor
while ($numero != -1) {
unshift(@pila,$numero); # se agrega un elemento a la pila
$numero = [STDIN]; # reemplazar llaves por símbolos menor y mayor
}
$l = @pila;
for($i=1; $i<= $l; $i++) { print shift(@pila) }; # se extrae elemento de la pila
martes, octubre 10, 2006
Suscribirse a:
Comentarios de la entrada (Atom)
No hay comentarios.:
Publicar un comentario