Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры данных / Си структуры данных1.doc
Скачиваний:
47
Добавлен:
23.02.2015
Размер:
1.29 Mб
Скачать

3.2. Массивы

3.2.1. Логическая структура

Массив - такая структура данных, которая характеризуется:

  • фиксированным набором элементов одного и того же типа;

  • каждый элемент имеет уникальный набор значений индексов;

  • количество индексов определяет мерность массива, например, два индекса - двумерный массив, три индекса - трехмерный массив, один индекс - одномерный массив или вектор;

  • обращение к элементу массива выполняется по имени массива и значениям индексов для данного элемента.

Другое определение: массив - это вектор, каждый элемент которого - вектор.

Синтаксис описания массива представляется в виде:

<Тип> <Имя>[n1] [n2] .. [nn];

Для случая двумерного массива:

<Тип> <Имя>[n1] [n2]

Наглядно двумерный массив можно представить в виде таблицы из n1 строк и n2 столбцов.

3.2.2. Физическая структура

Физическая структура - это размещение элементов массива в памяти ЭВМ. Для случая двумерного массива, состоящего из (n) строк и (k) столбцов, физическая структура представлена на рис. 3.3.

@Mas

+0

┌──┴──┐

+Sizeof(тип)

┌──┴──┐

+(k-1)* Sizeof(тип)

┌──┴──┐

Mas[0][0]

Mas[0][1]

Mas[0][k-1]

Mas[n-1][0]

Mas[n-1][1]

Mas[n-1][k-1]

+k*(n-1)* Sizeof(тип) или

*(Mas+n-1)

+(k*(n-1)+1)* Sizeof(тип) или

*(*(Mas+n-1)+1)

+(k*(n-1)+(k-1))* Sizeof(тип) или

*(*(Mas+n-1)+k-1)

Рис. 3.3. Физическая структура двумерного массива из

(n) строк и (k) столбцов

Многомерные массивы хранятся в непрерывной области памяти. Размер слота определяется базовым типом элемента массива. Количество элементов массива и размер слота определяют размер памяти для хранения массива. Принцип распределения элементов массива в памяти определен языком программирования. Так, в FORTRAN элементы распределяются по столбцам - так, что быстрее меняются левые индексы, в PASCAL - по строкам - изменение индексов выполняется в направлении справа налево.

Количество байтов памяти, занятых двумерным массивом, определяется по формуле :

ByteSize = (n)*(k)*SizeOf(Тип) (3.3)

Адресом массива является адрес первого байта начального компонента массива. Смещение к элементу массива Mas[i1][i2] определяется по формуле:

ByteNumber = [ i1* k + i2 ]*SizeOf(Тип) (3.4)

его адрес : @ByteNumber = @mas + ByteNumber = *(*(Mas + i1) + i2)

Например:

short Mas[3][2];

Базовый тип элемента shortтребует два байта памяти, тогда табл. 3.2 смещений элементов массива относительно @Mas будет выглядеть так:

Таблица 3.2

Смещение, байт

Элемент массива

Смещениие, байт

Элемент массива

+0

Mas[0,0]

+2

Mas[0,1]

+4

Mas[1,0]

+6

Mas[1,1]

+8

Mas[2,0]

+10

Mas[2,1]

Этот массив будет занимать в памяти: 3*2*2=12 байт; а адрес элемента Mas[2,1]: @Mas+( 1*2+1 )*2 = @Mas+6 = *(*(Mas+2) +1)