Laboratorio de memoria y punteros en C
Pila
Estructura LIFO para apilar y desapilar elementos.
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: Apilar
/**
* @brief Apila un nuevo valor en la pila.
* @param p Puntero a la pila.
* @param valor Valor entero que se apilará.
*/
void pila_apilar(ptrPila *p, int valor) {
if (p == NULL) {
printf("Error: pila no inicializada.\n");
return;
}
ptrPila aux = (ptrPila) malloc(sizeof(struct NodoPila));
if (aux == NULL) {
printf("Error: No se pudo asignar memoria.\n");
return;
}
aux->nro = valor;
aux->sgte = *p;
*p = aux;
}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 LIFO (Last In, First Out): el ultimo nodo en entrar queda en el TOPE y es el primero en salir. En la simulacion observa como se crea el nodo auxiliar, se enlaza al tope actual y luego se reasigna el puntero principal de la pila.
Condición y ciclo
Variables C
Punteros y enlaces
Heap y memoria
Pila de 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
typedef struct NodoPila {
int nro;
struct NodoPila *sgte;
} *ptrPila;