Векторное представление строк
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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

Часто для строки отводится вектор некоторой фиксированной длины, причем все изменения размера строки должны происходить в пределах этой длины. При таком подходе к организации строки ее следует считать полустатической структурой данных. Существует и более общая трактовка строки как динамической структуры. Но такая структура организуется, как правило, с помощью связного списка.

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

Целью доступа к строке в общем случае является не один элемент, а группа логически последовательных элементов (например, некоторая подстрока строки). Если так же учесть, что логическая структура строки может быть представлена вектором (с переменной длиной), то естественно и физическую структуру строки организовать в виде вектора, ограничив его длину некоторой величиной. В зависимости от соотношения длины поля, необходимого для хранения кода одного элемента строки, и длины минимального адресуемого участка (ячейки) памяти следует различать неупакованные и упакованные векторные представления строк в памяти.

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

Дескрипторы всех строк, существующих в той или иной системе, объединяются в таблицу, через которую и осуществляются доступ и необходимая обработка желаемых строк. Применение дескрипторов дает возможность располагать различные строки в памяти вплотную друг к другу, без необходимости указания каких-либо специальных разделителей строк. Дескриптор, представленный на рис.6.1, является довольно общим. В конкретных применениях некоторые поля дескриптора могут оказаться излишними. Например, довольно часто в дескрипторе достаточно иметь всего лишь текущую длину строки и указатель начала строки в памяти.


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

 

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


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