Estructura de datos y algoritmos: cola
Queue es una estructura de datos abstracta, algo similar a Stacks. A diferencia de las pilas, una cola está abierta en ambos extremos. Un extremo siempre se usa para insertar datos (poner en cola) y el otro se usa para eliminar datos (quitar de cola). La cola sigue la metodología First-In-First-Out, es decir, se accederá primero al elemento de datos almacenado primero.
Un ejemplo real de cola puede ser una carretera de un solo carril, donde el vehículo entra primero y sale primero. Se pueden ver más ejemplos del mundo real como colas en las ventanillas de boletos y las paradas de autobús.
Representación de cola
Como ahora entendemos que en cola, accedemos a ambos extremos por diferentes motivos. El siguiente diagrama que se muestra a continuación intenta explicar la representación de la cola como estructura de datos:
Al igual que en las pilas, también se puede implementar una cola mediante matrices, listas vinculadas, punteros y estructuras. En aras de la simplicidad, implementaremos colas utilizando una matriz unidimensional.
Operaciones básicas
Las operaciones de cola pueden implicar inicializar o definir la cola, utilizarla y luego borrarla por completo de la memoria. Aquí intentaremos comprender las operaciones básicas asociadas con las colas:
enqueue() - agregar (almacenar) un artículo a la cola.
dequeue() - eliminar (acceder) un elemento de la cola.
Se requieren pocas funciones más para que la operación de cola mencionada anteriormente sea eficiente. Estos son ...
peek() - Obtiene el elemento al principio de la cola sin eliminarlo.
isfull() - Comprueba si la cola está llena.
isempty() - Comprueba si la cola está vacía.
En la cola, siempre retiramos (o accedemos) a los datos, señalados por front puntero y mientras buscamos (o almacenamos) datos en la cola, tomamos la ayuda de rear puntero.
Primero aprendamos sobre las funciones de apoyo de una cola:
ojeada()
Esta función ayuda a ver los datos en el frontde la cola. El algoritmo de la función peek () es el siguiente:
Algorithm
begin procedure peek
return queue[front]
end procedure
Implementación de la función peek () en lenguaje de programación C -
Example
int peek() {
return queue[front];
}
está lleno()
Como estamos usando una matriz de una sola dimensión para implementar la cola, solo verificamos que el puntero trasero alcance MAXSIZE para determinar que la cola está llena. En caso de que mantengamos la cola en una lista enlazada circular, el algoritmo será diferente. Algoritmo de la función isfull () -
Algorithm
begin procedure isfull
if rear equals to MAXSIZE
return true
else
return false
endif
end procedure
Implementación de la función isfull () en lenguaje de programación C -
Example
bool isfull() {
if(rear == MAXSIZE - 1)
return true;
else
return false;
}
esta vacio()
Algoritmo de la función isempty () -
Algorithm
begin procedure isempty
if front is less than MIN OR front is greater than rear
return true
else
return false
endif
end procedure
Si el valor de front es menor que MIN o 0, indica que la cola aún no se ha inicializado, por lo tanto, está vacía.
Aquí está el código de programación C:
Example
bool isempty() {
if(front < 0 || front > rear)
return true;
else
return false;
}
Operación de puesta en cola
Las colas mantienen dos punteros de datos, front y rear. Por lo tanto, sus operaciones son comparativamente difíciles de implementar que las de las pilas.
Se deben seguir los siguientes pasos para poner en cola (insertar) datos en una cola:
Step 1 - Comprueba si la cola está llena.
Step 2 - Si la cola está llena, producirá un error de desbordamiento y saldrá.
Step 3 - Si la cola no está llena, incremente rear puntero para señalar el siguiente espacio vacío.
Step 4 - Agregue un elemento de datos a la ubicación de la cola, donde apunta la parte posterior.
Step 5 - devuelve el éxito.
A veces, también verificamos si una cola está inicializada o no, para manejar cualquier situación imprevista.
Algoritmo para la operación de puesta en cola
procedure enqueue(data)
if queue is full
return overflow
endif
rear ← rear + 1
queue[rear] ← data
return true
end procedure
Implementación de enqueue () en lenguaje de programación C -
Example
int enqueue(int data)
if(isfull())
return 0;
rear = rear + 1;
queue[rear] = data;
return 1;
end procedure
Operación Dequeue
Acceder a los datos de la cola es un proceso de dos tareas: acceder a los datos donde frontestá apuntando y eliminar los datos después del acceso. Se siguen los siguientes pasos para realizardequeue operación -
Step 1 - Compruebe si la cola está vacía.
Step 2 - Si la cola está vacía, producirá un error de subdesbordamiento y saldrá.
Step 3 - Si la cola no está vacía, acceda a los datos donde front está apuntando.
Step 4 - Incremento front puntero para apuntar al siguiente elemento de datos disponible.
Step 5 - Devolver el éxito.
Algoritmo para sacar de cola
procedure dequeue
if queue is empty
return underflow
end if
data = queue[front]
front ← front + 1
return true
end procedure
Implementación de dequeue () en lenguaje de programación C -
Example
int dequeue() {
if(isempty())
return 0;
int data = queue[front];
front = front + 1;
return data;
}
Para obtener un programa de cola completo en lenguaje de programación C, haga clic aquí .