Вы находитесь на странице: 1из 5

PILA

Una pila (stack en ingls) es una lista ordenada o estructura de datos en la que
el modo de acceso a sus elementos es de tipo LIFO (del ingls Last In First Out,
ltimo en entrar, primero en salir) que permite almacenar y recuperar datos. Esta
estructura se aplica en multitud de ocasiones en el rea de informtica debido a su
simplicidad y ordenacin implcita de la propia estructura.
Para el manejo de los datos se cuenta con dos operaciones bsicas: apilar
(push), que coloca un objeto en la pila, y su operacin inversa, retirar (o desapilar,
pop), que retira el ltimo elemento apilado.
En cada momento solo se tiene acceso a la parte superior de la pila, es decir, al
ltimo objeto apilado (denominado TOS, Top of Stack en ingls). La operacin
retirar permite la obtencin de este elemento, que es retirado de la pila
permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el
nuevo TOS. Por analoga con objetos cotidianos, una operacin apilar equivaldra
a colocar un plato sobre una pila de platos, y una operacin retirar a retirarlo.
Las pilas suelen emplearse en los siguientes contextos:
Evaluacin de expresiones en notacin postfija (notacin polaca inversa).
Reconocedores sintcticos de lenguajes independientes del contexto.
Implementacin de recursividad.

Declaraciones de tipos para manejar pilas en C

Los tipos que definiremos normalmente para manejar pilas sern casi los
mismos que para manejar listas, tan solo cambiaremos algunos nombres:

typedef struct_nodo {
int dato;
struct_nodo *siguiente;
} tipoNodo;

typedef tipoNodo *pNodo;


typedef tipoNodo *Pila;

tipoNodo es el tipo para declarar nodos, evidentemente.


pNodo es el tipo para declarar punteros a un nodo.
Pila es el tipo para declarar pilas.
Es evidente, a la vista del grfico, que una pila es una lista abierta. As que
sigue siendo muy importante que nuestro programa nunca pierda el valor del
puntero al primer elemento, igual que pasa con las listas abiertas. Teniendo en
cuenta que las inserciones y borradores en una pila se hacen siempre en un
extremo, lo que consideramos como el primer elemento de la lista es en realidad el
ltimo elemento de la pila.
OPERACIONES
Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que
en las implementaciones modernas de las pilas se suelen aadir ms de uso
habitual.
Crear: se crea la pila vacia (constructor).
Tamao: regresa el nmero de elementos de la pila (size).
Apilar: se aade un elemento a la pila (push).
Desapilar: se elimina el elemento frontal de la pila (pop).
Cima: devuelve el elemento que est en la cima de la pila (top o peek).
Vaca: devuelve cierto si la pila est sin elementos o falso en caso de que
contenga uno (empty).

Ejemplo sencillo: supone que tienes una pila de 10 platos. El primer plato de la pila
ser el ltimo en quitarse y el ltimo plato de la pila ser el primero en quitarse.
Un arreglo constituye el depsito de los elementos de la pila. El rango del arreglo
debe ser lo suficientemente amplio para poder contener el mximo previsto de
elementos de la pila. Un extremo del arreglo se considera el fondo de la pila, que
permanecer fijo. La parte superior de la pila, tope o cima, estar cambiando
dinmicamente durante la ejecucin del programa. Adems del arreglo, una
variable entera nos sirve para tener en todo momento el ndice del arreglo que
contiene el elemento tope. Las declaraciones, procedimientos y funciones para
representar el TAD pila, forman parte de la unidad pila.
Max_elem=(Depender de cada realizacin).
Tipo_elem=(Tipo de los elementos de la pila).
Pila= Registro.
Elem= arreglo [1Max_elem] de Tipo_elem;
Tope= entero; FinRegistro.
COLAS
Una cola (tambin llamada fila) es una estructura de datos, caracterizada por
ser una secuencia de elementos en la que la operacin de insercin push se
realiza por un extremo y la operacin de extraccin pop por el otro. Tambin se le
llama estructura FIFO (del ingls First In First Out), debido a que el primer
elemento en entrar ser tambin el primero en salir.

Representacin de las Colas


Se las puede representar por listas enlazadas o por arrays
C= Q (1), Q (2),, Q (n).
En cualquier caso se necesitan dos punteros : frente (f) , final(r) y la lista o array de
n elementos (LONGMAX)
Las operaciones que pueden realizar con una cola son:
Acceder al primer elemento de la cola.
Aadir un elemento al final de la cola.
Eliminar el primer elemento de la cola.
Vaciar una cola.
Verificar el estado de la cola: vaca o llena.

Operaciones
Crear: se crea cola vaca.
Encolar (aadir, entrar, insertar): se aade un elemento a la cola. Se aade 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.

Cola Circulares
Una cola circular o anillo es una estructura de datos en la que los elementos
estn de forma circular y cada elemento tiene un sucesor y un predecesor. Los
elementos pueden cosultarse, aadirse y eliminarse nicamente desde la cabeza
del anillo que es una posicin distinguida. Existen dos operaciones de rotaciones,
una en cada sentido, de manera que la cabeza del anillo pasa a ser el elemento
sucesor, o el predecesor, respectivamente, de la cabeza actual.
Colas Doblemente Enlazadas
Como ocurre con toda representacin esttica, una de las principales
desventajas es que hay que prever un mximo de elementos, y de ese mximo no
se puede pasar. La realizacin de una cola mediante una lista enlazada permite
ajustarse exactamente al nmero de elementos de la cola. Esta implementacin
con las listas enlazadas utiliza dos punteros que acceden a la lista, el puntero
frente y el puntero final. Cola implementada con listas enlazadas, el puntero final
referencia al ltimo nodo que fue aadido. En esta representacin no tiene sentido
la operacin que indica si la cola est llena. Al ser una estructura dinmica crece y
decrece segn las necesidades. La definicin de cola usando listas enlazadas
seran:
Tipo_elto: (Tipo del campo informacin de cada nodo).
Nodo: Registro.
Elto: Tipo_elto;
Sig: hNodo;
Fregistro; Cola:
Registro frente: hNoho;
final: hNodo; Fregistro;

Tipos de Colas
a) Colas Circulares (anillos): en las que el ltimo elemento y el primero estn
unidos.
b) 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 atendern de modo convencional segn la posicin que
ocupen. Hay 2 formas de implementacin:
a. Aadir un campo a cada nodo con su prioridad. Resulta conveniente mantener la
cola ordenada por orden de prioridad.
b. Crear tantas colas como prioridades haya, y almacenar cada elemento en su cola.
c) Bicolas: son colas en donde los nodos se pueden aadir y quitar por ambos
extremos; se les llama DEQUE (Double Ended QUEue). Para representar las
Bicolas se puede hacer con un array ciruclar con inicio y fin que apunten a cada
uno de los extremos. Hay variantes:
a. Bicolas de entrada restringida: son aquellas donde la insercin slo se hace por
el final, aunque se puede eliminar al inicio al final.
b. Bicolas de salida restringida: son aquellas donde slo se elimina por el final,
aunque se puede insertar al inicio y al final.

Aplicaciones de Colas
Las colas tambin 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 un sistema multiusuario, cuando le dice a la computadora
que ejecute un programa concreto, el sistema operativo aade su peticin a su
cola de trabajo. Cuando su peticin 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 dems. El sistema operativo mantiene colas para peticiones de
imprimir, leer o escribir en cada uno de estos dispositivos.

Вам также может понравиться