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.

Entradas relacionadas: