Ir al contenido principal

Colas En Arreglos y En Listas Enlazadas


Como se había dicho anteriormente en el blog pasado, las colas en informática, es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción "push" se realiza  por un extremo y la operación de extracción "pop" por el otro. También se le llama estructura FIFO(del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir. En está sección estaremos hablando más a profundidad de este tipo de estructuras e inclusive hacer una comparación entre las colas implementadas en arreglos y en listas enlazadas.

La cola basada en matriz es algo difícil de implementar de manera efectiva. Una simple conversión de lista basada en matriz no es eficiente, supongamos que hay "n" elementos en la cola, con la matriz basada en lista,  podríamos requerir que todos los elementos de la cola se almacenen en las primeras posiciones de la matriz. Si elegimos el elemento trasero de la cola para estar en posición 0, entonces las operaciones de deshilachado requieren solo - (1)  tiempo, debido a que el elemento frontal de la cola ( el que está siendo eliminado) es el último elemento de la matriz. Sin embargo, las operaciones de "enqueue(encolar)" requerirán -(n) tiempo, porque los n elementos actualmente en la cola debe ser desplazado a una posición en la matriz. Si en cambio elegimos el elemento posterior de la cola para estar en la posición  n-1, entonces una operación de "enqueue" es equivalente a una operación de agregación en una lista, esto requiere sólo -(1) tiempo, pero ahora, una operación de "dequeue(desencolar)" requiere -(n) tiempo, porque todos los elementos deben ser desplazados hacia abajo por una posición para retener la propiedad de que el n-1 restante de los elementos de la cola residen en la primeras posiciones de n-1 de la matriz.

La implentación de la cola enlazada es una adaptación directa de la lista enlazada. Los métodos delanteros y traseros son punteros a los elementos de cola delantera y trasera respectivamente. Usando un encabezado de nodo enlace, lo que permite una implementación más sencilla de la operación, evitando casos especiales cuando la cola está vacía. "Enqueue" coloca el nuevo elemento en un nodo enlace al final de la lista enlazada y luego avanza hacia atrás para apuntar al nuevo enlace nodo. "Dequeue"  agarra el primer elemento de la lista y lo elimina.

Teniendo en cuenta la implementación de la cola con arreglos y enlazadas, me gustaría concluir con una comparación entre cola en arreglos y cola enlazada. Para empezar, las implementaciones de cola basadas en matrices y enlazadas requieren tiempo constante. Los problemas de comparación de espacios son los mismos que para el equivalente de implentaciones en pila basadas en array, no hay manera conveniente de almacenar dos colas en la misma matriz, a menos que los elementos siempre son transferidos directamente de una cola a la otra.

Fuentes:
A Practical Introduction to Data Structures and Algorithm Analysis Third Edition (C++ Version)
Colas en informática


Comentarios

Entradas populares de este blog

Árbol Binario

Representación gráfica de un árbol binario  Un árbol binario es un árbol nulo o un árbol cuyos nodos tienen a lo sumo dos hijos. Los hijos de un árbol binario se pueden denotar como hijo izquierdo e hijo derecho. No pueden tener más de dos hijos (de ahí el nombre "binario"). Si algún hijo tiene como referencia a null, es decir que no almacena ningún dato, entonces este es llamado a un nodo externo. En el caso contrario el hijo es llamado un nodo interno. Usos comunes de los árboles binarios son los árboles binarios de búsquedas, los montículos binarios y Codificación de Huffman. Un árbol binario es un árbol en el que ningún nodo puede tener cero, uno o dos hijos (subárboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho. Existen tipos de árboles binarios que suelen usarse para fines específicos, como: Árbol binario de búsqueda y Árbol de Fibonnacci. Complejidad: árboles completos Deduciremos, de manera indu...

Abstracción de datos

¿Qué entendemos por abstracción? Pues bien, básicamente es un medio fundamental usado por el ser humano para enfrentarse a la complejidad del mundo. Consiste en básicamente describir o especificar aspectos esenciales e importantes de un fenómeno o entidad, al mismo tiempo que se desechan características irrelevantes según el interés de quien realiza la abstracción, un claro ejemplo sería la imagen que tenemos arriba, en donde se presenta un gato y dos personas con visión diferente con respecto a la mascota, la anciana de la izquierda observa a la criatura de una manera que se le pueda dar amor o cariño, por otra parte, la señora de la derecha, observa al animal de una manera más científica, es decir, se centra más en la cualidades o partes internas del gato. La abstracción de datos en la programación nos ayuda muchas veces a entender los problemas y atacarlos de una manera más sencilla y que la situación que se haya presentado se entienda más fácil, es decir, desechar lo que no oc...

Búsquedas en Listas: Búsqueda Secuencial y Binaria

Procedimiento de las búsquedas Con mucha frecuencia los programadores trabajan con grandes cantidades de datos almacenados en arrays y registros, y por ello será necesario determinar si un array contiene un valor que coincida con un cierto valor clave. El proceso de encontrar un elemento específico de un array se denomina "búsqueda". En esta sección se examinarán dos técnicas de búsquedas: búsqueda lineal o secuencial, la técnica más sencilla, y búsqueda binaria o dicotómica, la técnica más eficiente. Búsqueda Secuencial La búsqueda secuencial busca un elemento de una lista utilizando un valor destino llamado clave. En una búsqueda secuencial (a veces búsqueda lineal), los elementos de una lista o vector se exploran (se examinan) en secuencia, uno después de otro, La búsqueda secuencial es necesaria, por ejemplo, si se desea encontrar la persona cuyo número de teléfono es 958-220000 en un directorio o listado telefónico de su ciudad. Los directorios de teléfono están o...