Pilas en C
Pilas en C
Pilas en C
DEFINICIN
Una pila es una estructura de datos homognea (elementos del mismo tipo), secuencial y de tamao variable. Slo es posible un modo de acceso a esta estructura: a travs de la cabeza de la pila. De este modo podemos aadir un elemento a la cabeza de la pila o extraer un elemento de la cabeza de la pila. Debido a que las operaciones de extraccin e insercin se realizan por el mismo extremo, el ltimo elemento en ser aadido ser el primero en ser extrado; por ello a estas estructuras se las conoce con el nombre de LIFO (last-in, first-out; ltimo en entrar, primero en salir).
La Pila
GESTIN DE MEMORIA ESTTICA
Ejemplificaciones
Un ejemplo tpico de pila lo constituye un montn de platos: Cuando se quiere introducir un nuevo plato, ste se coloca en la posicin ms accesible, encima del ltimo plato. Cuando se toma un plato, ste se extrae, igualmente, del punto ms accesible, el ltimo que se ha introducido. O, si somos ms estrictos, otro ejemplo sera una caja llena de libros. Slo podemos ver cul es el libro que est ms arriba en la caja, y si ponemos o tomamos un libro, slo podremos actuar sobre este primer libro. No podemos siquiera saber el nmero total de libros guardados en la pila. Slo sabremos el nmero de elementos de la pila de libros si previamente los sacamos hasta vaciar la caja.
Ejemplificaciones
Otro ejemplo natural de la aplicacin de la estructura pila aparece durante la ejecucin de un programa de ordenador, en la forma en que la mquina procesa las llamadas a los procedimientos. Cada llamada a un procedimiento (o funcin) hace que el sistema almacene toda la informacin asociada con ese procedimiento (parmetros, variables, constantes, direccin de retorno, etc...) de forma independiente a otros procedimientos y permitiendo que unos procedimientos puedan invocar a otros distintos (o a si mismos) y que toda esa informacin almacenada pueda ser recuperada convenientemente cuando corresponda. Como en un procesador slo se puede estar ejecutando un procedimiento, esto quiere decir que slo es necesario que sean accesibles los datos de un procedimiento (el ltimo activado, el que est en la cima). De ah que una estructura muy apropiada para este fin sea la estructura pila.
Algoritmo Desapilar Entradas stack: Pila de Valor Salidas stack x: Valor Inicio {* comprobar si se pueden eliminar elementos de la pila *} {* esta operacin no depende de la representacin, siempre es necesaria *} Si ( Pila_Vacia ( stack ) ) entonces Error pila vacia sino stack.Cima stack.Cima - 1 Fin_si Fin
bool Pila::Desapilar (void) { bool error; if (cima == 0) error = true; else { error = false; cima--; } return error; }
bool Pila::CimaPila (Valor & x) { bool error; if (cima == 0) error = true; else { error = false; x = info[cima - 1]; } return error; }
bool Pila::CimaPila (Valor & x) Algoritmo Cima_Pila { Entradas bool error; stack: Pila de Valor if (cima == NULL) Salidas error = true; Valor else Inicio {* comprobar si existe informacin en la pila *} { error = false; {* esta operacin no depende de la representacin, siempre es necesaria *} Si ( Pila_Vacia ( stack ) ) entonces x = cima->info; Error pila vacia } sino return error; Devolver (Cima^.Info) }
Fin_si