Aprende con VisualStruct

Prueba una operación, observa qué cambia y relaciona el dibujo con el código C. No necesitas entender todos los paneles desde el primer día.

Empieza aquí · tu primera práctica en 5 minutos

Reto: descubrir por qué una pila se llama «último en entrar, primero en salir».

  1. Abre Pila. Si ya tienes datos, guárdalos antes de usar Restablecer TAD; para este ejemplo parte de una pila vacía.
  2. En Preparar, abre Agregar varios, escribe 10, 20, 30 y revisa el orden. Pulsa Cargar valores.
  3. Busca el tope: debe ser 30. Predice qué valor saldrá primero.
  4. Selecciona Desapilar, activa Paso a paso y ejecuta la operación. Avanza con Siguiente paso: observa cuándo cambia el tope y cuándo se libera el nodo.
  5. Al terminar quedan 20 y 10. Mira main.c del historial en Resultados: agregar los tres valores equivale a tres llamadas normales, no a un TAD nuevo.

Comprueba lo aprendido: ¿qué cambiaría si usaras una Cola? Allí saldría primero 10. Ahora compara la pila con una cola y descubre las demás estructuras lineales. Abrir guía de estructuras secuenciales.

Acomoda la vista para estudiar

La cabecera compacta deja más espacio para la práctica. En la vista de clase, el gráfico y el C aparecen juntos; en pantallas estrechas se reorganizan. Cada panel puede tener su propio desplazamiento.

  • − / +: aleja o acerca el dibujo. 100%: recupera la escala inicial.
  • Encajar vista: intenta ajustar el contenido sin volver el texto demasiado pequeño. Si no cabe, usa las barras del dibujo para desplazarte.
  • Centrar inicio: vuelve al comienzo del área desplazable; no cambia los datos ni el zoom.
  • El zoom y el desplazamiento elegidos se conservan al avanzar y retroceder por los pasos de esa vista. No hace falta encajar en cada paso.
  • Memoria y reservas · abrir / cerrar: muestra detalles auxiliares cuando están disponibles. Empieza cerrado para priorizar el gráfico; abrirlo no ejecuta nada.

En Comprender, empieza por las tres pistas del paso: qué ocurre, qué cambia y qué debes comprobar. Abre la referencia completa o los detalles avanzados sólo cuando necesites profundizar.

¿Quiero el resultado o entender cada paso?

Normal

Prepara datos y ejecuta sin Paso a paso. Obtienes el resultado final; es útil para construir ejemplos y comprobar una respuesta.

Paso a paso

Actívalo antes de ejecutar. Paso 0 es el estado inicial. Usa Paso anterior y Siguiente paso, o los controles de reproducción y pausa disponibles.

La línea C resaltada acaba de ejecutarse y el dibujo muestra su efecto. Una condición o un retorno pueden no cambiar ningún nodo: eso también es un paso válido.

  • Ejecutar operación inicia una llamada nueva. Navegar por una traza sólo revisa esa llamada.
  • Pausar detiene la reproducción, no deshace la operación.
  • Cerrar paso a paso muestra el final de la misma operación, sin repetirla. Reactivar permite revisar una traza conservada; no crea una que no se guardó en modo normal.
  • Restablecer TAD (o Reiniciar, según el módulo) borra la estructura y el historial de esa sesión; no es lo mismo que volver al primer paso. Exporta antes lo que quieras conservar y lee la confirmación si aparece.

Agregar varios valores sin escribir uno por uno

Disponible en Pila, Cola, Lista enlazada, Lista circular, ABB, AVL, Rojo-Negro y Montículo binario. En las listas agrega al final. No está disponible para Grafos, Hash, Cola de prioridad ni Sublista; Ordenamiento conserva su propia entrada de arreglo.

  1. Abre Agregar varios en Preparar. Escribe hasta 50 enteros separados por comas, por ejemplo 8, -3, 12. Se permiten espacios y signos; no decimales, posiciones vacías ni una coma final. Rango: −2147483648 a 2147483647.
  2. Revisa cantidad y orden. Se valida la lista completa antes de empezar. ABB, AVL y Rojo-Negro no aceptan repetidos, ni dentro del lote ni respecto al árbol actual. Pila, Cola, listas y Montículo sí los admiten.
  3. Elige Cargar valores para añadirlos en orden con resultado final, o Agregar paso a paso para estudiar cada inserción.
  4. En paso a paso, usa los controles del lote. Reproducir traza sólo reproduce el valor actual; Pausar detiene la reproducción. Al final, pulsa Siguiente valor para aceptar la siguiente inserción, o Finalizar lote al terminar la última.

Al terminar o detener un lote, edita la lista antes de iniciar otro. La vista previa conserva el orden solicitado; el resumen describe ese lote, no sustituye el estado actual tras otra operación o Restablecer TAD.

Detener lote conserva las operaciones ya aceptadas, incluida la actual, y descarta los valores pendientes. No es «deshacer todo». Si falla una operación durante el proceso, las anteriores no se revierten. Si la respuesta es incierta, usa Recargar estado e historial y comprueba qué se guardó antes de volver a cargar valores.

