Когда речь шла о записях, было отмечено, что полями записи
могут быть интегрированные структуры данных - векторы, массивы,
другие записи. Аналогично и элементами векторов и массивов могут
быть также интегрированные структуры. Одна из таких сложных
структур - таблица. С физической точки зрения таблица представля-
ет собой вектор, элементами которого являются записи. Характерной
логической особенностью таблиц, которая и определила их рассмот-
рение в отдельном разделе, является то, что доступ к элементам
таблицы производится не по номеру (индексу), а по ключу - по зна-
чению одного из свойств объекта, описываемого записью-элементом
таблицы. Ключ - это свойство, идентифицирующее данную запись во
множестве однотипных записей. Как правило, к ключу предъявляется
требование уникальности в данной таблице. Ключ может включаться в
состав записи и быть одним из ее полей, но может и не включаться
в запись, а вычисляться по положению записи. Таблица может иметь
один или несколько ключей. Например, при интеграции в таблицу за-
писей о студентах (описание записи приведено в п.3.5.1) выборка
может производиться как по личному номеру студента, так и по фа-
милии.
Основной операцией при работе с таблицами является операция
доступа к записи по ключу. Она реализуется процедурой поиска.
Поскольку поиск может быть значительно более эффективным в табли-
цах, упорядоченных по значениям ключей, довольно часто над табли-
цами необходимо выполнять операции сортировки. Эти операции расс-
матриваются в следующих разделах данной главы.
Иногда различают таблицы с фиксированной и с переменной дли-
ной записи. Очевидно, что таблицы, объединяющие записи совершенно
идентичных типов, будут иметь фиксированные длины записей. Необ-
ходимость в переменной длине может возникнуть в задачах, подобных
тем, которые рассматривались для записей с вариантами. Как прави-
ло таблицы для таких задач и составляются из записей с варианта-
ми, т.е. сводятся к фиксированной (максимальной) длине записи.
Значительно реже встречаются таблицы с действительно переменной
длиной записи. Хотя в таких таблицах и экономится память, но воз-
можности работы с такими таблицами ограничены, так как по номеру
записи невозможно определить ее адрес. Таблицы с записями пере-
менной длины обрабатываются только последовательно - в порядке
возрастания номеров записей. Доступ к элементу такой таблицы
обычно осуществляется в два шага. На первом шаге выбирается пос-
тоянная часть записи, в которой содержится - в явном или неявном
виде - длина записи. На втором шаге выбирается переменная часть
записи в соответствии с ее длиной. Прибавив к адресу текущей за-
писи ее длину, получают адрес следующей записи.
Так таблица с записями переменной длины может, например,
рассматриваться в некоторых задачах программируемых в машинных
кодах. Каждая машинная команда - запись, состоит из одного или
нескольких байт. Первый байт - всегда код операции, количество и
формат остальных байтов определяется типом команды. Процессор вы-
бирает байт по адресу, задаваемому программным счетчиком, и опре-
деляет тип команды. По типу команды процессор определяет ее длину
и выбирает остальные ее байты. Содержимое программного счетчика
увеличивается на длину команды.
записи в соответствии с ее длиной. Прибавив к адресу текущей за-
писи ее длину, получают адрес следующей записи.
Так таблица с записями переменной длины может, например,
рассматриваться в некоторых задачах программируемых в машинных
кодах. Каждая машинная команда - запись, состоит из одного или
нескольких байт. Первый байт - всегда код операции, количество и
формат остальных байтов определяется типом команды. Процессор вы-
бирает байт по адресу, задаваемому программным счетчиком, и опре-
деляет тип команды. По типу команды процессор определяет ее длину
и выбирает остальные ее байты. Содержимое программного счетчика
увеличивается на длину команды.