Estruturas de Dados Domine as práticas essenciais em C, Java, C#, Python e JavaScript
Thiago Leite e CarvalhoSobre o livro
É muito comum iniciantes no mundo da computação terem dificuldades no entendimento dos conceitos sobre estruturas de dados. Geralmente, isso é decorrente de um maior nível de abstração exigido para compreender o funcionamento de tais estruturas, nível que nem sempre se está preparado para assimilar e compreender. Outro fator recorrente é que mesmo pessoas com certo "nível avançado" na computação também têm dificuldade de utilizar as estruturas de dados existentes de forma efetiva e satisfatória, sendo isso um efeito colateral também relativo à dificuldade de assimilação e compreensão.
Somada a essas "questões pessoais", ainda temos a dificuldade de encontrar livros dedicados em apresentar e explicar tais estruturas de forma minuciosa e focada, assim como todos os conceitos que também fazem parte do universo das estruturas de dados. Tudo isso termina por dificultar a aplicação adequada das estruturas de dados no desenvolvimento de software. Por fim, se for acrescido a estes problemas o fato de que cada linguagem tem suas próprias implementações de tais estruturas, temos um grande problema que pode ocasionar graves erros no processo de codificação.
É com base nesses fatos que este livro tem como principal intuito expor, da forma mais didática e simplificada possível, todos os conceitos pertences às estruturas de dados. Para atingir este objetivo, o livro é dividido em duas partes:
* Parte 1 - Dentro da Matrix: Nesta primeira parte, as "entranhas" das estruturas de dados serão expostas para conseguirmos compreender seus funcionamentos e aplicabilidades.
* Parte 2 - O mundo real: Após os fundamentos terem sido expostos, é apresentado como as principais linguagens do mercado (Java, C#, Python e JavaScript) implementam tais estruturas. Nessa parte, toda a API destas linguagens são exploradas para facilitar o uso das estruturas de dados.
É válido ressaltar que, para facilitar o alcance destes objetivos, este livro foca exclusivamente nas estruturas de dados. Ou seja, um conceito recorrentemente exposto de forma conjunta como busca e ordenação não estará presente neste livro. Todavia, ele pode ser encontrado em literaturas específicas de algoritmos e complexidade de algoritmos. Outra observação relevante ao modo como este livro é organizado é o fato de que, na Parte 1, as explicações sobre as teorias das estruturas de dados são mais detalhadas; por outro lado, na Parte 2, que foca nas linguagens, apenas focamos na definição e no uso de tais estruturas. Assim, temos a possibilidade de explorar algumas nuanças de cada linguagem para tais estruturas.
Por fim, os códigos de exemplos e exercícios da Parte 1 deste livro são feitos na linguagem C usando a ferramenta Eclipse IDE for C/C++ Developers. Tal escolha vem do fato de que, com esta linguagem, conseguimos apresentar de forma mais minuciosa como a implementação das estruturas ocorrem em suas entranhas.
Este livro não é um "curso de C", então é de se esperar que o leitor já tenha um conhecimento prévio desta linguagem, pois muitos dos detalhes do uso dela não são explicados. Todavia, alguns dos conceitos presentes em C e que são relevantes para o livro são explicados de forma mais detalhada em alguns apêndices. Caso necessário, leia-os.
Também é válido frisar que, quando as estruturas de dados nas linguagens Java, C#, Python e JavaScript forem expostas, elas serão integralmente apresentadas nestas linguagens, através de códigos nativos de tais linguagens ou implementadas "à mão", caso necessário. Os códigos nestas linguagens foram criados de forma a facilitar ao máximo o entendimento deles. Talvez, com o passar do tempo, note-se que eles podem ser melhorados — e sugiro isso como exercício. Todos os códigos (completos e relevantes) aqui expostos estarão no meu perfil do GitHub (em https://github.com/thiagoleiteecarvalho), nos repositórios que iniciam com "ed".
Espero que a leitura seja agradável e enriquecedora. Com a ajuda da Casa do Código, trabalhei de forma árdua para explicar, da forma mais amigável e instigante, os conceitos das estruturas de dados. Este livro é a realização de um projeto que visa fornecer bases sólidas para o uso e entendimento delas. Agradeço a escolha deste livro.
Prefácio
As estruturas de dados são fundamentais para qualquer pessoa desenvolvedora, pois são a base para a construção de algoritmos eficientes e sistemas computacionais robustos. Elas permitem a programadores e programadoras armazenarem e manipularem dados de forma organizada e otimizada, o que resulta em programas mais rápidos e eficientes. Além disso, as estruturas de dados são essenciais para a solução de problemas complexos em diversas áreas, como na inteligência artificial, onde pode ser usada em Machine Learning; no processamento de imagens, para a detecção de padrões; na análise de dados, para avaliações quantitativas e analíticas; na Engenharia de Software, para a construção de soluções que visam à automatização de atividades e processos, entre diversas outras. Ou seja, qualquer que seja o curso (Engenharia da Computação, Análise e Desenvolvimento de Sistemas ou Ciência da Computação), as Estruturas de Dados são uma teoria essencial para a formação de profissionais. Portanto, um entendimento eficaz das estruturas de dados é crucial para que os profissionais da área de computação desenvolvam habilidades sólidas e estejam preparados para enfrentar os desafios cada vez mais complexos na área da Tecnologia da Informação.
Conheço o Thiago desde 2001 e venho acompanhando o seu caminhar desde a época da universidade, quando ele foi meu aluno nas disciplinas de Estruturas de Dados e Pesquisa Operacional. Atualmente somos colegas de trabalho: em 2012, comecei a trabalhar na mesma empresa que ele. Thiago sempre se destacou no desenvolvimento na linguagem C e em Java com Orientação a Objetos e, por isso, já foi convidado a ministrar em empresas e universidades diversos cursos, como Java, Hibernate, Spring, entre outros. Também já trabalhou com a plataforma .Net por 4 anos.
Com o início da carreira de professor universitário, juntamente com os anos de experiência em desenvolvimento, ele percebeu a dificuldade de seus alunos e alunas – e até mesmo de profissionais com experiência em programação – de realmente compreenderem e aplicarem os conceitos práticos de Estruturas de Dados. Essas pessoas cometiam falhas na escolha das estruturas de dados mais adequadas e eficientes para a resolução de problemas específicos. Ele também percebeu que existia uma lacuna de textos didáticos, focados em explicar detalhadamente as estruturas de dados clássicas e também em abordá-las nas principais linguagens que o mercado utiliza. Por tudo isso, ele resolveu escrever este livro.
Thiago teve o cuidado de selecionar as principais e mais utilizadas estruturas de dados e apresentar, de forma clara e objetiva, os principais conceitos de cada uma delas. Além de vários exemplos (códigos) explicados de forma minuciosa, são apresentadas também implementações em várias linguagens de programação. A linguagem C é a mais utilizada no decorrer do livro, mas também são exploradas as linguagens Java, C#, Python e JavaScript. A organização dos conceitos de forma fluida e gradativa facilita o aprendizado e desmistifica a complexidade atribuída a esse assunto.
Um grande diferencial deste livro é que ele aborda as estruturas de dados (ED) de forma simples, concisa e com exemplos do nosso dia a dia, mostrando que elas são mais naturais do que imaginamos. O livro inicia com conceitos básicos e inerentes a Estruturas de Dados e Computação, passando pelas EDs mais básicas e seguindo até as mais avançadas. Nessa trilha, sempre são fornecidos textos e códigos comentados com o intuito de facilitar a absorção do conteúdo. Para finalizar, vários exercícios são apresentados para complementar o aprendizado e todos eles estão resolvidos e disponíveis para leitores e leitoras.
Tenho certeza de que, ao terminar a leitura deste livro, você será uma pessoa desenvolvedora diferenciada e mais preparada para usar as estruturas de dados da melhor forma possível. Embarque com Thiago nesta desafiadora e engrandecedora caminhada de como organizar os dados e ter melhor desempenho nos seus algoritmos. Boa leitura!
— Maikol Magalhães Rodrigues
Sumário
- Parte 1: Dentro da Matrix
- 1 Introdução
- 2 Conceitos básicos
- 2.1 O que é dado?
- 2.2 O que é estrutura?
- 2.3 O que são estruturas de dados?
- 2.4 O que é informação?
- 2.5 O que é TD e TAD?
- 2.6 O que é um ponteiro?
- 2.7 Memória
- 2.8 Resumo
- 3 Vetor e Matriz
- 3.1 Fundamentos
- 3.2 Vetores
- 3.3 Matrizes
- 3.4 Exercícios
- 4 Pilha
- 4.1 Fundamentos
- 4.2 Operações
- 4.3 Implementação
- 4.4 Exemplos de uso
- 4.5 Exercícios
- 5 Fila
- 5.1 Fundamentos
- 5.2 Operações
- 5.3 Tipos de fila
- 5.4 Implementação
- 5.5 Exemplos de uso
- 5.6 Exercícios
- 6 Lista
- 6.1 Fundamentos
- 6.2 Operações
- 6.3 Tipos de listas
- 6.4 Implementação
- 6.5 Exemplos de uso
- 6.6 Exercícios
- 7 Vetor/Matriz vs. Pilha vs. Fila vs. Lista
- 8 Árvore
- 8.1 Fundamentos
- 8.2 Operações
- 8.3 Tipos de árvores
- 8.4 Ordenação
- 8.5 Implementação
- 8.6 Exemplos de uso
- 8.7 Exercícios
- 9 Grafo
- 9.1 Fundamentos
- 9.2 Operações
- 9.3 Tipos de grafos
- 9.4 Representações
- 9.5 Problemas clássicos
- 9.6 Algoritmos importantes
- 9.7 Exemplos de uso
- 9.8 Só isso sobre grafos?
- 10 Outras estruturas de grande relevância
- 10.1 Set (conjunto)
- 10.2 Tabela de dispersão (Hashtable)
- 10.3 Heap
- Parte 2: O mundo real
- 11 Estruturas de Dados em Java
- 11.1 Vetor e Matriz
- 11.2 Pilha
- 11.3 Fila
- 11.4 Lista
- 11.5 Árvore
- 11.6 Set
- 11.7 Tabela de dispersão (Hashtable)
- 12 Estruturas de Dados em C#
- 12.1 Vetor e Matriz
- 12.2 Pilha
- 12.3 Fila
- 12.4 Lista
- 12.5 Árvore
- 12.6 Set
- 12.7 Tabela de dispersão (Hashtable)
- 13 Estruturas de Dados em Python
- 13.1 Vetor e Matriz
- 13.2 Pilha
- 13.3 Fila
- 13.4 Lista
- 13.5 Árvore
- 13.6 Set
- 13.7 Tabela de dispersão (Hashtable)
- 13.8 Tuple
- 14 Estruturas de Dados em JavaScript
- 14.1 Vetor e Matriz
- 14.2 Pilha
- 14.3 Fila
- 14.4 Lista
- 14.5 Árvore
- 14.6 Set
- 14.7 Tabela de dispersão (Hashtable)
- Parte 3: Conclusão e apêndices
- 15 Chegamos ao fim
- 16 Referências bibliográficas
- 16.1 Livros
- 16.2 Links
- 17 Apêndice I: Ponteiro em C
- 18 Apêndice II: Struct em C
- 19 Apêndice III: Funções nativas
- 20 Apêndice IV: Recursividade
Dados do produto
- Número de páginas:
- 320
- ISBN:
- 978-85-5519-338-5
- Data publicação:
- 06/2023. Atualizado em 02/2024.