
- •Введение
- •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.2 Векторное представление строк
В общем случае строка в процессе выполнения операций над ней изменяется как по составу входящих в нее символов, так и по длине, т.е. по числу символов. Поэтому логическая структура строки может быть в простейшем случае представлена в виде вектора с переменной длиной. В отличие от вектора, массива, стека, очереди и дека, в которых доступ осуществляется к единственному элементу, целью доступа к строке может быть не один ее элемент (символ или литера), а некоторая цепочка символов, в том числе и вся строка в целом. Отличием строки от полустатических структур - стека, очереди и дека - является и то, что элементом строки служит не запись, а простое данное - символ.
Часто для строки отводится вектор некоторой фиксированной длины, причем все изменения размера строки должны происходить в пределах этой длины. При таком подходе к организации строки ее следует считать полустатической структурой данных. Существует и более общая трактовка строки как динамической структуры. Но такая структура организуется, как правило, с помощью связного списка.
Элемент строки - некоторый символ, который может быть буквой латинского или русского языка, цифрой, математическим знаком или специальным знаком. Каждый символ представляется в машинной памяти последовательностью битов, которая, как правило, имеет одну и ту же длину для любого символа. Длина этой последовательности и соответствие между символами и последовательностями битов определяется выбранной системой кодирования.
Целью доступа к строке в общем случае является не один элемент, а группа логически последовательных элементов (например, некоторая подстрока строки). Если так же учесть, что логическая структура строки может быть представлена вектором (с переменной длиной), то естественно и физическую структуру строки организовать в виде вектора, ограничив его длину некоторой величиной. В зависимости от соотношения длины поля, необходимого для хранения кода одного элемента строки, и длины минимального адресуемого участка (ячейки) памяти следует различать неупакованные и упакованные векторные представления строк в памяти.
При векторном представлении физическая структура строки может быть организована с помощью дескриптора или граничных маркеров. Дескрипторный метод предполагает наличие отдельного дескриптора для каждой строки. Дескриптор содержит информацию об имени строки, ее текущей длине (т.е. числе элементов) и указателе начала строки в памяти. В некоторых случаях может оказаться полезной информация о максимальной длине строки.
Дескрипторы всех строк, существующих в той или иной системе, объединяются в таблицу, через которую и осуществляются доступ и необходимая обработка желаемых строк. Применение дескрипторов дает возможность располагать различные строки в памяти вплотную друг к другу, без необходимости указания каких-либо специальных разделителей строк. Дескриптор, представленный на рис.6.1, является довольно общим. В конкретных применениях некоторые поля дескриптора могут оказаться излишними. Например, довольно часто в дескрипторе достаточно иметь всего лишь текущую длину строки и указатель начала строки в памяти.
В методе граничных маркеров границы каждой строки задаются в явном виде с помощью специального маркера, который, конечно, не должен быть элементом никакой строки. Пример представления строки с маркером приведен на рис.6.2, на котором в качестве маркера использован специальный символ #. В методе маркеров отпадает необходимость хранить в дескрипторе информацию о длине строки и, следовательно, дескриптор упрощается. Однако маркеры сами требуют дополнительного расхода памяти для их хранения.
Векторное представление строк в памяти вызывает ряд трудностей при их обработке. Если, например, в процессе преобразования строки она удлиняется и выходит за пределы отведенного ей вектора, то лишние (обычно справа строки) элементы должны быть отброшены.