Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Системное ПО_Лабораторная работа №1.docx
Скачиваний:
69
Добавлен:
06.03.2016
Размер:
795 Кб
Скачать
☆

Int firstFree; // начало незанятой области массива ключей

// организация элемента таблицы имен при

// хранении ключа в специальном массиве.

struct element {

Int nameIndex; // индекс ключа

Int count; // счетчик частоты встречаемости

};

Элемент

8

Указатель на

ключ

…

Данные

Символьный массив

…

…

Предыдущий ключ

Ключ

данного элемента

Следующий ключ

Рис. 1.3. Элемент таблицы с хранением ключей в общем символьном массиве

Преимущества. Организовано хранение ключей произвольной дли-

ны. Отсутствуют затраты на динамическое распределение памяти. Простота

вделения отдельного ключа.

Недостатки. Возможно переполнение массива и его неэффективное

использование. В случае удаления элементов списка в массиве возникают

«дыры», которые надо каким-либо образом ликвидировать (например, сдви-

гая все элементы массива) или перераспределять в дальнейшем. Обычно та-

кая операция сжатия не реализуется, так как данный метод хранения исполь-

зуется только в системах массовым удалением всех элементов таблицы.

Массовая же очистка массива ключей осуществляется простым обнулением

индекса первого свободного символа.

Хранение ключей в списке символьных массивов

Организация этой структуры является комбинацией двух предшест-

вующих. Память для ключей в этом случае выделяется динамически в виде

достаточно длинного массива. Если выделенный массив заполнен до конца и

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

одного массива и т.д. Выделяемые массивы организуются в виде списка.

Элемент таблицы содержит указатель на место хранения ключа в одном

из таких массивов (рис. 1.4). Программная реализация данного метода опира-

ется на задание сложного указателя ключа, так как, наряду с указанием ме-

стоположения в символьном массиве, необходимо еще задать и сам массив.

При этом также возможно использование вариантов доступа как по индексу,

так и по указателю. В последнем случае обращение к ключу может быть

9

осуществлено за один раз, а структура элемента будет соответствовать той,

которая приведена для второго варианта.

Элемент

ptr

next

Указатель на

ключ

…

Данные

Символьный массив

…

…

ptr

next

. . .

…

Ключ данного элемента

… …

. . .

ptr

*

…

…

…

Рис. 1.4. Элемент таблицы с хранением ключей в списке символьных массивов

Пример структуры с комбинированным доступом к ключу:

#define nameArraySize 1000 // размер массива ключей

#define stringNumber 10 // количество строковых массивов

// список указателей на строки

char* stringArray[stringNumber];