Está en la página 1de 4

UNA PILA

En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al


último objeto apilado (denominado TOS, Top of Stack en inglés). La
operación retirar permite la obtención de este elemento, que es retirado de la
pila permitiendo el acceso al anterior (apilado con anterioridad), que pasa a ser
el último, el nuevo TOS.
Las pilas suelen emplearse en los siguientes contextos:

 Evaluación de expresiones en notación postfija (notación polaca inversa).


 Reconocedores sintácticos de lenguajes independientes del contexto.
 Implementación de recursividad.
En un sistema operativo cada proceso tiene un espacio de memoria (pila) para
almacenar valores y llamadas a funciones.
Una pila acotada es una pila limitada a un tamaño máximo impuesto en su
especificación.
Por analogía con objetos cotidianos, una operación apilar equivaldría a colocar
un plato sobre una pila de platos, y una operación retirar equivaldría a retirarlo.
Operaciones
Habitualmente, junto a las dos operaciones básicas de apilar y desapilar (push,
pop), las pilas puede implementar otra serie de funciones:

 Crear (constructor): crea la pila vacía.


 Tamaño (size): regresa el número de elementos de la pila.
 Apilar (push): añade un elemento a la pila.
 Desapilar (pop): lee y retira el elemento superior de la pila.
 Leer último (top o peek): lee el elemento superior de la pila sin retirarlo.
 Vacía (empty): devuelve cierto si la pila está sin elementos o falso en caso
de que contenga alguno.

Pilas Hardware
Un uso muy común de las pilas a nivel de arquitectura hardware es la asignación
de memoria.

Soporte de Hardware
Muchas CPUs tienen registros que se pueden utilizar como punteros de pila.
Algunas, como Intel x86, tienen instrucciones especiales que implícitan el uso de
un registro dedicado a la tarea de ser un puntero de pila. Otras, como DEC PDP-
11 y de la familia 68000 de Motorola tienen que hacer frente a los modos de
hacer posible la utilización de toda una serie de registros como un puntero de
pila. La serie Intel 80x87 de coprocesadores numéricos tiene un conjunto de
registros al que se puede acceder ya sea como una pila o como una serie de
registros numerados. Algunos microcontroladores, por ejemplo algunos PICs,
tienen un fondo fijo de pila que no es directamente accesible. También hay una
serie de microprocesadores que aplican una pila directamente en el hardware:
 Computer vaqueros MuP21
 Harris RTX línea
 Novix NC4016
Muchas pilas basadas en los microprocesadores se utilizan para aplicar el
lenguaje de programación Forth en el nivel de microcódigo. también se utilizaron
las pilas como base de una serie de mainframes y miniordenadores. Esas
máquinas fueron llamadas máquina de pila, el más famoso es el Burroughs
B5000.

Soporte de Software
En programas de aplicación escrito en un lenguaje de alto nivel, una pila puede ser
implementada de manera eficiente, ya sea usando vectores o listas enlazadas. En LISP
no hay necesidad de aplicar la pila, puesto que las funciones apilar y desapilar están
disponibles para cualquier lista. Adobe PostScript también está diseñada en torno a una
pila que se encuentra directamente visible y manipuladas por el programador. El uso de
las pilas está muy presente en el desarrollo de software por ello la importancia de las
pilas como tipo abstracto de datos.

Implementación en aplicaciones informáticas


Supongamos que se está procesando una función y en su interior llama a otra función.
La función se abandona para procesar la función de la llamada, pero antes se almacena
en una pila la dirección que apunta a la función. Ahora supongamos que esa nueva
función llama a su vez a otra función. Igualmente, se almacena su dirección, se
abandona y se atiende la petición. Así en tantos casos como existan peticiones. La
ventaja de la pila es que no requiere definir ninguna estructura de control ni conocer las
veces que el programa estará saltando entre funciones para después retomarlas, con la
única limitación de la capacidad de almacenamiento de la pila. Conforme se van
cerrando las funciones, se van rescatando las funciones precedentes mediante sus
direcciones almacenadas en la pila y se va concluyendo su proceso, esto hasta llegar a
la primera.
El caso típico es el de una función recursiva (que se llama a sí misma), esto es posible
implementarlo con sencillez mediante una pila. La función se llama a sí misma tantas
veces como sea necesario hasta que el resultado de la función cumpla la condición de
retorno; entonces, todas las funciones abiertas van completando su proceso en
cascada. No se necesita saber cuandas veces se anidará y, por tanto, tampoco cuando
se cumplirá la condición, con la única limitación de la capacidad de la pila. De
sobrepasarse ese límite, normalmente porque se entra en un bucle sin final, se produce
el «error de desbordamiento de la pila».
La ordenación de datos por el método de la burbuja se resuelve mediante una función
recursiva.
APLICACIONES DE PILAS
 Navegador Web – Se almacenan los sitios previamente visitados – Cuando el
usuario quiere regresar (presiona el botón de retroceso), simplemente se extrae
la última dirección (pop) de la pila de sitios visitados.
 Editores de texto – Los cambios efectuados se almacenan en una pila –
