Данный сайт рассчитан на тех, кто уже умеет писать программы на каком-либо высокоуровневом языке программирования, но хотел бы повысить свой уровень программирования за счёт преобретения новых знаний и умений в области технологии работы со сложными структурами программ и данных. Материалы сайта основаны на одной из лучших книг по решению традиционных задач проектирования программ и собственно программирования - Кубенский А.А. “Структуры и Алгоритмы обработки данных”. Сайт представляет собой электронную версию книги, его разделы полностью соответствуют главам книги. Далее вашему вниманию предлагается краткий анонс книги.

Книга состоит из 8 глав. Условно ее можно разделить на 2 основные части. В первой части, состоящей из двух глав, приведено описание базовых струк­тур данных и алгоритмов; во второй, состоящей из 6 глав, - описанные структуры данных и алгоритмы применяются для решения различных задач и описания других более сложных алгоритмов.

В главе 1 (Способы представления структур данных) книги вводятся структуры данных, используемые затем на протяжении всего дальнейшего изложения. Описаны способы представления в языках программирования таких известных структур данных, как массивы (с фиксированными и плавающими границами), списки, деревья, множества и графы.

В главе 2 (Базовые алгоритмы) вводится понятие абстрактного типа данных, активно использующееся затем на протяжении всей книги, а также приведены базовые алгорит­мы обработки стеков и деревьев. Разд. 2.2 этой главы содержит также описа­ние некоторых алгоритмов сортировки массивов.

В главе 3 (Обработка текстов) вводится еще один из основных типов данных - строка. Приводят­ся примеры способов представления строк, отвечающие различным потреб­ностям в написании алгоритмов обработки строк.

Глава 4 (Символьные преобразования) целиком посвящена символьным преобразованиям выражений. Вы­бор именно этих алгоритмов обусловлен личным интересом к ним автора, однако выражения оказываются очень простым и удобным материалом, на котором можно продемонстрировать многие интересные подходы и приемы программирования.

Глава 5 (Алгоритмы распределения памяти) посвящена системам распределения памяти. Алгоритмы распределе­ния памяти не только могут служить хорошим примером использования разнообразных структур данных, но и сами по себе имеют важное прикладное значение. Подробно объяснено, как использовать собственную систему рас­пределения и управления памятью для хранения объектов, создаваемых в программах на C++.

В главе 6 (Алгоритмы обработки графов) приведены примеры некоторых классических алгоритмов обработ­ки графов. Опять, не претендуя на полноту описания, автор выбрал некото­рые из достаточно простых и, на его взгляд, интересных алгоритмов. Это ал­горитмы нахождения кратчайших путей между вершинами в графе, а также алгоритмы нахождения минимальных остовных деревьев (скелетов) графа.

Глава 7 (Обмен сообщениями и обработка сообщений) посвящена технологии построения программ, в которой основу программы составляют объекты, обменивающиеся между собой сообщениями. Обычно такая технология применяется только для построения очень больших программ, таких как операционные системы, системы программирования и т. п. Достаточно назвать в качестве примера операционную систему MS Windows. Тем не менее в этой главе приведены примеры достаточно про­стых программ, в которых применение этого подхода также может быть оп­равдано, хотя, конечно, существуют и более простые способы решения при­водимых в этой главе задач.

Наконец, в главе 8 (Функции как носитель информации) приводится один из нетрадиционных способов представления информации - функциональное представление. Такое представление чаще всего используется в функциональном программировании, однако даже в традиционных императивных языках можно использовать некоторые из подходов и приемов функционального программирования. Часто это дает возможность получать необыкновенно короткие и изящные программы для решения сложных задач. Опять для приведенных в этой главе задач, навер­ное, можно и даже лучше использовать другие подходы, однако я хочу не столько продемонстрировать готовое решение, сколько подход, который мо­жет использоваться в более сложных случаях.