Algoritmos de Estructuras de Datos: Operaciones con Colas Circulares y Pilas
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 3,24 KB
Planteamiento del Problema
COLA es un arreglo con capacidad para NC enteros, y PILA es un arreglo con capacidad para NP enteros. En el arreglo COLA reside una cola circular con índices FRENTE y FINAL cuyos valores no conocemos (es decir, no sabemos si la cola está vacía, media o llena). En el arreglo PILA reside una pila con índice TOPE, cuyo valor tampoco conocemos (es decir, no sabemos si la pila está vacía, media o llena).
Escribe el pseudocódigo de un algoritmo que realice las siguientes acciones:
- a) Extraiga uno a uno los elementos que pudiesen existir en esa cola y meta en la pila solo aquellos que sean de valor par. Este proceso se debe detener en cuanto la cola quede vacía o en cuanto la pila se llene.
- b) Terminado ese proceso, debe sacar uno a uno los elementos desde la pila para agregarlos a la cola. Este proceso se debe detener en cuanto la cola se llene o en cuanto la pila quede vacía.
En tu algoritmo, usa los mismos nombres de variables indicados en el planteamiento (es decir: COLA, FRENTE, FINAL, NC, PILA, NP y TOPE).
Solución del Algoritmo
Parte a) Extracción de elementos de la Cola hacia la Pila
Para extraer datos, la cola debe tener datos, es decir, FRENTE debe ser mayor que cero. Pero, de acuerdo al planteamiento, esta acción debe detenerse si la cola queda vacía (obvio) o si la pila queda llena (¿para qué seguir extrayendo datos desde la cola si no se van a poder meter en la pila?).
Mientras FRENTE > 0 y TOPE < NP repita
FFRENTE ← 1 + resto de (FRENTE - 1) / NC
Dato ← COLA(FFRENTE)
TOPE ← TOPE + 1
PILA(TOPE) ← Dato
FRENTE ← FRENTE + 1
Si FRENTE > FINAL entonces
FRENTE ← 0
FINAL ← 0
Fin Si
Fin MientrasParte b) Retorno de elementos desde la Pila hacia la Cola
Para sacar datos desde la pila, esta debe tener datos, es decir, TOPE debe ser mayor que cero. Pero, de acuerdo al planteamiento, esta acción debe detenerse si la pila queda vacía (obvio) o si la cola queda llena (¿para qué seguir sacando datos desde la pila si no se van a poder agregar a la cola?).
Mientras TOPE > 0 y (FINAL - FRENTE + 1) < NC repita
Dato ← PILA(TOPE)
TOPE ← TOPE - 1
FINAL ← FINAL + 1
FFINAL ← 1 + resto de (FINAL - 1) / NC
COLA(FFINAL) ← Dato
Si FRENTE es 0 entonces
FRENTE ← 1
Fin Si
Fin Mientras