Resultados: elige lo que necesitas ver

  • Consola C (printf): salida realmente impresa por el C ejecutado. Puede estar vacía aunque la operación sea correcta. Los avisos de la aplicación y los diagnósticos de error no se convierten en salida printf.
  • main.c del historial: programa principal construido con las llamadas registradas. Es distinto de la consola y del cuerpo de la función que estás estudiando.
  • Estructura del TAD: tipos y campos de C: explica cómo se representan los datos.

El código actual, el main del historial y la estructura del TAD conservan sus líneas e indentación. Si una línea no cabe, usa la barra horizontal del propio panel; el desplazamiento vertical es independiente. También funciona en Ampliar. Avanzar pasos no centra el código horizontalmente ni cambia el texto de Copiar C.

Copiar C copia el texto fuente sin los números visuales de línea; Copiar salida copia la consola. Ampliar abre el contenido para leerlo con más espacio; Cerrar ampliación vuelve a la vista sin ejecutar otra operación.

¿JPG, JSON o código C?
  • Exportar JPG: guarda una imagen para un informe. Calidad y escala cambian la imagen, no el TAD. La exportación completa no se limita al recorte que estabas viendo con zoom.
  • Exportar JSON / resumen: conserva los datos o el resumen que indica ese control. No es un programa C ni promete poder importarse de nuevo.
  • Descargar fuente C y encabezado: en la ayuda de cada TAD obtienes los archivos .c y .h completos. No son un programa principal.
  • main.c: cópialo desde Resultados; usa la descarga directa en las pantallas que la ofrecen. Compílalo con el C/H del TAD, no por sí solo.

Elige qué quieres aprender

Secuenciales

Pila y Cola: orden de salida. Listas: enlaces y posiciones. Prioridad: menor número primero; Sublista: padres e hijos.

Guía de secuenciales

Jerárquicas

Compara un ABB con AVL y Rojo-Negro. Observa cómo las rotaciones mantienen el orden. El Montículo mínimo prioriza la raíz, no ordena todo el arreglo.

Guía de árboles y montículo

Grafos

Construye vértices y aristas; después elige recorridos, caminos mínimos o expansión mínima. Comienza con 3 o 4 vértices.

Guía de grafos

Hash

Relaciona clave, índice y colisión. La tabla encadena las colisiones y mantiene su capacidad; actualizar una clave no agrega otra entrada.

Guía de hash

Ordenamiento

Prueba 4, 1, 3, 2 y compara dos de los once métodos con la misma entrada. No confundas comparación con intercambio.

Guía de ordenamiento

Dudas frecuentes y cómo resolverlas

No veo todos los nodos / el dibujo está muy pequeño

Prueba 100%, luego + o −. Desplázate dentro del dibujo. Encajar vista conserva legibilidad y puede dejar contenido fuera del área visible; no elimina nodos. Cierra los detalles de memoria para recuperar espacio.

Siguiente paso está deshabilitado / no hay traza

Puede que estés al final o hayas ejecutado en modo normal. Para una operación nueva, activa Paso a paso antes de ejecutarla. En un lote, al final de la traza usa Siguiente valor; no esperes que Reproducir agregue todos los pendientes.

La lista de valores no se acepta

Usa enteros separados por comas, por ejemplo -2, 0, 7. Quita comas dobles o finales, letras y decimales. Revisa la posición indicada y no superes 50 valores. En ABB, AVL y Rojo-Negro elimina los duplicados del lote o ya presentes en el árbol. No se envía ningún valor hasta validar toda la lista.

Detuve un lote, pero algunos valores siguen en la estructura

Es lo esperado: Detener lote no deshace operaciones aceptadas. Conserva la actual y las anteriores; descarta las pendientes. Si una petición tiene resultado incierto, usa Recargar estado e historial antes de seguir: reenviar a ciegas podría duplicar una inserción.

La consola está vacía / el resultado dice error

Muchas funciones C no imprimen. Revisa el resultado de la operación, no sólo la consola. Corrige el dato indicado; un error de entrada no equivale a una ejecución exitosa. Un error detectado dentro del algoritmo puede tener pasos que expliquen su causa.

Grafo: traza demasiado extensa

La vista admite hasta 15 vértices. La traza tiene un presupuesto de 4.000 eventos C y del llamador, más la publicación final: si lo supera se rechaza la preparación, no se entrega una traza cortada. Reduce el ejemplo o usa modo normal para obtener el resultado completo sin guardar esa traza extensa.

Grafo: pesos negativos, destino inalcanzable o grafo desconectado

Dijkstra requiere pesos no negativos, incluso en componentes desconectadas. Bellman-Ford permite negativos pero informa ciclos negativos alcanzables. Prim y Kruskal necesitan grafo no dirigido, conexiones simétricas y conectividad: un grafo desconectado no produce un bosque exitoso. Revisa aristas y vértice inicial antes de repetir.

