martes, octubre 10, 2006

Guía del Lenguaje Perl - 3ra parte

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

No hay comentarios.: