Laboratorio de memoria y punteros en C
Cola de Prioridad
Los elementos se atienden por prioridad numérica.
1 Preparar
Los ejemplos usan las mismas operaciones públicas del TAD.
2 Predecir
Antes de ejecutar, identifica qué extremo, enlace o puntero debería cambiar y qué invariante debe conservarse.
3 Ejecutar y visualizar
Codigo C: Encolar
/**
* @brief Encola un elemento con su valor y prioridad asociada.
*
* @details
* Reserva dinámicamente un nuevo @c CPNodo, almacena @p valor y
* @p prioridad en él y lo enlaza al extremo @c atras de la cola.
* Si la cola estaba vacía, tanto @c delante como @c atras apuntarán
* al nuevo nodo. El orden de extracción depende de la prioridad,
* no del orden de inserción.
*
* @param[in,out] cola Puntero a la ColaPrioridad destino.
* @param[in] valor Dato entero a almacenar.
* @param[in] prioridad Número de prioridad (menor valor = mayor prioridad).
*
* @return @c true si el nodo fue creado e insertado correctamente.
* @return @c false si @p cola es NULL o @c malloc() falla.
*
* @pre La cola debe haber sido inicializada con cp_inicializar().
* @post El tamaño de la cola aumenta en 1.
* @note Complejidad temporal: O(1).
*/
bool cp_encolar(ColaPrioridad *cola, int valor, int prioridad) {
CPNodo *nuevo;
if (cola == NULL) {
return false;
}
nuevo = cp_crear_nodo(valor, prioridad);
if (nuevo == NULL) {
return false;
}
if (cola->delante == NULL) {
cola->delante = nuevo;
} else {
cola->atras->sgte = nuevo;
}
cola->atras = nuevo;
cola->cantidad++;
return true;
}3 Controlar la ejecución
Actual: +0.00x (1.00x real)
Paso 0 · sin función · sin fase · sin concepto
Paso: 0/0
4 Comprender
Estructura FIFO por nivel de prioridad: se atiende primero el elemento con menor valor numerico de prioridad y, en empate, se conserva el orden de llegada. La simulacion muestra inserciones ordenadas y el impacto de cada comparacion.
Frame actual: prepara una operación para observar concepto, cambio e invariante.
Condición y ciclo
Sin condición en este frame.
Variables C
Sin variables.
Punteros y enlaces
Sin cambios de punteros.
Heap y memoria
Sin objetos reservados.
Pila de llamadas
Sin llamadas.
5 Comparar conceptos
Selecciona una comparación para trabajar sobre dos copias independientes de la misma secuencia.
6 Reflexionar
Consola C (printf)
Historial de ejecución
Estructura del TAD
struct cp_nodo {
int valor;
int prioridad;
struct cp_nodo *sgte;
};
typedef struct cp_nodo CPNodo;
typedef struct {
CPNodo *delante;
CPNodo *atras;
int cantidad;
} ColaPrioridad;