- •Введение
- •1 Основные понятия о типах и структурах данных
- •2 Простейшие статические структуры
- •2.1 Характерные свойства статических структур
- •2.2 Векторы
- •2.3 Массивы
- •2.4 Записи
- •2.5 Таблицы
- •2.6 Характерные свойства статических структур
- •3 Полустатические структуры
- •3.1 Общее понятие списковой структуры
- •3.2 Стеки
- •3.3 Очереди
- •3.4 Деки
- •4 Линейные динамические структуры
- •4.1 Характерные черты динамических структур
- •4.2 Односвязные списки
- •4.3 Двусвязные списки
- •4.4 Организация и представление линейных связных списков в памяти эвм
- •4.5 Представление стеков, очередей и деков линейными списками
- •5 Нелинейные связные структуры
- •5.1 Обобщенные двусвязные списки
- •5.2 Многосвязные списки
- •5.3 Сетевые структуры
- •5.4 Деревья
- •5.5 Бинарные деревья
- •6 Строковые данные
- •6.1 Строки
- •6.2 Векторное представление строк
- •6.3 Списковое представление строк
- •7 Файлы
- •7.1 Организация файлов на устройствах внешней памяти
- •7.2 Основные типы файлов
- •7.3 Последовательные файлы
- •7.4 Библиотечные файлы
- •7.5 Файлы прямого доступа
- •7.6 Индексно-последовательные файлы
- •8 Системы управления базами данных
- •8.1 Сущность базы данных и системы управления базами данных
- •8.2 Классификация банков данных и их составных частей
- •8.3 Иерархическая и сетевая модели баз данных
- •8.4 Реляционная модель базы данных
- •9 Задачи и упражнения
- •9.1. Векторы
- •9.2 Матрицы
- •9.3 Строки
- •9.4 Записи и таблицы
- •9.5 Списки
- •9.6 Очереди, стеки, деки
- •9.7 Двоичные деревья
- •Библиографический список
- •Содержание
- •Структуры данных
- •650049, Красноярск, пр.Мира 82.
6.3 Списковое представление строк
Рассмотрим теперь представление строк в машинной памяти с помощью связных списков. В этом способе каждому элементу строки соответствует элемент, или узел, односвязного списка, как показано на рис. 6.3. Дескриптор кроме обычной информации может содержать при этом также указатель конца строки. Поле указателя в последнем элементе списка хранит признак Æ, свидетельствующий о конце списка.
Списковое представление строк в памяти обеспечивает гибкость в выполнении разнообразных операций над строками (в частности, операций включения и исключения элементов) и удобство в выделении необходимого объема памяти для строки, вытекающее из свойств списковых структур. Однако память при этом используется крайне неэффективно. Для хранения элементов строки используется лишь 25% от всего объема отведенной ей памяти. Другим недостатком описанного спискового представления строки является то, что логически соседние элементы строки не являются физически соседними в памяти. Это усложняет доступ к группам элементов строки по сравнению с доступом в векторном представлении строки.
Используются две разновидности спискового представления, которые могут обеспечить более эффективное использование памяти, чем в случае, когда каждый элемент списка содержит только один элемент строки.
В первой разновидности спискового представления строка разбивается на равные группы, кроме последней группы, в которой может содержаться меньше элементов, чем в каждой из остальных групп. Эти группы организуются в список, так что каждый элемент списка, кроме последнего, содержит группу элементов строки и указатель следующего элемента списка. Поле указателя последнего элемента списка хранит, как обычно, признак конца Æ (т.е. "пустой" указатель). В процессе обработки строки из любой ее позиции могут быть исключены или в любом месте вставлены элементы, в результате чего даже промежуточные элементы списка могут содержать меньшее число элементов, чем было первоначально. По этой причине необходим специальный символ, который означал бы отсутствие элемента в соответствующей позиции строки. Будем обозначать такой символ знаком "*" и называть "пустым" символом. Символ, непосредственно предшествующий полю указателя, называется признаком указателя и обозначается . На рис. 6.4 приведен пример спискового представления строки с использованием пустого символа и признака указателя.
Вторая разновидность спискового представления строки характеризуется переменным размером элементов списка. Это дает возможность избавляться от пустых символов и тем самым экономить память для строки. Однако потребность в признаке указателя при этом остается. Такой способ спискового представления строк особенно удобен в задачах редактирования текста, когда большая часть операций приходится на изменение, вставку и удаление целых слов.
Поэтому в этих задачах целесообразно список организовать так, чтобы каждый его элемент содержал одно слово текста, как показано на рис. 6.5.
Основными операциями над строками являются: присваивание, конкатенация и сопоставление.