Usualmente implementada como arreglo – Usuario puede deshacer los cambios
mediante la operación “undo”, la cual extraer el estado del texto antes del último
cambio realizado.
Cola
Las colas se utilizan en sistemas informáticos, transportes y operaciones
de investigación (entre otros), donde los objetos, personas o eventos son
tomados como datos que se almacenan y se guardan mediante colas para su
posterior procesamiento. Este tipo de estructura de datos abstracta se
implementa en lenguajes orientados a objetos mediante clases, en forma de
listas enlazadas.

Operaciones Básicas

 Crear: se crea la cola vacía.


 Encolar: se añade un elemento a la cola. Se añade al final de esta.
 Desencolar: (sacar, salir, eliminar): se elimina el elemento frontal de la cola,
es decir, el primer elemento que entró.
 Frente: (consultar, front): se devuelve el elemento frontal de la cola, es decir,
el primer elemento que entró.

Tipos de colas

 Colas circulares (anillos): en las que el último elemento y el primero están


unidos.

 Colas de prioridad: En ellas, los elementos se atienden en el orden indicado


por una prioridad asociada a cada uno. Si varios elementos tienen la misma
prioridad, se atenderán de modo convencional según la posición que ocupen.
Hay dos formas de implementación:
1. Añadir un campo a cada nodo con su prioridad. Resulta conveniente
mantener la cola ordenada por orden de prioridad.
2. Crear tantas colas como prioridades haya, y almacenar cada
elemento en su cola.

 Bicolas (o Colas doblemente terminadas): son colas en donde los nodos se


pueden añadir y quitar por ambos extremos; se les llama DEQUE (Double
Ended QUEue). Para representar las bicolas lo podemos hacer con un array
circular con Inicio y Fin que apunten a cada uno de los extremos. Hay
variantes:

 Bicolas de entrada restringida: Son aquellas donde la inserción sólo se hace


por el final, aunque podemos eliminar al inicio ó al final.
 Aplicaciones de las Colas
 Las Colas también se utilizan en muchas maneras en
los sistemas operativos para planificar el uso de los distintos recursos de
la computadora. Uno de estos recursos es la propia CPU (Unidad Central
de Procesamiento).
 Si esta trabajando en una sistema multiusuario, cuando le dice a la
computadora que ejecute un programa concreto, el sistema
operativo añade su petición a su "cola de trabajo".
 Cuando su petición llega al frente de la cola, el programa solicitado pasa a
ejecutarse. Igualmente, las colas se utilizan para asignar tiempo a los
distintos usuarios de los dispositivos de entrada/salida (E/S), impresoras,
discos, cintas y demás. El sistema operativo mantiene colas para peticiones
de imprimir, leer o escribir en cada uno de estos dispositivos.
Aplicaciones de las colas •
 En general, operaciones en redes de computadoras. – Trabajos enviados a una
impresora – Solicitudes a un servidor. •
 Clientes solicitando ser atendidos por una telefonista.

 Aprovechamiento de la memoria
Las colas pueden necesitar cantidad de memoria sobre todo si se diseña con
un gran numero de elementos. Para evitar este desperdicio de memoria, existe
un procedimiento para diseñar las colas mediante una lista circular.
De tal forma que el elemento Q(1), quede a continuación de Q (n).
WORKFLOW, como su nombre indica, es una aplicación de “flujos de
trabajo”. Nos servirá para crear acciones o extensiones para hacer
prácticamente de todo. Lo mejor de todo es que las acciones se pueden
combinar entre ellas, lo que nos permitirá, por ejemplo, crear una imagen y
luego compartirla en Twitter, todo ello sin salir de la “mini aplicación”. Además de
los flujos de trabajo normales, podemos crear extensiones a las que
“llamamos” desde el botón compartir ( ). Por ejemplo, para bajar vídeos de
YouTube desde Safari.
Qué puedo hacer con Workflow

Prácticamente de todo. Aunque aún se pueden añadir más opciones, y de


hecho puede que añadan alguna que les he pedido, Workflow tiene montones
de acciones que se pueden combinar entre ellas para que nuestro iPhone esté
mucho menos limitado de lo que lo que está sin esta aplicación. Lo mejor para
saber que podéis hacer con Workflow es que os deis un paseo por la web que
os puse anteriormente o, lo que voy a hacer, que yo comparta con todos vosotros
los flujos de trabajo y extensiones que tengo en mi iPhone. He de reconocer que
algunos son simples a más no poder (como el de twittear GIFs), pero cumplen
con su función.

Representación de pilas  Al utilizar arreglos para implementar pilas se tiene la


limitación de que se debe reservar el espacio en memoria con anticipación. Una vez
dado un máximo de capacidad a la pila no es posible insertar un número de elementos
mayor que el máximo establecido. Si esto ocurre, en otras palabras si la pila esta llena y se
intenta insertar un nuevo elemento, se producirá un error conocido como desbordamiento –
overflow Posibles soluciones  Una posible solución a este tipo de inconvenientes consiste en
definir pilas de gran tamaño, pero esto resultará ineficiente y costoso si solo se utilizarán algunos
elementos. No siempre es viable saber con exactitud el número de elementos a tratar, y siempre
existe la posibilidad de que ocurra un error de desbordamiento.

También podría gustarte