Está en la página 1de 17

Tad Lista,

Pilas y Colas
Bayron Ruben De Leon Perez

12-0542

Estructura de

Datos Prof. Rina

Familia
Introducción

🞇 La lista enlazada es un TDA que nos permite


almacenar datos de una forma organizada, al
igual que los vectores pero, a diferencia de estos,
esta estructura es dinámica, por lo que no
tenemos que saber "a priori" los elementos que
puede contener.
🞇 En una lista enlazada, cada elemento apunta al
siguiente excepto el último que no tiene sucesor y
el valor del enlace es null. Por ello los elementos
son registros que contienen el dato a almacenar y
un enlace al siguiente elemento. Los elementos de
una lista, suelen recibir también el nombre de
nodos de la lista.
Figura 1. Esquema de un nodo y una lista enlazada.
Ejemplo

epresenta el dato a almacenar.


Puede ser de cualquier tipo; en
este ejemplo se trata de una
lista de enteros.
Es un puntero al siguiente
elemento de la lista; con este
puntero enlazamos con el
sucesor, de forma que podamos
construir la lista.
Los operadores básicos de una
enlazada son:
lista

 Insertar: inserta un nodo con dato x en la lista,


pudiendo realizarse esta inserción al principio o final de
la lista o bien en orden.
 Eliminar: elimina un nodo de la lista, puede ser según
la posición o por el dato.
 Buscar: busca un elemento en la lista.
 Localizar: obtiene la posición del nodo en la lista.
 Vaciar: borra todos los elementos de la lista
GSList

La definición de la estructura GSList o, lo


que es lo mismo, un nodo de la lista, está
definido de la siguiente manera:
struct GSList { gpointer data; GSList *next;
};
Pila
s
Las pilas son estructuras de datos que
tienes dos operaciones básicas:
push (para insertar un elemento) y pop
(para
extraer un elemento). Su
característica fundamental es que al extraer
se obtiene siempre el último
elemento que acaba de insertarse. Por
esta razón también se conocen como
estructuras de datos LIFO (del inglés Last In
First Out.
Por
ejemplo:
Una posible implementación mediante
listas enlazadas sería insertando y
extrayendo
siempre por el principio de la lista. Gracias
a las pilas es posible el uso de la
recursividad. La variable que llama al
mismo procedimiento en el que 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 implementación de
pilas.
Las pilas se utilizan en muchas
aplicaciones que utilizamos con
frecuencia. Por ejemplo, la gestión de
ventanas en Windows (cuando cerramos
una ventana siempre recuperamos la que
teníamos detrás). Otro ejemplo es la
evaluación
general de cualquier expresión matemática
para evitar tener que calcular el número
de variables temporales que hacen falta.
Colas
Las colas también 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.
Ejemplo
Colas circulares:

En las colas circulares se considera que


después del último elemento se accede
de nuevo al primero. De esta forma se
reutilizan las posiciones extraídas, el final
de la cola es a su vez el principio,
creándose un circuito
cerrado.
Ejemplo
Colas con
prioridad
Las colas con prioridad se implementan
mediante listas o arrays ordenados. No nos
interesa en este caso que salgan en el
orden de entrada sino con una prioridad
que le asignemos. Puede darse el caso
que existan
varios elementos con la misma prioridad,
en
este caso saldrá primero aquel
que primero llego (FIFO).
Paquete
Pila
Finalmente implementamos el paquete
pila tanto para un array como para listas.
Esta implementación 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;

También podría gustarte