Estruturas de Dados e Algoritmos em Java, tem como objectivo fornecer uma competência sólida no desenvolvimento de programas de média e elevada complexidade e um conhecimento profundo sobre estruturas de dados avançadas e algoritmos complexos, usando a linguagem de programação Java e aplicando o paradigma da programação orientada a objectos. Assim, utiliza uma metodologia que dá particular ênfase à decomposição funcional das soluções, através da implementação de tipos de dados abstractos. Para atingir este objectivo, ele está organizada em cinco grandes temas:
O estudo do paradigma da programação orientada a objectos na linguagem Java, sendo apresentados os seus aspectos fundamentais para implementar tipos de dados abstractos concretos e genéricos paramétricos, nomeadamente, as metodologias de programação defensiva e por contrato e o lançamento de excepções;
O estudo das principais estruturas de dados dinâmicas, sendo apresentados os algoritmos de pesquisa, inserção e remoção, das listas simplesmente ligadas (singly linked lists), das listas duplamente ligadas (doubly linked lists), das listas ligadas com atalhos (skip lists), das árvores binárias de pesquisa (binary search trees), das árvores equilibradas em altura, como são o caso das árvores de Adelson-Velskii Landis (AVL trees), das árvores RubiNegras (red black trees) e das árvores autoequilibradas (splay trees) e dos amontoados binários (binary heaps);
O estudo das principais classes de algoritmos, tendo em consideração a sua complexidade. São apresentados, nomeadamente, algoritmos recursivos importantes, incluindo a exploração de soluções com retrocesso (backtracking), algoritmos de pesquisa (sequencial, binária, ternária, por interpolação e por dispersão), algoritmos de selecção (maior valor, menor valor, K-ésimo menor valor), algoritmos de ordenação (por selecção, por troca, por inserção, por fusão e por separação), algoritmos de pesquisa exaustiva e algoritmos numéricos;
O estudo da implementação dos diferentes tipos de memórias, designadamente, da memória fila (Queue), da memória pilha (Stack), da memória associativa (Content Access Memory) e da memória fila com prioridade (Priority Queue), e dos algoritmos associados para pesquisa, inserção e remoção de informação;
O estudo do tipo de dados abstracto grafo (digrafo) (Graph-Digraph), com especial destaque para a implementação dinâmica baseada em listas ligadas, e dos seus algoritmos mais importantes, como sejam, as travessias em largura e em profundidade, a ordenação topológica, a detecção de componentes fortemente conexas, a determinação de caminhos mais curtos (Dijkstra), a geração da árvore abrangente de custo mínimo (Prim e Kruskal) e os caminhos e circuitos hamiltonianos e eulerianos.
Este livro é dirigido aos estudantes de disciplinas de programação, que frequentam licenciaturas que exijam conceitos sólidos de programação, de um conhecimento profundo sobre algoritmos e estruturas de dados avançadas e da implementação de tipos de dados abstractos na linguagem Java.