Laboratorio de memoria y punteros en C

Lista Circular

Lista donde el último nodo vuelve al primero.

Abrir guía de Lista Circular

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.

Progreso conceptual de esta sesión: 0 predicciones.

3 Ejecutar y visualizar

5 Relacionar con C

Codigo C: Insertar inicio

/**
 * @brief Inserta un nuevo elemento al inicio de la lista circular.
 *
 * @param[in,out] lista Puntero a la lista.
 * @param[in]     valor Dato a insertar.
 *
 * @return true si se insertó con éxito, false en caso de error.
 *
 * @post Si la lista estaba vacía, el nodo apunta a sí mismo.
 * @note Complejidad temporal: O(1) ya que se mantiene el puntero a la cola.
 */
bool lcir_insertar_inicio(ListaCircular *lista, int valor) {
    LCirNodo *nuevo;

    if (lista == NULL) {
        return false;
    }

    nuevo = lcir_crear_nodo(valor);
    if (nuevo == NULL) {
        return false;
    }

    if (lista->cabeza == NULL) {
        nuevo->sgte = nuevo;
        lista->cabeza = nuevo;
        lista->cola = nuevo;
        lista->cantidad = 1;
        return true;
    }

    nuevo->sgte = lista->cabeza;
    lista->cola->sgte = nuevo;
    lista->cabeza = nuevo;
    lista->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

Lista enlazada circular donde el ultimo nodo apunta nuevamente al primero. La interpretacion paso a paso debe evidenciar el cierre del ciclo en cada alta/baja de nodos para evitar rupturas o ciclos invalidos.

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)

terminal

Historial de ejecución

    Estructura del TAD
    struct lcir_nodo {
        int valor;
        struct lcir_nodo *sgte;
    };
    
    typedef struct lcir_nodo LCirNodo;
    
    typedef struct {
        LCirNodo *cabeza;  
        LCirNodo *cola;    
        int cantidad;      
    } ListaCircular;