Выделяется одномерный символьный массив, в который заносятся все
ключи. Обращение к элементам этого массива осуществляется по индексу
или непосредственно по указателю (рис. 1.3).
Массив для хранения ключей может быть выделен как статически до
начала выполнения программы, так и динамически в ходе ее работы. Вариант
структуры элемента с обращением по указателю идентичен структуре,при-
веденной для предшествующего метода.
Использование индекса для обращения к ключу вместе с массивом для
хранения ключей можно описать следующим образом:
#define nameArraySize 10000 // размер массива ключей
char nameArray[nameArraySize]; // массив ключей
Int firstFree; // начало незанятой области массива ключей
// организация элемента таблицы имен при
// хранении ключа в специальном массиве.
struct element {
Int nameIndex; // индекс ключа
Int count; // счетчик частоты встречаемости
};
Элемент
Указатель на
Ключ
…
Данные
Символьный массив
…
…
Предыдущий ключ
Ключ
|
|
данного элемента
Следующий ключ
Рис. 1.3. Элемент таблицы с хранением ключей в общем символьном массиве
Преимущества. Организовано хранение ключей произвольной дли-
ны. Отсутствуют затраты на динамическое распределение памяти. Простота
вделения отдельного ключа.
Недостатки. Возможно переполнение массива и его неэффективное
использование. В случае удаления элементов списка в массиве возникают
«дыры», которые надо каким-либо образом ликвидировать (например, сдви-
гая все элементы массива) или перераспределять в дальнейшем. Обычно та-
кая операция сжатия не реализуется, так как данный метод хранения исполь-
зуется только в системах массовым удалением всех элементов таблицы.
Массовая же очистка массива ключей осуществляется простым обнулением
индекса первого свободного символа.