Algoritmo Eficiente para la Gestión de Datos entre Pilas y una Cola
Clasificado en Informática
Escrito el en español con un tamaño de 3,15 KB
Descripción del Problema
Se presenta un escenario donde se gestiona una cola simple de enteros, representada por un arreglo COLA
de capacidad N
, y dos pilas de enteros, PILA1
y PILA2
, con capacidades N1
y N2
respectivamente.
El objetivo es desarrollar un algoritmo repetitivo que, en cada ciclo, extraiga un dato de PILA1
y un dato de PILA2
, e intente agregarlos a la cola. El ciclo debe finalizar (o no ejecutarse) si ambas pilas están vacías o si la cola está llena.
El estado inicial de la cola y las pilas puede ser cualquiera. El algoritmo recibe como parámetros los índices E
y S
(para la cola), TOPE1
y TOPE2
(para las pilas), y las capacidades N
, N1
y N2
.
Propuesta de Algoritmo
De acuerdo con el planteamiento del ejercicio, el proceso repetitivo solo se puede ejecutar si queda espacio en la cola Y si quedan datos en al menos una de las pilas (es decir, si quedan datos en PILA1
O en PILA2
).
Condición Principal del Ciclo
La condición para el ciclo principal se establece de la siguiente manera:
MIENTRAS E < N Y (TOPE1 > 0 O TOPE2 > 0) REPETIR
El ingreso a este ciclo MIENTRAS
implica que en la cola queda al menos un espacio disponible y que al menos una de las pilas aún posee datos. Dado que no se sabe cuál de las pilas (o si ambas) contiene datos, se procederá a verificar cada una.
Procesamiento de PILA1
Se verifica si PILA1
tiene datos disponibles para ser extraídos y agregados a la cola.
SI TOPE1 > 0 ENTONCES
// Si se cumple esta condición, PILA1 tiene datos.
// Se extrae un dato de PILA1 y se agrega a la cola.
// No es necesario comprobar si queda espacio en la cola,
// ya que la condición del ciclo principal lo garantiza.
E <-- E + 1
COLA(E) <-- PILA1(TOPE1)
TOPE1 <-- TOPE1 - 1
// Corrección del índice S si es el primer dato agregado a la cola.
SI S = 0 ENTONCES
S <-- 1
FIN-SI
FIN-SI
Procesamiento de PILA2
De manera similar, se procesa PILA2
. Sin embargo, es crucial verificar nuevamente si aún queda espacio en la cola, ya que la operación anterior con PILA1
pudo haber ocupado el último lugar disponible.
SI TOPE2 > 0 ENTONCES
// Se verifica si aún hay espacio en la cola antes de agregar desde PILA2.
SI E < N ENTONCES
E <-- E + 1
COLA(E) <-- PILA2(TOPE2)
TOPE2 <-- TOPE2 - 1
// Corrección del índice S si es el primer dato agregado a la cola.
SI S = 0 ENTONCES
S <-- 1
FIN-SI
FIN-SI
FIN-SI
Fin del Ciclo
FIN-MIENTRAS
El ciclo concluye cuando la cola está llena o ambas pilas están vacías, asegurando que no se intenten operaciones sobre estructuras sin capacidad o sin datos.