Mis datos anteriores aparecen suspendidos

No significa que estén vacíos. Los historiales de grafos de una versión anterior se conservan sin reinterpretarse; expórtalos antes de confirmar Restablecer datos. En Hash ocurre también con sesiones que superan el límite visual de 128 buckets. No se recortan silenciosamente.

Counting o Binsort rechazan mi arreglo

Ordenamiento admite entre 1 y 80 enteros de 32 bits. Counting y Binsort requieren además que máximo − mínimo + 1 sea como máximo 1.000.000. Es el rango de valores, no la cantidad de elementos. Reduce el rango o elige otro método.

No funciona Copiar C

El navegador puede limitar el portapapeles. Selecciona el texto y cópialo manualmente, o usa la descarga de fuente en Ayuda. Para compilar, no copies los números de línea de la presentación.

Para profundizar cuando lo necesites

Contratos de los archivos C descargados

Los archivos del TAD no incluyen un programa principal: guarda tu programa en main.c y compílalo junto con el C descargado. Usa el encabezado correspondiente para comprobar las firmas y los tipos de retorno.

Counting y Binsort limitan el rango inclusivo con ORDENAMIENTO_RANGO_MAX, cuyo valor es 1.000.000. Binsort delega en Counting Sort; hereda sus límites de rango y reservas. Un método con retorno de estado distingue ORDENAMIENTO_OK de ORDENAMIENTO_ERROR; no sustituyas esa comprobación por asumir que el arreglo ya está ordenado.

Los valores del árbol Rojo-Negro deben estar entre -2147483648 y 2147483647, sin truncar. Al terminar el programa, el llamador libera su árbol con rbt_liberar(arbol); arbol = NULL;; la consulta o la copia de un puntero no transfieren esa propiedad.

Atajos reales de teclado

Usa los atajos fuera de los campos de entrada y con una traza preparada. Durante Agregar varios, utiliza sus propios botones.

  • Secuenciales, Hash, Grafos y Ordenamiento: Alt + → siguiente; Alt + ← anterior; Alt + Inicio comienzo; Alt + Fin final; Alt + P pausa.
  • Secuenciales: Alt + R reproduce desde el comienzo. Ordenamiento: reproduce o vuelve a empezar si llegó al final.
  • Jerárquicas: →, ←, Inicio y Fin navegan sin Alt; Espacio pausa.
  • Pestañas de Resultados: con foco en una pestaña, ← y → cambian de panel. Tab permite recorrer controles.
Memoria, punteros e invariantes sin confusiones

Un TAD es un tipo de dato con sus operaciones; una invariante es una regla que debe conservar al terminar correctamente. Durante una inserción o rotación puedes ver enlaces transitorios: no juzgues el resultado antes de terminar.

Los identificadores de memoria del dibujo son simbólicos, no direcciones reales. Un campo indeterminado no es lo mismo que NULL. Tras free, el registro histórico ayuda a explicar lo ocurrido, pero no convierte el puntero liberado en uno utilizable. Copiar un puntero tampoco crea una copia independiente del objeto.

Grafo: cómo leer GrafoEstado y el C del libro

El C de grafos de esta versión sigue el código del libro. GrafoEstado explica si una operación terminó bien o por qué falló: OK, MEMORIA, NO_EXISTE, PESO_NEGATIVO, CICLO_NEGATIVO, DESCONECTADO, ARGUMENTO o RANGO.

No decidas el éxito sólo por un puntero NULL: un camino de un vértice a sí mismo puede no tener arcos y ser correcto. Las distancias usan long long y una marca de alcanzable; INT_MAX no significa infinito. Identificadores y pesos son enteros de 32 bits; 2.0 se normaliza a 2, pero 2.5 no se acepta. Eliminar un vértice libera sus arcos incidentes dentro del propio C.

Consulta contratos, memoria y fuente completa de Grafo.

Mi primer programa C fuera de la aplicación

Descarga tad_pila.c y tad_pila.h desde Ayuda de Pila. Guarda este ejemplo como main.c en la misma carpeta:

#include <stdio.h>
#include "tad_pila.h"

int main(void) {
    ptrPila pila = NULL;
    pila_apilar(&pila, 10);
    pila_apilar(&pila, 20);
    pila_apilar(&pila, 30);
    if (pila != NULL) {
        printf("Sale: %d\n", pila_desapilar(&pila));
    }
    pila_destruir(&pila);
    return 0;
}

Con un compilador GCC disponible: gcc -std=c17 -Wall -Wextra main.c tad_pila.c -o ejemplo. Ejecuta ./ejemplo (o .\ejemplo.exe en Windows). Con reservas correctas imprime Sale: 30. El printf pertenece a este main; no es una impresión inventada de pila_desapilar.

El main de tu historial permite reproducir tu propia práctica. Cada TAD tiene sus firmas y reglas de memoria: usa sus encabezados, no cambies nombres para hacerlos parecer iguales.