Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SAOD_Konspekt-I.doc
Скачиваний:
14
Добавлен:
03.11.2018
Размер:
2.32 Mб
Скачать

1. Структуры данных

1.1 Уровни структур данных

Применяются три уровня структур данных:

  1. содержательный,

  2. логический,

  3. физический.

На содержательном уровне структур данных исследуются конкретные объекты обработки, их свойства и отношения между объектами. На этом уровне важны не только значения, но и смысл данных.

На логическом или абстрактном (логические структуры) уровне структура данных считается машинно-независимым логическим понятием, и выделяются следующие задачи: определение массивов данных как объектов исследования, выделение состава массива, определение структуры данных по заданным требованиям, разработка количественных методов оценки эффективности различных видов структур данных.

Физический уровень (физическая структура). На этом уровне рассматриваются память ЭВМ и представление в ней значений (ячейки, разряды ячеек, их адреса и взаимное расположение значений.), т.е. отображение данных в памяти ЭВМ. В общем случае между логической и соответствующей ей физической структурами существует различие, степень которого зависит от самой структуры и особенностей той физической среды, в которой она должна быть отражена.

1.2 Классификация структур данных

Структуры данных можно классифицировать по нескольким различным признакам. Рассмотрим два варианта классификации. По одному их них структуры данных разделяются на несколько категорий (до 7). Рассмотрим эти категории с примерами, соответствующими каждой категории.

Наиболее простым и понятным критерием классификации является сложность структур данных.

По уровню сложности структуры данных разделяются на

  1. простые – обычные переменные или константы языков программирования стандартных типов, а также динамические переменные этих же типов;

  2. наборы однотипных данных – массивы, одно- и многомерные;

  3. интегральные – записи и объекты классов и подобные структуры;

  4. динамические структуры с внутренними связями – списки, деревья, графы.

По способу создания структуры данных можно разделить на

  1. обычные ­– переменные стандартных типов, обычные (т.е. не динамические) массивы, записи и т.п.;

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

С точки зрения архитектуры можно выделить:

  1. линейные структуры ­– одномерные массивы, линейные списки, линейные очереди, стеки;

  2. прямоугольные структуры – двумерные и многомерные массивы;

  3. кольцевые структуры – кольцевые списки, кольцевые очереди, некоторые реализации графов;

  4. ветвящиеся структуры – деревья различных видов, некоторые реализации графов;

  5. сетевые структуры – графы.

В зависимости от наличия или отсутствия связей различают:

  1. несвязные структуры – векторы, массивы, строки, стеки, очереди;

  2. связные – списки, деревья, графы.

В зависимости от постоянства во время работы программы различают:

  1. статические (неизменяющиеся) структуры – переменные различных типов, записи, массивы, в том числе динамические.

  2. динамические (изменяющиеся) – списки, деревья, очереди, стеки, в общем случае графы.

Здесь следует обратить внимание на то, что термин «динамические» употребляется в разных смыслах, и структуры, динамические по способу создания, могут быть статическими по своему поведению. Структуры, динамические по поведению, как правило, оказываются динамическими и по способу создания. Также следует обратить внимание на то, что термин «статические» используется и в некоторых языках программирования, например, в Си и Си++, и там его смысл в значительной степени отличается от подразумеваемого в приведённой классификации.

Следующий критерий классификации достаточно сложно назвать одним или несколькими словами, поэтому сразу приведём его варианты:

  1. данные, создаваемые самим программистом (независимо от способа и времени создания), в англоязычной литературе по программированию часто обозначаемые словом persistent – «устойчивый» («постоянный», «постоянно существующий»). Таким являются структуры всех данных, явно созданных программистом при написании программы;

  2. создаваемые и разрушаемые непосредственно во время работы программы без участия программиста, обычно во вспомогательных целях, например, при несовпадении типов данных в каких-либо операциях. Для них используется термин transient – «преходящий», «временный». Их действительно можно коротко назвать временными, поскольку они обычно уничтожаются сразу после их использования. Как правило, такие данные, как объекты в программе, являются безымянными. В некоторых языках программирования, например, Си++, такими данными могут быть данные любых типов. О временных структурах часто говорят, что они создаются не программистом, а самим компилятором (ещё один вариант – компилятор строит код программы так, чтобы эти данные были созданы и разрушены в нужные моменты работы программы).

По месту размещения:

  1. существующие в памяти ЭВМ (или внутренние) – ими могут быть все ранее рассмотренные примеры структур данных;

  2. хранящиеся на внешних носителях (внешних ЗУ) – файлы и системы файлов.

Приведём ещё один вариант классификации структур данных, совпадающий до некоторой степени с рассмотренным и представленный на рисунках:

Рис. 1.1. Простые статические структуры данных

Рис. 1.2. Составные статические структуры данных

Рис. 1.3. Динамические структуры данных

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]