Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы и структуры данных.doc
Скачиваний:
172
Добавлен:
11.03.2015
Размер:
2.05 Mб
Скачать

Структурированные типы данных в Pascal Массив

Массив— последовательность элементов одного типа, называемогобазовым.

На абстрактномуровне массив представляет собой линейную структуру. Нафизическомуровне массив реализован последовательной (прямоугольной) схемой хранения. Располагаться он может в статической или динамической памяти. Размер памяти, выделяемый под массив, зависит от базового типа элемента массива и от количества элементов в массиве и определяется формулой; гдеVмас — объем памяти для массива,Vэл — объем памяти одного элемента (слот),k— количество элементов.

На логическомуровне СД типа массив можно описать следующим образом:

1. Type T_ar = array [T1] of T2; {T1 — тип индекса }

Var Ar : T_ar; {T2 — тип элемента}

Массив ArтипаT_arрасполагается в статической памяти.

2. Type TP_ar = ^T_ar;

Var P_ar : TP_ar;

Массив типа T_arбудет располагаться в динамической памяти после обращения к процедуреnew(P_ar). Адрес массива запишется в переменнуюP_ar.

Массив —это статическая структура. В процессе выполнения программы количество элементов массива не изменяется. Доступ к элементу массива прямой, осуществляется через индекс элемента, напримерAr[i]илиP_ar^[i].

Кардинальное число для массива T_ar:

Car(T_ar) = [Car(T2)] Car(T1)

Набор допустимых операций для СД типа массив:

1. Операция доступа (доступ к элементам массива — прямой; от размера структуры время выполнения операции не зависит).

2. Операция присваивания.

Структура данных типа «запись»

Запись— это последовательность элементов (полей), которые могут быть различных типов.

На абстрактномуровне запись представляет собой линейную структуру.

На физическомуровне запись реализована последовательной схемой хранения. Располагаться она может в статической или в динамической памяти. Размер памяти, выделяемый под запись, зависит от типов полей и от их количества и определяется формулойVзап =Vii=1,k; гдеVзап— объем памяти для записи,k— количество полей,Vi— объем памяти дляi-го поля. Налогическомуровне СД типа запись можно записать следующим образом:

Type Т_rec = Record

S1: T1;

S2: T2;

……..

Sn: Tn;

End;

Var Rec: T_rec;

Здесь: S1, …, Sn— идентификаторы полей;Т1, …, Tn— типы полей;

Rec— идентификатор записи;T_rec— тип записи.

Если DT1— множество значений элементов типаТ1,DТ2— множество значений элементов типаТ2, … ,DТn— множество значений элементов типаТn, тоDTrec— множество значений элементов типаТ_recбудет определяться с помощью прямого декартова произведения:

.

Кардинальное число для записи T_rec:

Сar(T_rec) = П Car(Ti) | i = 1, n

Допустимые операции для СД типа запись аналогичны операциям для СД типа массив.

По характеру изменчивости запись — это статическая структура. Доступ к элементам записи прямой, осуществляется по имени поля.

Структура данных типа «множество»

Множество на физическом уровне — это массив битов, в котором каждый бит указывает, является ли элемент принадлежащим множеству или нет. Максимальное число элементов множества — 256, так что множество никогда не может занимать более 32 байтов.

Число байтов, занимаемых отдельным множеством, вычисляется как ByteSize = (Max div 8) – (Min div 8) + 1, где Min и Max — нижняя и верхняя граница базового типа этого множества.

Номер байта для конкретного элемента E вычисляется по формуле Byte Number = (E div 8) – (Min div 8), а номер бита внутри этого байта — по формуле BitNumber = E mod 8.

На логическом уровне множество можно описать так:

Type T_set = set of T; {T — базовый тип множества}

Значениями типа множество являются все подмножества базового типа. Мощность множественного типа T_set (кардинальное число) равна Car(T_set) = 2Car(T). Число элементов базового типа ограничено и не должно превышать 256. Базовый тип является перечисляемым типом или поддиапазоном перечисляемого типа. Кроме того, объем памяти, занимаемый значением базового типа — один байт.

Допустимыми операциями для множества являются:

1. Пересечение (*).

2. Объединение (+).

3. Вычитание (–).

4. Операции отношения:

4.1. Равенство множеств (=).

4.2. Неравенство множеств (<>).

4.3. Левый операнд — подмножество правого (<=).

4.4. Правый операнд — подмножество левого (>=).

4.5. Принадлежность элемента множеству (in).