O livro Estruturas de Dados e Algoritmos em C 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 C e aplicando o paradigma da programação modular. 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 quatro grandes temas:
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), [3.ª edição] das árvores rubinegras (red-black trees), [3.ª edição] das árvores autoequilibradas (sply 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) e algoritmos de ordenação (por selecção, por troca, por inserção, por fusão e por separação), [3.ª edição] algoritmos de pesquisa exaustiva e algoritmos numéricos;
O estudo da implementação dos diferentes tipos de memórias, designadamente, da memória de acesso aleatório (Random Access Memory), 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/dígrafo (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 detecção dos vértices alcançáveis, a determinação de caminhos mais curtos (Dijkstra, Bellman-Ford e Floyd), o fecho transitivo (Warshall), a geração da árvore abrangente de custo mínimo (Prim e Kruskal) e [3.ª edição] a determinação de 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 C.