Массивы
Логическая структура
Массив - такая структура данных, которая характеризуется:
1. фиксированным набором элементов одного и того же типа;
2. каждый элемент имеет уникальный набор значений индексов;
3. количество индексов определяют мерность массива, например, два индекса - двумерный массив, три индекса - трехмерный массив, один индекс - одномерный массив или вектор;
4. обращение к элементу массива выполняется по имени массива и значениям индексов для данного элемента.
Другое определение: массив - это вектор, каждый элемент которого - вектор.
Синтаксис описания массива представляется в виде:
<Имя>: Array [n1..k1] [n2..k2].. [nn..kn] of <Тип>.
Для случая двумерного массива:
Mas2D: Array [n1..k1] [n2..k2] of <Тип>, или
Mas2D: Array [n1..k1, n2..k2] of <Тип>
Наглядно двумерный массив можно представить в виде таблицы из (k1-n1+1) строк и (k2-n2+1) столбцов.
Физическая структура - это размещение элементов массива в памяти ЭВМ. Для случая двумерного массива, состоящего из (k1-n1+1) строк и (k2-n2+1) столбцов физическая структура представлена на рис. 3.3.
Рис. 3.3. Физическая структура двумерного массива из
(k1-n1+1) строк и (k2-n2+1) столбцов
Многомерные массивы хранятся в непрерывной области памяти. Размер слота определяется базовым типом элемента массива. Количество элементов массива и размер слота определяют размер памяти для хранения массива. Принцип распределения элементов массива в памяти определен языком программирования. Так в FORTRAN элементы распределяются по столбцам - так, что быстрее меняется левые индексы, в PASCAL - по строкам - изменение индексов выполняется в направлении справа налево.
Количество байтов памяти, занятых двумерным массивом, определяется по формуле:
ByteSize = (k1-n1+1)*(k2-n2+1)*SizeOf(Тип) (3.3)
Адресом массива является адрес первого байта начального компонента массива. Смещение к элементу массива Mas[i1,i2] определяется по формуле:
ByteNumber = [(i1-n1)*(k2-n2+1)+(i2-n2)]*SizeOf(Тип) (3.4)
его адрес: @ByteNumber = @mas + ByteNumber.
Например:
var Mas: Array [3..5] [7..8] of Word;
Базовый тип элемента Word требует два байта памяти, тогда таблица 3.2 смещений элементов массива относительно @Mas будет следующей:
Таблица 3.2
Смещение, байт | Элемент массива | Смещениие, байт | Элемент массива |
+0 | Mas[3,7] | +2 | Mas[3,8] |
+4 | Mas[4,7] | +6 | Mas[4,8] |
+8 | Mas[5,7] | +10 | Mas[5,8] |
Этот массив будет занимать в памяти: (5-3+1)*(8-7+1)*2=12 байт; а адрес элемента Mas[4,8]: @Mas+((4-3)*(8-7+1)+(8-7)*2 = @Mas+6