2. Las pilas y colas son estructuras de datos que se
utilizan generalmente para simplificar ciertas
operaciones de programación.
Estas
estructuras
pueden
implementarse
mediante arrays o mediante listas enlazadas.
3. Pilas
Las pilas son estructuras de datos que tienen 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).
4. Cont…
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 (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 sacándolas, esto es posible
a la implementación de pilas.
5. 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. Por ejemplo:
6. Operaciones con Pilas
Básicas
Pop(): Regresa el último elemento insertado en la pila
Push(): Inserta un elemento en el tope de la pila.
Auxiliares
Llena():Regresa verdadero si la pila está llena.
Vacia(): Regresa verdadero si la pila está vacía.
Size(): Regresa el tope de la pila.
Vaciar(): Elimina todos los elementos de la pila
7. Colas
Las colas también son llamadas FIFO (First In First
Out), que quiere decir “el primero que entra es el primero
que sale”.
8. 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.
9. 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.
Lo que se ha hecho es insertar (5), sacar (1), e insertar (8).
Se sabrá que una tabla está llena cuando “rear” y “front” estén
en una posición de diferencia. El teclado de ordenador se
comporta exactamente como una cola circular.
10. Operaciones con Cola
Básicas
Insertar: Agrega un elemento al final de la cola.
Remover: Remover el primer elemento de la cola.
Auxiliares
Llena():Regresa verdadero si la pila está llena.
Vacia(): Regresa verdadero si la pila está vacía.
11. Listas
Una lista es un contenedor secuencial en el que se pueden
insertar y borrar elementos independientemente del tamaño del
contenedor. La lista enlazada básica consta de una colección de
nodos conectados entre sí, dichos nodos están situados en la memoria
dinámica en direcciones no consecutivas. Cada nodo se compone de
una sección de datos y una referencia al siguiente nodo de la lista.
Los nodos típicos la estructura Lista y del ADT Lista son como los
de la figura:
12. Para insertar un elemento cualquiera debemos ir recorriendo la lista, lo que
pudiera hacer creer que las listas son menos prácticas que los vectores, pero estas tienen
sus ventajas: una inserción en medio de la lista no requiere mover todos los elementos
que se encuentran después del punto de inserción mientras que en un vector es
necesario recorrer todos los elementos para abrir espacio al nuevo elemento.
Cabe hacer notar que si se permite el acceso sólo al primer elemento,
entonces la lista se comporta como una pila mientras que si las inserciones se realizan
sólo por el último y los accesos sólo por el inicio, entonces la lista se ha implementado
para comportarse con el esquema FIFO.