0.1 如何使用图码
图码旨在创建一个可以直观地学习编程、数据结构和算法的平台。
通过易于理解的交互式动画使复杂的算法变得简单易懂。
无论你的算法功底如何,都会使你受益颇多。
🌇 本站的特色
1.可视化电子书
- 全书每个数据结构和算法都拥有交互式动画,系统化的讲解相关知识点,内容清晰易懂、学习曲线平滑。
- 交互式面板不是一个简单的视频或者 GIF,而是一个交互式页面,所有算法都可自定义输入数据。
- 提供的代码均为C、C++,包含main函数,拒绝伪代码。符合国内高校考试要求,以及上机实操。
2.精编算法可视化
我们目前已经编写了将近60+的算法可视化,所有代码都是按照考研408中的数据结构规范编写。
3.自定义代码可视化
除了上述精编的可视化外,你还可以使用我们的可视化算法编辑器,它可以将任意代码进行可视化,帮助你更好地理解代码的执行流程和变量的变化。
目前已经支持: CC++JavaJavaScriptPythonRuby 6种不同的编程语言
👩🏻💻 如何使用算法可视化
第1步:认识可视化面板
可视化面板分为三个部分动画窗口代码窗口操作栏
点击下方可视化面板操作栏的头插法创建->创建 您可以看到对于单链表头插的执行流程动画,以及右边当前动画步骤对应的代码行
💡 提示
建议动画开始后点击暂停,通过下一步按钮一步步的查看代码运行过程。
这样可以更好的观察当前动画对应的代码以及变量情况。
单链表-带头结点 | 可视化完整可视化
0.1 Como usar o Tuma - Tutorial de Estruturas de Dados e Algoritmos Visualize seu código com animações
O que é uma Lista Linear Encadeada (Linked List) em Estruturas de Dados?
Uma lista linear encadeada, conhecida em inglês como linked list, é uma estrutura de dados fundamental no estudo de algoritmos e programação. Diferente de um array tradicional, onde os elementos são armazenados em posições consecutivas na memória, uma lista encadeada organiza seus elementos de forma dinâmica. Cada elemento, chamado de nó, contém dois campos principais: o dado que se deseja armazenar e um ponteiro (ou referência) que aponta para o próximo nó da sequência. Essa característica permite que a lista cresça ou diminua de tamanho durante a execução do programa, sem a necessidade de realocar grandes blocos de memória. Para estudantes de ciência da computação e entusiastas de programação, compreender o funcionamento das listas encadeadas é um passo crucial para dominar tópicos mais avançados, como árvores, grafos e tabelas hash. Em plataformas de visualização de algoritmos, como a nossa, é possível ver exatamente como cada ponteiro se conecta, tornando o aprendizado muito mais intuitivo e visual.
Princípios Fundamentais da Lista Encadeada
O princípio central de uma lista encadeada é a conexão entre nós. Imagine uma corrente onde cada elo está ligado ao próximo. Se você quiser adicionar um novo elo no meio, não precisa quebrar toda a corrente; basta ajustar as conexões dos elos vizinhos. Em termos técnicos, isso significa que a inserção e remoção de elementos em uma lista encadeada podem ser muito eficientes, especialmente no início ou no meio da lista. Existem variações importantes: a lista simplesmente encadeada onde cada nó aponta apenas para o próximo; a lista duplamente encadeada onde cada nó aponta tanto para o próximo quanto para o anterior; e a lista circular onde o último nó aponta de volta para o primeiro. Cada variação tem suas vantagens em termos de performance e complexidade de implementação. Ao usar um visualizador interativo, o aluno pode clicar em cada nó para ver como os ponteiros mudam durante operações como inserção, remoção e busca, solidificando o entendimento teórico com prática visual.
Características Técnicas e Vantagens da Lista Encadeada
Uma das principais vantagens da lista encadeada sobre o array é a alocação dinâmica de memória. Enquanto um array tem tamanho fixo (a menos que seja redimensionado manualmente), uma lista encadeada pode crescer ou encolher conforme necessário. Isso evita o desperdício de memória ou a falta dela. Outra vantagem é a inserção e remoção eficientes. Inserir um elemento no início de uma lista encadeada é uma operação de tempo constante O(1), enquanto em um array isso exigiria deslocar todos os outros elementos, uma operação O(n). No entanto, a lista encadeada tem desvantagens: o acesso aleatório é ineficiente. Para acessar o quinto elemento, você precisa percorrer a lista a partir do primeiro nó, uma operação O(n). Em arrays, o acesso é direto e instantâneo O(1). Além disso, cada nó consome memória extra para armazenar o ponteiro, o que pode ser um problema em sistemas com recursos limitados. A plataforma de visualização ajuda a entender esses trade-offs ao mostrar, em tempo real, quantos passos são necessários para cada operação.
Desvantagens e Limitações das Listas Encadeadas
Apesar de suas vantagens, as listas encadeadas não são a solução ideal para todos os problemas. A principal limitação é a falta de localidade de referência. Como os nós estão espalhados pela memória, o cache do processador não é tão eficiente quanto em arrays, onde os dados estão em sequência. Isso pode tornar a iteração sobre uma lista encadeada mais lenta na prática, mesmo que teoricamente seja O(n) em ambos os casos. Outro ponto é a complexidade de implementação. Gerenciar ponteiros requer cuidado; um erro pode criar loops infinitos ou perder dados (memory leak). Para iniciantes, isso pode ser frustrante. Por isso, nossa ferramenta de visualização é essencial: ela permite que você veja exatamente o estado de cada ponteiro após cada operação, facilitando a depuração lógica. Além disso, a lista encadeada não suporta acesso indexado diretamente; você não pode fazer "lista[3]" como em um array. Precisa percorrer manualmente. Essas limitações são discutidas em detalhes nos tutoriais interativos da plataforma.
Aplicações Práticas da Lista Encadeada no Mundo Real
Listas encadeadas são usadas em inúmeras aplicações do dia a dia. O sistema de navegação "voltar" e "avançar" do seu navegador é um exemplo clássico de uma lista duplamente encadeada. Cada página visitada é um nó, e os ponteiros "anterior" e "próximo" permitem navegar pelo histórico. Outro exemplo é o reprodutor de música com uma lista de reprodução. Você pode pular para a próxima música ou voltar para a anterior; isso é uma lista duplamente encadeada (ou circular, se a lista se repetir). Em sistemas operacionais, o escalonador de processos frequentemente usa listas circulares para distribuir tempo de CPU entre processos. Além disso, implementações de tabelas hash (hash tables) usam listas encadeadas para tratar colisões (separate chaining). Em editores de texto, a lista encadeada de linhas permite inserir e deletar linhas sem realocar o documento inteiro. Ao visualizar esses cenários na plataforma, você conecta a teoria abstrata a aplicações concretas, o que acelera o aprendizado.
Operações Básicas em uma Lista Encadeada
As operações fundamentais em uma lista encadeada incluem inserção (no início, no fim ou em uma posição específica), remoção, busca e percurso (travessia). Cada uma tem complexidades diferentes. Inserir no início é O(1) porque você apenas cria um novo nó e ajusta o ponteiro "head". Inserir no fim pode ser O(n) se você não tiver um ponteiro para o último nó (tail). A remoção de um nó específico também requer encontrar o nó anterior, o que pode ser O(n). A busca por um valor é sempre O(n) no pior caso. A plataforma de visualização permite que você execute cada uma dessas operações passo a passo, vendo como os ponteiros se movem. Por exemplo, ao inserir um nó no meio, você verá como o ponteiro do nó anterior é redirecionado para o novo nó, e o novo nó aponta para o próximo. Isso elimina a abstração e mostra a mecânica real por trás do código.
Lista Simplesmente Encadeada vs. Lista Duplamente Encadeada
A escolha entre uma lista simplesmente encadeada (singly linked list) e uma duplamente encadeada (doubly linked list) depende das necessidades do projeto. Na lista simples, cada nó tem um único ponteiro para o próximo nó. Isso economiza memória (um ponteiro a menos por nó) e é suficiente para aplicações onde você só precisa percorrer a lista em uma direção. No entanto, a remoção de um nó exige que você conheça o nó anterior, o que pode exigir uma busca adicional. Na lista duplamente encadeada, cada nó tem dois ponteiros: um para o próximo e um para o anterior. Isso permite percorrer a lista em ambas as direções e facilita a remoção de um nó, pois você tem acesso direto ao nó anterior. A desvantagem é o maior consumo de memória e a complexidade extra na manutenção dos ponteiros. A plataforma de visualização permite alternar entre os dois tipos e comparar visualmente como as operações diferem, ajudando você a decidir qual usar em cada situação.
Lista Circular: Quando o Último Aponta para o Primeiro
A lista circular é uma variação onde o último nó aponta de volta para o primeiro, formando um ciclo. Isso é útil em situações onde você precisa percorrer a lista repetidamente sem chegar a um fim, como em escalonamento round-robin em sistemas operacionais. Em uma lista circular, não há um "null" no final; todos os nós estão conectados em um loop. A implementação pode ser simplesmente encadeada ou duplamente encadeada. A vantagem é que você pode começar de qualquer ponto e percorrer todos os elementos sem se preocupar com o final. A desvantagem é que é preciso cuidado para não criar loops infinitos durante a busca. O visualizador da plataforma mostra claramente o ciclo, destacando como o ponteiro do último nó se conecta ao primeiro, facilitando a compreensão desse conceito que muitos alunos acham confuso.
Como a Visualização Interativa Ajuda no Aprendizado de Listas Encadeadas
Estudos em ciência cognitiva mostram que a visualização dinâmica melhora significativamente a retenção de conceitos abstratos. Nossa plataforma de visualização de algoritmos foi projetada especificamente para transformar código estático em animações interativas. Para listas encadeadas, você pode:
1. Ver a memória em ação: Cada nó é representado como um bloco visual com campos de dado e ponteiro. Você vê exatamente onde cada ponteiro aponta.
2. Executar passo a passo: Avance e retroceda em cada operação (inserir, remover, buscar). Veja os ponteiros sendo atualizados em tempo real.
3. Modificar o código: Escreva seu próprio código em Python, Java ou C++ e veja a visualização correspondente. Isso conecta a sintaxe à semântica visual.
4. Comparar estruturas: Coloque lado a lado uma lista encadeada e um array para ver as diferenças de desempenho em operações como inserção no início.
5. Depurar erros: Se seu código tiver um bug (como um ponteiro nulo), a visualização mostra exatamente onde a falha ocorre, facilitando a correção.
Funcionalidades Exclusivas da Nossa Plataforma de Visualização
Nossa ferramenta vai além de simples animações. Ela oferece recursos pedagógicos avançados para maximizar o aprendizado:
Controles de velocidade: Acelere ou desacelere a animação para acompanhar no seu ritmo.
Destaque de complexidade: A cada operação, a plataforma mostra a notação Big O (O(1), O(n)) e conta o número de passos reais executados.
Simulação de casos extremos: Teste o comportamento da lista quando está vazia, com um único elemento ou com muitos elementos.
Exportação de estado: Salve o estado atual da lista para compartilhar com colegas ou retomar depois.
Modo desafio: Resolva problemas práticos (como inverter uma lista) usando a interface visual, sem escrever código.
Essas funcionalidades transformam o estudo passivo em uma experiência ativa e envolvente, ideal para quem está se preparando para entrevistas técnicas ou provas de faculdade.
Passo a Passo: Usando a Plataforma para Estudar Listas Encadeadas
Para começar a usar nossa ferramenta de visualização com listas encadeadas, siga este guia simples:
Passo 1: Acesse a seção "Estruturas de Dados" e selecione "Lista Encadeada". Você verá uma interface com um canvas vazio e um painel de controle.
Passo 2: Clique em "Inserir no Início" algumas vezes para adicionar nós. Observe como novos blocos aparecem à esquerda e o ponteiro "head" é atualizado.
Passo 3: Use o botão "Remover do Fim" e veja como o ponteiro do penúltimo nó muda para null.
Passo 4: Ative o modo "Mostrar Código" para ver o código equivalente em Python sendo gerado automaticamente enquanto você manipula a lista visual.
Passo 5: Altere o tipo para "Lista Duplamente Encadeada" e repita as operações. Note os novos ponteiros "anterior" aparecendo.
Passo 6: Experimente o modo "Busca": digite um valor e veja a animação percorrer cada nó até encontrar ou não o valor.
Esse processo interativo reduz o tempo de aprendizado pela metade, segundo feedback de nossos usuários.
Por Que a Visualização é Essencial para Quem Estuda Algoritmos
Muitos alunos cometem o erro de apenas ler teoria e tentar implementar código sem entender profundamente o mecanismo. A visualização preenche essa lacuna. Quando você vê um ponteiro sendo alterado, o conceito de "referência" se torna concreto. Quando você observa a complexidade O(n) em uma busca, entende por que arrays são melhores para acesso aleatório. Nossa plataforma foi construída com base em princípios de aprendizagem multimídia, combinando texto, imagem e animação para atender diferentes estilos de aprendizado. Para estudantes de português (PT), oferecemos toda a interface e tutoriais no seu idioma, garantindo que a barreira linguística não atrapalhe o entendimento de conceitos já complexos. Além disso, a plataforma é gratuita para uso educacional, permitindo que qualquer pessoa, de qualquer lugar, possa praticar.
Dicas para Dominar Listas Encadeadas com Nossa Ferramenta
Para tirar o máximo proveito da plataforma, recomendamos uma abordagem estruturada:
1. Comece pelo básico: Domine a inserção e remoção no início e no fim antes de tentar operações no meio.
2. Desenhe antes de codificar: Use a ferramenta de visualização para desenhar manualmente a lista e prever como os ponteiros vão mudar. Depois, execute a operação para verificar.
3. Compare com arrays: Use o modo de comparação lado a lado para ver as diferenças de desempenho em tempo real.
4. Resolva problemas clássicos: Tente implementar visualmente a inversão de uma lista, a detecção de ciclos (algoritmo de Floyd) ou a mesclagem de duas listas ordenadas.
5. Repita até automatizar: A prática leva à perfeição. Repita as operações até que você consiga prever o estado da lista sem olhar.
Seguindo essas dicas, você estará preparado para enfrentar questões de estruturas de dados em entrevistas técnicas das maiores empresas de tecnologia.
Conclusão: A Lista Encadeada é a Base para Estruturas Mais Complexas
Dominar listas encadeadas não é apenas um objetivo em si, mas um pré-requisito para entender estruturas de dados mais avançadas, como pilhas, filas, árvores binárias e grafos. Muitos algoritmos de ordenação e busca dependem de manipulação eficiente de ponteiros. Nossa plataforma de visualização foi criada para tornar essa jornada de aprendizado mais suave e eficaz. Ao invés de lutar com abstrações, você interage com o algoritmo, vê cada movimento e constrói intuição. Convidamos você a experimentar a ferramenta hoje mesmo. Explore a seção de listas encadeadas, teste as operações, modifique o código e veja o poder do aprendizado visual. Com dedicação e as ferramentas certas, você não apenas entenderá listas encadeadas, mas se sentirá confiante para enfrentar qualquer desafio de algoritmos que aparecer.
🗺️ 查看更多
点击可查看图码支持的所有算法可视化。已更新将近 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
// Ordenação por Seleção Simples
void SelectSort(ElemType A[], int n) {
int i, j, min, temp;
// Loop externo: percorre do primeiro elemento até o penúltimo elemento do array
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个,点击此处访问:算法可视化