Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
43
Добавлен:
23.03.2015
Размер:
860.67 Кб
Скачать

Таблицы

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

Ошибка! Неизвестный аргумент ключа.

Пример таблицы для организации доступа по имени

в которой каждая строка-запись состоит из двух полей: поля ключа (имени) и поля тела записи (адреса).

Основные операции, выполняемые над таблицами, определяются следующим набором операций:

  • поиск записи (по одному или нескольким ключам);

  • вставки записи (с контролем возможных повторений);

  • удаления записи.

Операции вставки и удаления записей служат для формирования требуемого набора записей; операция поиска записи по ключу обеспечивает доступ по имени (ключу) к записям таблицы.

Деревья

Элемент такой структуры (узел дерева) определяется как запись, содержащая несколько полей ссылок. Например:

 Type Point = ^ Item;

              Item = Record

              Data: Integer;

              Right, Left: Point

   End;

 

 

Type                                                                

        Link = ^ TreeVert;

       TreeVert = Record

       Data: Real;

        Key : Integer;

        Left,  Middle,  Right : Link

End;

Количество ссылочных полей узла дерева называется степенью ветвления (арностью) узла.

Таким образом, дерево может быть либо вырожденным (Nil), либо составлено из узла дерева, все указатели которого выставлены на деревья. В этом случае узел называют корнем дерева, а деревья, на которые выставлены указатели - поддеревьями. Если поддерево состоит из одного узла, все указатели которого установлены на Nil, его называют листом. Остальные узлы дерева называют промежуточными. Совокупность ссылочных полей может быть оформлена как запись либо как несколько полей записи (как в наших примерах). Часто совокупность ссылочных полей определяется в виде массива ссылок, либо организуется в виде списка ссылок. В этих случаях говорят об упорядоченных деревьях, т.к. поддеревья одного корня оказываются упорядоченными либо индексами массива, либо по порядку доступа. Если все узлы дерева имеют одну и ту же степень ветвления, можно говорить о степени ветвления дерева. Деревья, степень ветвления которых равна двум, называют бинарными. Бинарные деревья - одна из наиболее распространенных ветвящихся структур, применяемых в программировании.

Сети

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

============================================================================

Структуры данных и их классификация (списки, таблицы, деревья, сети).

Структуры данных разделяют на два типа: статические и динамические.

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

Динамические структуры по определению характеризуются отсутствием физической смежности элементов структуры в памяти непостоянством и непредсказуемостью размера (числа элементов) структуры в процессе ее обработки.

Поскольку элементы динамической структуры располагаются по непредсказуемым адресам памяти, адрес элемента такой структуры не может быть вычислен из адреса начального или предыдущего элемента. Для установления связи между элементами динамической структуры используются указатели, через которые устанавливаются явные связи между элементами. Такое представление данных в памяти называется связным. Элемент динамической структуры состоит из двух полей:

информационного поля или поля данных, в котором содержатся те данные, ради которых и создается структура; в общем случае информационное поле само является интегрированной структурой - вектором, массивом, другой динамической структурой и т.п.;

поле связок, в котором содержатся один или несколько указателей, связывающий данный элемент с другими элементами структуры;

Когда связное представление данных используется для решения прикладной задачи, для конечного пользователя "видимым" делается только содержимое информационного поля, а поле связок используется только программистом-разработчиком.

Достоинства связного представления данных - в возможности обеспечения значительной изменчивости структур;

размер структуры ограничивается только доступным объемом машинной памяти;

при изменении логической последовательности элементов структуры требуется не перемещение данных в памяти, а только коррекция указателей;

большая гибкость структуры.

Вместе с тем связное представление не лишено и недостатков, основные из которых:

на поля связок расходуется дополнительная память;

доступ к элементам связной структуры может быть менее эффективным по времени.

Последний недостаток является наиболее серьезным и именно им ограничивается применимость связного представления данных. Если в смежном представлении данных для вычисления адреса любого элемента нам во всех случаях достаточно было номера элемента и информации, содержащейся в дескрипторе структуры, то для связного представления адрес элемента не может быть вычислен из исходных данных. Дескриптор связной структуры содержит один или несколько указателей, позволяющих войти в структуру, далее поиск требуемого элемента выполняется следованием по цепочке указателей от элемента к элементу. Поэтому связное представление практически никогда не применяется в задачах, где логическая структура данных имеет вид вектора или массива - с доступом по номеру элемента, но часто применяется в задачах, где логическая структура требует другой исходной информации.

Списки

Рассмотрим структуры данных, которые можно создавать с помощью указателей. Начнём со связных списков. Связанный список представляет собой цепочку записей-узлов, в которой каждая запись содержит основные данные и ссылку на следующую запись в цепочке. Во главе списка находится указатель («корень»), который указывает на первую запись в списке.

