Описываются методы построения и использования сложных структур данных: стеки, деревья, графы; нетрадиционные представления данных, в частности функциональное представление. Рассматриваются различные алгоритмы обработки этих структур на простых примерах программ. Изложение осуществляется на основе объектно-ориентированного подхода с использованием языка программирования C++. Показано, как тот или иной выбор решения задач влияет на эффективность и выразительность программ. Приводится большое количество текстов программ, иллюстрирующих рассматриваемые алгоритмы.