Nosso objetivo ao escrever este livro foi combinar uma ênfase forte na resolução de problemas e no projeto de software com o estudo das estruturas de dados. Para atingir esse fim, discutimos aplicações de cada estrutura de dados para motivar seu estudo. Após fornecer a especificação (interface) e a implementação (uma classe Java), abordamos então estudos de caso que usam a estrutura de dados para resolver um problema relevante. Os exemplos incluem um catálogo telefônico que usa um vetor e uma lista, a avaliação de expressão pós-fixada usando uma pilha, simulação de um guichê de uma companhia aérea usando uma fila e a codificação de Huffman usando uma árvore binária e uma fila priorizada. Na implementação de cada estrutura de dados e nas soluções para os estudos de caso, reforçamos a mensagem "Pense, então codifique" executando uma análise completa do problema e, em seguida, projetando cuidadosamente uma solução (usando pseudocódigo e diagramas de classe UML) antes da implementação. Também fornecemos uma análise de desempenho quando apropriado. Os leitores conseguirão compreender por que estruturas de dados diferentes são necessárias, e conhecerão as aplicações para as quais elas são apropriadas e as vantagens e desvantagens de suas possíveis implementações.