Узел списка

Поле nil

указателя

Поле данных

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

Основными операциями, которые можно выполнять над списками, являются операции включения записи в список и удаление её из списка. Чтобы добавить в связной список новый узел. Достаточно изменить один указатель, сами узлы при этом перемещаться не должны. Удаление узла также осуществляется изменением соответствующего указателя так, чтобы он ссылался на узел, следующий за удаляемым.

Принято выделять следующие типы связных списков:

- односвязные линейные списки

- односвязные циклические

- двусвязные линейные списки

- двусвязные циклические

Двусвязный списокхарактеризуется наличием пары указателей в каждом элементе: на предыдущий элемент и на следующий. Разновидностью видов линейных списков являетсякольцевой список, который может быть организован на основе как односвязного, так и двухсвязного списков. При этом в односвязном списке указатель последнего элемента должен указывать на первый элемент; в двухсвязном списке в первом и последнем элементах соответствующие указатели переопределяются.

Деревья

Структура «дерево» представляет собой иерархию элементов, называемых узлами, и является обобщением линейного списка. В списке каждый узел содержит указатель на другой узел. В дереве каждый узел содержит несколько указателей на несколько узлов.

Начальная точка дерева называется корневым узлом. У корневого узла нет входящих в него ветвей, есть только исходящие. Каждый узел, кроме корня, связан с одним узлом на более высоком уровне, называемым исходным узлом для данного узла. Ни один элемент не имеет более одного исходного. Каждый элемент может быть связан с одним или несколькими элементами на более низком уровне. Они называются потомками этой вершины. Последняя, соответственно называется предком. Если вершина не имеет потомков, то она называется терминальной.

1

2 3

4 5 6

На рисунке элемент 1 является корнем, элементы 2-6 —потомками (листьями). Дерево обычно изображается в перевёрнутом виде— с корнем вверху и «листьями» снизу.

Иногда используют термин сбалансированное дерево. В таком дереве каждый узел имеет одинаковое количество ветвей, причём процесс включения новых ветвей в узлы дерева идёт сверху вниз, а на каждом уровне дерева—слева на право.

Сбалансированное дерево Несбалансированное дерево

Физическая организация данных оказывается более простой для дерева с фиксированным числом ветвей, чем для дерева с переменным числом ветвей. Однако большая часть логических организаций данных не может быть задана в виде сбалансированной древовидной структуры, и для их представления требуется переменное число ветвей в каждом узле.

Имеется одна особая категория сбалансированных древовидных структур, в которой допускается не более двух ветвей для одного узла. Такая структура называется двоичным (бинарным) деревом. В бинарном дереве для целочисленных значений часто придерживаются соглашения о том, что во всех левых вершинах должны находится меньшие числа, а в правых—большие. Например:

8

5 12

3 6 9 13

Основными операциями над деревьями являются: создание и удаления дерева, занесение и удаление элемента в дереве, обход дерева.

Сети

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

В сетевой структуре любой элемент может быть связан с любым другим элементом. Пример сетевой структуры:

1 4 1 2 3

  1. 3

Так же как и в случае древовидных структур, сетевую структуру можно описать с помощью исходных и порожденных элементов. В первом примере каждый порожденный элемент имеет два исходных. Во втором примере не показано направлений связи, но какой бы узел не был самым нижним. У него будет два исходных. Удобно нарисовать её так, чтобы порожденные элементы располагались ниже исходных.

При рассмотрении некоторых сетевых структур естественно говорить об уровнях, так же как и в случае древовидных структур. Так в первом и втором примере структуры имеют два и три уровня соответственно.

Y. Древовидные структуры.

Это структуры, порядок обработки которых зависит от выполнения некоторого условия на каждом шаге. Каждый следующий элемент может обрабатываться только после одного фиксированного заданного элемента структуры. Hо после данного элемента может обрабатываться один из нескольких элементов. Дре-вовидная структура реализует иерархические отношения 1:M.

Как и списковая структура она состоит из узлов, каждый узел связан с одним элементом данных и несколькими другими узлами. Для дерева может быть опре-делена функция выбора пути, которая позволяет по элементу данных узла и по поисковому значению определить следующий узел для обработки.

Дерево - это структура с произвольным размещением и иерархическим доступом по условию.

YI. Сетевые структуры.

Это наиболее общая структура, описывающая отношения типа M:M. Здесь последовательность обработки определяется графом с проверкой условия в каждом узле.

Это структура с произвольным размещением и доступом по условию, проверяемому в каждом узле сети.

=============================== Понятие о типе ==============================

Соседние файлы в папке POSIBNIK