Tabla de contenidos
Definir el concepto de cola (Bloom 1).
Describir la interfaz pública de una cola (Bloom 1).
Enumerar posibles aplicaciones de una cola (Bloom 1).
Definir el concepto de pila (Bloom 1).
Describir la interfaz pública de una pila (Bloom 1).
Enumerar posibles aplicaciones de una pila (Bloom 1).
Definir el concepto de lista enlazada (Bloom 1).
Definir el concepto de cola doble (deque) (Bloom 1).
Describir la interfaz de una cola doble (deque) (Bloom 1).
Definir el concepto de cola con prioridad (Bloom 1).
Describir la interfaz de una cola con prioridad (Bloom 1).
Explicar cómo cambia el estado de una cola ante sucesivas operaciones de inserción y extracción de datos. (Bloom 2*)
Explicar cómo cambia el estado de una pila ante sucesivas operaciones de inserción y extracción de datos. (Bloom 2*)
Explicar cómo cambia el estado de una cola doble ante sucesivas operaciones de inserción y extracción de datos por cualquiera de sus extremos (Bloom 2).
Explicar por qué la implementación de una cola sobre una lista enlazada requiere que las operaciones de inserción y extracción se realicen en extremos opuestos de la lista (Bloom 2).
Explicar por qué para implementar una cola sobre una lista enlazada es recomendable almacenar una referencia al último nodo de la lista (Bloom 2).
Explicar por qué para implementar una cola sobre una lista enlazada resulta más adecuado realizar las operaciones de extracción por el principio de la lista y las de inserción por el final (Bloom 2).
Explicar por qué la implementación de una pila sobre una lista enlazada requiere que las operaciones de inserción y extracción se realicen en el mismo extremo de la lista, y por qué este extremo debe ser el principio de la lista y no el final (Bloom 2).
Programar una cola mediante un array. (Bloom 3*)
Programar una pila mediante un array. (Bloom 3*)
Programar una cola mediante una lista enlazada. (Bloom 3*)
Programar una pila mediante una lista enlazada. (Bloom 3*)
Programar una cola mediante una cola doble (Bloom 3).
Programar una pila mediante una cola doble (Bloom 3).
Programar una cola doble mediante una lista doblemente enlazada (Bloom 3).
Programar aplicaciones sencillas que utilicen colas. (Bloom 3*)
Programar aplicaciones sencillas que utilicen pilas. (Bloom 3*)
Resolver cuestiones teóricas básicas acerca del funcionamiento de una cola. (Bloom 3*)
Resolver cuestiones teóricas básicas acerca del funcionamiento de una pila. (Bloom 3*)
Resolver cuestiones teóricas básicas acerca del funcionamiento de una cola doble (Bloom 3).
Programar un método que permita eliminar un nodo cualquiera en una lista enlazada (Bloom 3).
Programar un método que permita insertar un nodo en cualquier posición de una lista enlazada (Bloom 3).
Explicar las ventajas y desventajas de arrays frente a listas enlazadas para implementar pilas y colas. (Bloom 4*)
Dado un problema de programación sencillo, identificar la necesidad de utilizar una cola o una pila para resolverlo (Bloom 4).
Explicar cómo en un lenguaje de programación se puede dar soporte al concepto de subrutina (método) mediante una pila (Bloom 4).
Explicar cómo en un lenguaje de programación se puede dar soporte al concepto de recursividad mediante una pila (Bloom 4).
Resolver problemas que involucren el uso de listas enlazadas más complejas (p.e. listas doblemente enlazadas y listas circulares), partiendo de un diseño inicial de la solución que se proporcione con el enunciado y describa la estructura de datos a utilizar (Bloom 5).
Java usa una pila (pila de ejecución) para almacenar todos los métodos de un programa que se encuentran en el hilo de ejecución en un instante determinado.
Java permite controlar el tamaño de la pila del hilo de ejecución de un programa.
El API de Java ofrece una clase pila llamada Stack
que
no se recomienda usar.
Para implementar una pila, se puede utilizar la clase Array
básica.
La propiedad fundamental de un array es que se declare un tamaño antes
para que el compilador coja la cantidad correcta de memoria. Sin embargo,
si no sabemos la cantidad exacta de elementos, es difícil escoger el tamaño.
Para ello, y en vez de usar Vector
, se puede utilizar el array con la técnica de
int [] arr = new int[10];y a medida que se ejecuta la aplicación necesitamos más espacio, podemos usar esa técnica.
El API de Java ya te ofrece una clase consistente en un array que implementa la técnica de la expansión dinámica de arrays.
De las dos formas que hay para implementar pilas, con arrays (Array
o ArrayList
) o con listas enlazadas (LinkedList
),
generalmente es más eficiente hacerlo con arrays, sobre todo cuando se puede
dar una estimación de la capacidad inicial.
De las dos formas que hay para implementar colas, con arrays (Array
o ArrayList
) o con listas enlazadas (LinkedList
),
generalmente es más eficiente hacerlo con listas enlazadas.
Las colas no permiten el acceso aleatorio a los elementos de las mismas.
Se puede usar una pila auxiliar para invertir el orden de los elementos de una cola.
Las operaciones básicas de apilar y desapilar en la pila, y encolar y desencolar en la cola, tienen una complejidad O(1).
En los GUIs de Java, se usa una cola para almacenar los eventos de las interacciones con el usuario de la aplicación.
Una cola doble (deque) puede usarse para implementar una pila.
Una cola doble (deque) puede usarse para implementar una cola.
En una cola implementada con listas enlazadas (LinkedQueue
) la operación de
enqueue()
puede ser muy costosa si no se toman las
medidas adecuadas.
La implementación de una pila basada en un array (ArrayStack
) es tan eficiente como
la implementación de una cola basada en un array (ArrayQueue
) si este es circular.
Java proporciona un objeto iterador (Iterator
) para recorrer una lista; sin embargo, no existe
dicho objeto ni para recorrer una pila (Stack
) ni una cola (Queue
).