Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema4 Ne
Tema4 Ne
(16/Mayo/2004)
Pilas:
Las pilas son estructuras de datos que tienes dos operaciones bsicas:
push (para insertar un elemento) y pop (para extraer un elemento). Su
caracterstica fundamental es que al extraer se obtiene siempre el ltimo
elemento que acaba de insertarse. Por esta razn tambin se conocen como
estructuras de datos LIFO (del ingls Last In First Out). Una posible
implementacin mediante listas enlazadas sera insertando y extrayendo
siempre por el principio de la lista. Gracias a las pilas es posible el uso de la
recursividad (lo veremos en detalle en el tema siguiente). La variable que llama
al mismo procedimiento en el q est, habr que guardarla as como el resto de
variables de la nueva llamada, para a la vuelta de la recursividad ir sacandolas,
esto es posible a la implementacin de pilas.
Las pilas se utilizan en muchas aplicaciones que utilizamos con
frecuencia. Por ejemplo, la gestin de ventanas en Windows (cuando cerramos
una ventana siempre recuperamos la que tenamos detrs). Otro ejemplo es la
evaluacin general de cualquier expresin matemtica para evitar tener que
calcular el nmero de variables temporales que hacen falta. Por ejemplo:
3 + 4 * (8 2 * 5)
5
-2
8
4
3
-10
8
4
3
-2
4
3
-8
3
-5
(16/Mayo/2004)
Colas:
Las colas tambin son llamadas FIFO (First In First Out), que quiere
decir el primero que entra es el primero que sale.
Colas simples:
Se inserta por un sitio y se saca por otro, en el caso de la cola simple se
inserta por el final y se saca por el principio. Para gestionar este tipo de cola
hay que recordar siempre cual es el siguiente elemento que se va a leer y cual
es el ltimo elemento que se ha introducido.
910
973
175
137
Colas circulares:
En las colas circulares se considera que despus del ltimo elemento se
accede de nuevo al primero. De esta forma se reutilizan las posiciones
extradas, el final de la cola es a su vez el principio, crendose un circuito
cerrado.
4
3
2
1
5
4
3
2
1
5
4
3
2
5
4
3
2
8
(16/Mayo/2004)
Paquete Pila:
Finalmente implementamos el paquete pila tanto para un array como para
listas. Esta implementacin ser realmente til para el tema siguiente,
recursividad.
Array:
ADS
generic type TDato is private;
package Pila_generica is
type TPila (Maximo : Positive) is private;
Llena, Vacia, FueraDeRango : exception;
procedure Push ( Pila : in out TPila; Dato : in TDato );
procedure Pop ( Pila : in out TPila; Dato: out TDato );
function PilaVacia (Pila : in TPila) return Boolean;
function PilaLlena (Pila : in TPila) return Boolean;
function Valor ( Pila : in TPila; Index : Positive ) return TDato;
private
type TVector is array (Positive range <>) of TDato;
type TPila (Maximo : Positive) is record
Contenido : TVector (1 .. Maximo);
Cima
: Natural := 0;
end record;
end;
ADB
with Text_IO;
with Unchecked_Deallocation;
use Text_IO;
package body Pila_Generica_Dinamica is
procedure Free is new Unchecked_Deallocation
(TNodo,TPuntero);
(16/Mayo/2004)
(16/Mayo/2004)
Listas:
ADS
generic type TDato is private;
package Pila_Generica_Dinamica is
type TPila is private;
Vacia : Exception;
function Vacia (Pila : in TPila) return Boolean;
procedure Reset (Pila : in out TPila);
procedure Push (Pila : in out TPila; Dato : in TDato);
procedure Pop (Pila : in out TPila; Dato : out TDato);
private
Type TNodo;
Type TPuntero is access TNodo;
Type TNodo is record
Dato : TDato;
Sig : TPuntero;
end record;
Type TPila is record
Cab : TPuntero;
Vacia : Boolean := True;
end record;
end;
ADB
with Text_IO;
with Unchecked_Deallocation;
use Text_IO;
package body Pila_Generica_Dinamica is
procedure Free is new Unchecked_Deallocation (TNodo,TPuntero);
function Vacia (Pila : in TPila) return Boolean is
begin
return Pila.Cab = null;
end;
(16/Mayo/2004)