Introducción a la Programación − Notas de Clase Pilas y Filas 8 ESTRUCTURAS DE DATOS: PILAS Y FILAS 8.1 PILAS En una pila o stack almacenamos elementos, que son todos del mismo tipo, aun cuando, obviamente, puedan no tener necesariamente el mismo valor. Es decir, se trata de una estructura cuyo tipo base es homogéneo. La pila es una estructura que es fácilmente identificable ya que comparte muchas de las características de las pilas que se encuentran en la vida diaria como por ejemplo una pila de libros, una pila de platos, etc. ORDEN CRONOLÓGICO En una pila, el orden de llegada o inserción de los elementos es inverso al de salida o supresión de los mismos. Es decir que el primer elemento insertado será el último en ser suprimido y que el último insertado será el primero en ser suprimido. Esto es así si se piensa en una pila de platos, el primero que se apiló es el que está abajo de todo en la pila, en la base de la pila y solo se lo podrá sacar después de sacar, antes, todos los que están sobre él, es decir será el que saldrá último de la pila. Por el contrario, el último que se apiló, es el que está en el tope de la pila y el primero que se podrá sacar de la misma. Este orden de los elementos de una pila puede expresarse a través de las siglas en inglés de las operaciones y su orden, de la siguiente manera: LIFO (Last In First Out). CAPACIDAD La capacidad teórica de las pilas es dinámica, es decir que las pilas crecen con las inserciones y disminuyen con las supresiones. OPERACIONES Se pueden realizar las operaciones de: Inserción: solamente en el tope de la pila, es decir sobre el último elemento ingresado. En inglés, esta operación es conocida con el nombre de push. Supresión: solamente del tope de la pila, es decir del último elemento ingresado. En inglés, esta operación es conocida con el nombre de pop. Inspección: solamente del tope de la pila, es decir del último elemento ingresado. Es importante remarcar el hecho que en la pila solo puede operarse sobre un elemento distinguido: el que se encuentra en el tope de la misma, es decir sobre aquél elemento que ingresó último y que es el primero que se encuentra disponible para salir. La pila tiene, entonces, un selector implícito, ya que es el elemento que se encuentra en el tope sobre el que se puede operar. No hay necesidad de ninguna referencia explícita al elemento, ya que las operaciones se hacen siempre sobre la misma posición de la pila: el tope. Dado que las pilas son estructuras dinámicas, es necesario además contar dos con predicados lógicos para controlar el desborde y el desfonde de la estructura. U.N.S.L. Argentina 86 Departamento de Informática Introducción a la Programación − Notas de Clases Pilas y Filas REPRESENTACIÓN GRÁFICA Por supuesto la representación gráfica puede hacerse como se desee, verticalmente en el papel, con el tope arriba o abajo; horizontalmente en el papel, con el tope a la derecha o a la izquierda; o inclusive oblicuamente. En el caso de la Figura 8.1, la pila está representada verticalmente, con el tope arriba. En la pila de la Figura 8.1(a), el orden en que llegaron los elementos (fueron insertados en la pila) fue ‘f’, ‘R’, ‘+’, ‘Y’, ‘z’, quedando ‘z’ en el tope. El primer elemento a ser suprimido será, en consecuencia, ‘z’, como se ve en la Figura 8.1(b). ‘*’ ‘z’ ‘Z’ ‘z’ tope push pop ‘Y’ ‘Y’ ‘+’ ‘+’ ‘+’ ‘R’ ‘R’ ‘R’ ‘f’ ‘f’ ‘f’ (a) (b) ‘Y’ tope . tope (c) Figura 8.1. Una pila de caracteres 8.2 FILAS O COLAS En una fila o cola almacenamos elementos que son todos del mismo tipo aun cuando, obviamente, puedan no tener necesariamente el mismo valor. Se trata, en consecuencia, de una estructura cuyo tipo base es homogéneo. La fila es una estructura que es fácilmente identificable ya que comparte muchas de las características de las filas o colas que se encuentran en la vida diaria, como por ejemplo una cola de personas esperando el colectivo, una cola en el cajero del supermercado, etc. ORDEN CRONOLÓGICO En una fila, el orden de llegada o inserción de los elementos es el mismo que el de salida o supresión de los mismos. Es decir que el primer elemento insertado será, también, el primero en ser suprimido. Esto es así, si pensamos en una cola de personas esperando, para ser atendidas, frente a una ventanilla de un cajero en un banco (¡siempre y cuando las personas sean respetuosas del orden y no ‘salten’ lugares en la cola!). La primera persona en llegar (inserción) será la que está primera en la cola y será la primera en ser atendida (supresión). De ahí que en las filas o colas sea posible hablar de dos elementos distinguidos: el primero y el último elemento. Es precisamente sobre estos elementos distinguidos donde podemos operar con una fila. Este orden de los elementos de una fila puede expresarse a través de las siglas en inglés de las operaciones y su orden, de la siguiente manera: First In First Out (FIFO). U.N.S.L. Argentina 87 Departamento de Informática Introducción a la Programación − Notas de Clases Pilas y Filas CAPACIDAD La capacidad teórica de las colas es dinámica, es decir que las filas crecen, con las inserciones y disminuyen con las supresiones. OPERACIONES Se pueden realizar las operaciones de: Inserción, después del último elemento ingresado. Supresión, del primer elemento ingresado. Inspección, del primer elemento ingresado. Es importante remarcar el hecho que en las filas sólo puede suprimirse e inspeccionarse el primer elemento ingresado y solo se inserta un nuevo elemento después del último elemento ingresado. La fila tiene dos selectores implícitos, ya que es el elemento que se encuentra en el primer lugar de la misma sobre el que se puede operar para eliminarlo o inspeccionarlo y se puede insertar sólo después del elemento que se encuentra en el último lugar. No hay necesidad de ninguna referencia explícita a un elemento, ya que las operaciones se hacen siempre sobre alguna de dos elementos distinguidos de la fila: o el primero o después del último. Como las filas son estructuras dinámicas, es necesario además contar dos con predicados lógicos para controlar el desborde y el desfonde de la estructura. REPRESENTACIÓN GRÁFICA La fila de la Figura 8.2 está representada gráficamente de derecha a izquierda, en este caso el orden de llegada (inserción) de los elementos fue: ‘Z’, ‘x’, ‘T’, ‘*’, ‘F’; es decir ‘Z’ fue el primero en llegar (insertado) y‘F’el último en llegar (insertado). Consecuentemente ‘Z’ será el primero en salir (suprimido) y ‘F’ será el último en salir (suprimido). ‘Z’ ‘x’ ‘T’ ‘*’ ‘F’ primero ultimo Figura 8.2. Una fila de caracteres. Por supuesto, la representación gráfica puede hacerse como se desee, verticalmente en el papel, con el primero arriba o abajo; horizontalmente en el papel, con el primero a la derecha o a la izquierda; o inclusive oblicuamente. U.N.S.L. Argentina 88 Departamento de Informática