Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
структуры и алгоритмы / Лекции_лабор_структ.doc
Скачиваний:
56
Добавлен:
04.06.2015
Размер:
2.98 Mб
Скачать

6.3 Списковое представление строк

Рассмотрим теперь представление строк в машинной памяти с помощью связных списков. В этом способе каждому элементу строки соответствует элемент, или узел, односвязного списка, как показано на рис. 6.3. Дескриптор кроме обычной информации может содержать при этом также указатель конца строки. Поле указателя в последнем элементе списка хранит признак Æ, свидетельствующий о конце списка.

Списковое представление строк в памяти обеспечивает гибкость в выполнении разнообразных операций над строками (в частности, операций включения и исключения элементов) и удобство в выделении необходимого объема памяти для строки, вытекающее из свойств списковых структур. Однако память при этом используется крайне неэффективно. Для хранения элементов строки используется лишь 25% от всего объема отведенной ей памяти. Другим недостатком описанного спискового представления строки является то, что логически соседние элементы строки не являются физически соседними в памяти. Это усложняет доступ к группам элементов строки по сравнению с доступом в векторном представлении строки.

Используются две разновидности спискового представления, которые могут обеспечить более эффективное использование памяти, чем в случае, когда каждый элемент списка содержит только один элемент строки.

В первой разновидности спискового представления строка разбивается на равные группы, кроме последней группы, в которой может содержаться меньше элементов, чем в каждой из остальных групп. Эти группы организуются в список, так что каждый элемент списка, кроме последнего, содержит группу элементов строки и указатель следующего элемента списка. Поле указателя последнего элемента списка хранит, как обычно, признак конца Æ (т.е. "пустой" указатель). В процессе обработки строки из любой ее позиции могут быть исключены или в любом месте вставлены элементы, в результате чего даже промежуточные элементы списка могут содержать меньшее число элементов, чем было первоначально. По этой причине необходим специальный символ, который означал бы отсутствие элемента в соответствующей позиции строки. Будем обозначать такой символ знаком "*" и называть "пустым" символом. Символ, непосредственно предшествующий полю указателя, называется признаком указателя и обозначается ­. На рис. 6.4 приведен пример спискового представления строки с использованием пустого символа и признака указателя.

Вторая разновидность спискового представления строки характеризуется переменным размером элементов списка. Это дает возможность избавляться от пустых символов и тем самым экономить память для строки. Однако потребность в признаке указателя при этом остается. Такой способ спискового представления строк особенно удобен в задачах редактирования текста, когда большая часть операций приходится на изменение, вставку и удаление целых слов.

Поэтому в этих задачах целесообразно список организовать так, чтобы каждый его элемент содержал одно слово текста, как показано на рис. 6.5.

Основными операциями над строками являются: присваивание, конкатенация и сопоставление.

Соседние файлы в папке структуры и алгоритмы