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

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


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

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

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


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

 


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

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

ФАЙЛЫ

Дата: 2019-02-19, просмотров: 23.