0.1 如何使用图码
图码旨在创建一个可以直观地学习编程、数据结构和算法的平台。
通过易于理解的交互式动画使复杂的算法变得简单易懂。
无论你的算法功底如何,都会使你受益颇多。
🌇 本站的特色
1.可视化电子书
- 全书每个数据结构和算法都拥有交互式动画,系统化的讲解相关知识点,内容清晰易懂、学习曲线平滑。
- 交互式面板不是一个简单的视频或者 GIF,而是一个交互式页面,所有算法都可自定义输入数据。
- 提供的代码均为C、C++,包含main函数,拒绝伪代码。符合国内高校考试要求,以及上机实操。
2.精编算法可视化
我们目前已经编写了将近60+的算法可视化,所有代码都是按照考研408中的数据结构规范编写。
3.自定义代码可视化
除了上述精编的可视化外,你还可以使用我们的可视化算法编辑器,它可以将任意代码进行可视化,帮助你更好地理解代码的执行流程和变量的变化。
目前已经支持: CC++JavaJavaScriptPythonRuby 6种不同的编程语言
👩🏻💻 如何使用算法可视化
第1步:认识可视化面板
可视化面板分为三个部分动画窗口代码窗口操作栏
点击下方可视化面板操作栏的头插法创建->创建 您可以看到对于单链表头插的执行流程动画,以及右边当前动画步骤对应的代码行
💡 提示
建议动画开始后点击暂停,通过下一步按钮一步步的查看代码运行过程。
这样可以更好的观察当前动画对应的代码以及变量情况。
单链表-带头结点 | 可视化完整可视化
0.1 Cómo usar Tuma - Tutorial de Estructuras de Datos y Algoritmos Visualiza tu código con animaciones
Listas Enlazadas: Estructura de Datos Lineal y su Visualización
Si estás aprendiendo estructuras de datos y algoritmos, seguramente ya te has topado con el concepto de lista enlazada (linked list). Es una de las estructuras lineales más fundamentales, junto con el array, pero con una forma muy distinta de organizar la información. En este artículo te explicaremos de manera sencilla qué es una lista enlazada, cómo funciona, cuáles son sus ventajas y desventajas, y en qué situaciones conviene usarla. Además, descubrirás cómo nuestra plataforma de visualización puede ayudarte a entender este concepto de forma interactiva, sin tener que imaginar punteros abstractos.
¿Qué es una lista enlazada? (Concepto básico)
Imagina que tienes una serie de notas adhesivas, cada una con un dato escrito, y cada nota tiene una flecha que apunta a la siguiente nota. Eso es, en esencia, una lista enlazada. A diferencia de un arreglo (array), donde todos los elementos están uno al lado del otro en la memoria, en una lista enlazada los elementos (llamados nodos) pueden estar dispersos en la memoria, y se conectan mediante enlaces (punteros). Cada nodo contiene dos partes: el valor del dato y un puntero (o referencia) que indica dónde está el siguiente nodo. La lista termina cuando un nodo apunta a null (ninguna parte).
Existen varios tipos de listas enlazadas: simplemente enlazadas (cada nodo solo apunta al siguiente), doblemente enlazadas (cada nodo apunta al siguiente y al anterior) y circulares (el último nodo apunta al primero). La más común es la simplemente enlazada, y en este artículo nos centraremos en ella para facilitar la comprensión.
Principio de funcionamiento: nodos y punteros
Para dominar la lista enlazada, debes entender dos conceptos clave: nodo y puntero. Un nodo es la unidad básica. Piensa en él como una cajita que guarda un dato (por ejemplo, un número entero) y además tiene un espacio para guardar la dirección del siguiente nodo. El puntero es esa dirección. Cuando tienes una lista, solo necesitas conocer la dirección del primer nodo, llamado cabeza (head). A partir de ahí, siguiendo los punteros puedes recorrer todos los nodos hasta llegar al final.
Esta estructura permite que insertar o eliminar elementos sea muy eficiente, porque no necesitas mover físicamente los datos como en un array. Por ejemplo, para insertar un nuevo nodo entre dos existentes, solo tienes que ajustar los punteros: el nuevo nodo apunta al siguiente, y el nodo anterior apunta al nuevo. Esta operación es de tiempo constante O(1) si ya tienes la referencia al nodo anterior.
Ventajas y desventajas de las listas enlazadas
Ventajas:
- Inserción y eliminación rápidas: No requieren desplazar elementos, solo actualizar punteros. Es ideal cuando tienes que hacer muchas inserciones/eliminaciones en posiciones intermedias.
- Tamaño dinámico: Puedes agregar nodos sin necesidad de redimensionar un array. La lista crece bajo demanda.
- Uso eficiente de memoria: No se reserva espacio de más. Cada nodo ocupa exactamente lo que necesita.
Desventajas:
- Acceso secuencial: Para llegar al nodo en la posición 100, debes recorrer 99 nodos. No hay acceso directo como en un array (O(1) vs O(n)).
- Mayor consumo de memoria por nodo: Cada nodo guarda el dato más uno o dos punteros, lo que incrementa el overhead.
- Dificultad de implementación: Es fácil cometer errores con los punteros (por ejemplo, perder la referencia a un nodo).
¿Cuándo usar una lista enlazada? (Aplicaciones)
Las listas enlazadas no son la solución para todo, pero brillan en escenarios específicos. Aquí tienes algunos casos de uso comunes:
- Implementación de pilas y colas: Las listas enlazadas son la base de muchas implementaciones de pilas (LIFO) y colas (FIFO), porque permiten inserciones y eliminaciones en los extremos sin costo adicional.
- Navegación en navegadores web: El historial de páginas se puede modelar con una lista doblemente enlazada, permitiendo ir adelante y atrás.
- Reproductores de música: Una lista de reproducción es una lista enlazada de canciones, donde puedes insertar o eliminar canciones fácilmente.
- Sistemas de archivos: Algunos sistemas operativos usan listas enlazadas para gestionar bloques de archivos dispersos en el disco.
- Gestión de memoria dinámica: Los administradores de memoria usan listas enlazadas para llevar el registro de bloques libres.
Visualización interactiva: la clave para entender listas enlazadas
Si eres estudiante de algoritmos, probablemente has intentado dibujar listas enlazadas en papel con cuadros y flechas. Pero cuando los punteros empiezan a cambiar (inserciones, eliminaciones, inversiones), es fácil perderse. Aquí es donde entra nuestra plataforma de visualización de estructuras de datos. Hemos diseñado una herramienta que te permite ver exactamente cómo se comporta una lista enlazada en tiempo real.
Con nuestra plataforma, puedes:
- Crear nodos con valores personalizados y ver cómo se enlazan.
- Insertar nodos en cualquier posición y observar cómo se actualizan los punteros.
- Eliminar nodos y comprobar que la lista no se rompe.
- Recorrer la lista paso a paso, viendo cómo se mueve el puntero actual.
- Invertir la lista y entender el cambio de direcciones.
Todo esto se muestra con animaciones suaves y colores diferenciados para los punteros. No necesitas instalar nada: todo funciona en el navegador. Además, cada operación muestra el código correspondiente (en Python, Java o JavaScript) para que puedas relacionar la visualización con la implementación real.
¿Cómo usar la plataforma de visualización paso a paso?
Para que empieces a practicar de inmediato, aquí te explicamos el flujo básico:
- Accede al módulo de listas enlazadas desde el menú principal de la plataforma.
- Haz clic en "Crear lista" e ingresa algunos valores iniciales (por ejemplo: 5, 10, 15). Verás aparecer tres nodos conectados por flechas.
- Selecciona la operación "Insertar". Elige la posición (por ejemplo, después del segundo nodo) y el valor (20). Observa cómo se crea un nuevo nodo y se ajustan los punteros.
- Prueba eliminar un nodo (por ejemplo, el primero). Verás que la cabeza cambia y los punteros se reacomodan.
- Activa el modo "Paso a paso" para ejecutar cada instrucción lentamente. La plataforma te mostrará en qué nodo estás y qué puntero se está modificando.
- Revisa el panel de código que se actualiza en tiempo real. Así asociarás la animación con la lógica de programación.
Además, la plataforma incluye ejercicios guiados: te proponemos un problema (por ejemplo, "invertir la lista") y tú debes arrastrar los nodos o hacer clic en las operaciones correctas. Si te equivocas, la herramienta te dará pistas visuales.
Funcionalidades avanzadas para estudiantes y docentes
Nuestra plataforma no solo muestra listas enlazadas simples. También soporta:
- Listas doblemente enlazadas: Visualiza los punteros "next" y "prev" con colores distintos.
- Listas circulares: Observa cómo el último nodo apunta al primero.
- Operaciones complejas: Como la detección de ciclos (algoritmo de Floyd) o la fusión de dos listas ordenadas.
- Comparación con arrays: Puedes ver side-by-side cómo se comporta una operación de inserción en un array vs. en una lista enlazada.
- Exportar e importar listas: Comparte tu configuración con compañeros o docentes.
Para los profesores, la plataforma permite crear "escenarios" personalizados y compartir enlaces directos. Así pueden diseñar ejercicios prácticos para sus clases de algoritmos.
¿Por qué la visualización mejora el aprendizaje?
Estudios en educación en ciencias de la computación demuestran que los estudiantes que usan visualizaciones interactivas comprenden mejor las estructuras de datos abstractas. Al ver los punteros moverse, el concepto de "referencia" deja de ser una idea difusa. La lista enlazada se vuelve tangible. Además, al poder cometer errores en un entorno simulado (como perder un nodo), aprendes sin miedo a romper el programa real.
Nuestra plataforma está diseñada específicamente para reducir la carga cognitiva: cada elemento visual tiene un propósito. Los nodos son rectángulos con bordes redondeados, los punteros son flechas animadas, y las operaciones se resaltan con destellos. Todo esto ayuda a que tu cerebro asocie la acción con el resultado.
Ejemplo práctico: insertar un nodo en medio de la lista
Supón que tienes una lista con los valores [3, 7, 9] y quieres insertar el valor 5 entre el 3 y el 7. En un array, tendrías que desplazar el 7 y el 9 hacia la derecha, lo cual cuesta tiempo O(n). En una lista enlazada, solo necesitas:
- Crear un nuevo nodo con valor 5.
- Hacer que el puntero del nuevo nodo apunte al nodo que contiene 7.
- Hacer que el puntero del nodo con 3 apunte al nuevo nodo.
En la plataforma, verás exactamente esos pasos: el nuevo nodo aparece flotando, luego se conecta. Esa claridad visual es imposible de lograr con solo texto o código estático.
Consejos para estudiar listas enlazadas con la plataforma
Para aprovechar al máximo la herramienta, te recomendamos:
- Empieza con listas pequeñas: 3 o 4 nodos. Domina las operaciones básicas (insertar, eliminar, buscar).
- Activa el modo "mostrar código": Aunque al principio no entiendas todo, verás cómo la animación se traduce en instrucciones.
- Intenta predecir lo que va a pasar: Antes de hacer clic en "insertar", piensa qué punteros cambiarán. Luego verifica.
- Repite los ejercicios con diferentes valores: La lógica es la misma, pero la práctica fija el conocimiento.
- Usa la función de "random test": La plataforma te genera una lista aleatoria y te pide que realices una operación específica. Es como un examen interactivo.
Más allá de la lista enlazada: otras estructuras lineales
Una vez que entiendas bien las listas enlazadas, te será más fácil comprender otras estructuras lineales como las pilas, colas y deque. De hecho, muchas implementaciones de pilas y colas usan listas enlazadas internamente. Nuestra plataforma también cubre esas estructuras con el mismo enfoque visual. Pero la lista enlazada es la base: si la dominas, el resto será más sencillo.
Conclusión: visualiza, practica y domina las listas enlazadas
Las listas enlazadas son una estructura de datos esencial que todo estudiante de algoritmos debe conocer. Su funcionamiento basado en nodos y punteros puede ser complicado al principio, pero con la ayuda de una plataforma de visualización interactiva, el aprendizaje se vuelve intuitivo y entretenido. No solo leerás teoría, sino que podrás manipular la estructura y ver cómo reacciona.
Te invitamos a explorar nuestro módulo de listas enlazadas. Comienza con ejercicios simples y gradualmente aborda problemas más complejos como la detección de ciclos o la inversión in-place. Verás que, después de unas pocas sesiones con la herramienta, los punteros ya no serán un misterio. Y lo mejor: todo el contenido está en español, pensado para estudiantes hispanohablantes como tú.
Recuerda que entender listas enlazadas no solo te servirá para aprobar exámenes, sino que es una habilidad práctica para entrevistas técnicas y para desarrollar software eficiente. ¡Empieza hoy mismo a visualizar y a programar!
Preguntas frecuentes sobre listas enlazadas y la plataforma
¿Necesito instalar algún software? No, la plataforma funciona completamente en el navegador. Solo necesitas conexión a internet.
¿Puedo usarla en mi teléfono móvil? Sí, está adaptada para pantallas táctiles, aunque recomendamos una pantalla más grande para mejor experiencia.
¿Hay ejercicios con listas doblemente enlazadas? Sí, dentro del mismo módulo puedes cambiar el tipo de lista.
¿La plataforma es gratuita? Ofrecemos un nivel gratuito con funcionalidades básicas. Para funciones avanzadas (como exportar escenarios o usar el modo sin conexión), existe una suscripción premium.
¿Cómo reporto un error o sugiero una mejora? Contamos con un formulario de contacto dentro de la plataforma. Nos encanta recibir feedback de estudiantes.
Recursos adicionales para seguir aprendiendo
Además de nuestra plataforma, te recomendamos complementar con:
- Libros: "Estructuras de Datos y Algoritmos" de Weiss o "Introduction to Algorithms" de Cormen (capítulos de listas).
- Cursos online gratuitos como los de MIT OpenCourseWare o Coursera (en español).
- Canales de YouTube especializados en algoritmos con animaciones.
Pero recuerda: la práctica activa supera a la visualización pasiva. Nuestra plataforma te da el control para que seas tú quien manipule la estructura. ¡Aprovecha esa ventaja!
Últimas palabras: la visualización como puente hacia la comprensión
En resumen, la lista enlazada es una estructura lineal poderosa, pero su naturaleza dinámica la hace difícil de imaginar solo con código. Al usar una herramienta de visualización, transformas lo abstracto en concreto. No esperes más: entra a nuestra plataforma, crea tu primera lista enlazada y descubre por qué tantos estudiantes recomiendan este método. Tu viaje en el mundo de las estructuras de datos comienza aquí.
Artículo escrito para el sitio "Visualiza Algoritmos" – tu aliado en el aprendizaje interactivo de estructuras de datos.
🗺️ 查看更多
点击可查看图码支持的所有算法可视化。已更新将近 60个。
第2步:递归的可视化
理解递归需要包含一些抽象思维和对递归树、递归堆栈的理解,所以学习递归相关的算法一直以来都是令人比较头疼的。
通过交互式面板的递归栈窗口,可以直观的观察递归栈的存储情况。
❗️ 注意
如果出现遮挡情况,可以通过拖动递归栈窗口避开遮挡。
或者点击全屏按钮。建议使用全屏,更加沉浸体验可视化过程。
二叉树-递归遍历 | 可视化完整可视化
🔮 代码
运行代码
我们提供的所有代码都是完整可运行的,拒绝伪代码。
您可以点击代码框右上角的复制按钮复制完整代码,可在任意支持C++的编辑器中运行。
推荐使用VS Code,可以在运行环境章节中学习到如何安装C及C++运行环境。
我们关于数据结构和算法的代码均存储在Github 仓库,您可以无限制的访问及使用它。
AI 解析助手
AI 解析功能,指定代码进行逐行解析。通过对大模型精准投喂互联网上的编程教程、文档、考研资料和高校期末考试试题,来提高解析的准确性。
💡 提示
通过鼠标滑选您不理解的代码,进行 AI 解析。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
// Ordenamiento por selección simple
void SelectSort(ElemType A[], int n) {
int i, j, min, temp;
// Bucle externo: recorre desde el primer elemento hasta el penúltimo elemento del arreglo.
for (i = 0; i < n - 1; i++) {
min = i; // 假设当前位置的元素是最小的
// 内循环:从外循环的下一个位置到数组末尾进行遍历
for (j = i + 1; j < n; j++) {
// 检查是否有比当前最小值更小的元素
if (A[j] < A[min]) min = j;
}
// 如果最小值的索引不等于当前位置索引,说明找到了比当前位置更小的元素
if (min != i) {
temp = A[i]; // 临时变量用于交换元素
A[i] = A[min]; // 将当前位置元素与最小值元素交换位置
A[min] = temp; // 更新最小值位置的元素为当前位置元素
}
}
}
int main () {
// 注意,0号位置是哨兵,不是要排序的值
ElemType arr[9] = {20, 60, 30, 10, 40, 90, 80, 70, 50};
SelectSort(arr, 9);
printf("简单选择排序排序结果:");
for (int i = 0; i < 9; i++) {
printf("%d ", arr[i]);
}
return 0;
// 完整代码:https://totuma.cn🌌 插画交互面板
在编者看来数据结构和算法的学习应该是清晰、生动、有趣的。但是很遗憾,市面上大多的教程都是对着板书讲解相关知识点,这样就导致了数据结构的学习过程变得枯燥乏味。我们尝试着用一种新的交互方式来让数据结构和算法的学习变得更加有趣。
通过下方的插画交互面板,您可以很直观的了解到链表的组成结构。
💡 提示
使用鼠标滑入底部的链表 A,您可以分别看到其对应的结构指示。
本书将大量使用这种交互式的提示面板,帮助读者更好的理解内部结构。

链表结构
🔥 价格说明
只要购买VIP,即可解锁全站所有内容,包括后续更新内容(无二次收费)。
目前价格可以说对于网站运营成本都覆盖不了,因此后续肯定会涨价。
如果您觉得图码对您学习数据结构和算法有所帮助,千万不要观望。
我们会在每次更新新文章的时候进行涨价。
已购买的用户不受涨价影响,后续更新内容都可无限制访问。
目前算法可视化工具已更新将近60个,点击此处访问:算法可视化