Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
математическая логика и теория алгоритмов.doc
Скачиваний:
118
Добавлен:
10.05.2014
Размер:
2.32 Mб
Скачать
    1. Отображение абстрактных структур данных на внутренние

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

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

  • структуры отдельного элемента – с точки зрения того, как будет организована в памяти хранимая информация,

  • алгоритмов выполнения конкретных операций со структурой.

      1. Строки

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

Строка обязательно имеет некоторый размер, который может быть задан по-разному, в зависимости от того, как строка отображается во внутренней структуре данных.

В качестве операций работы со строками рассмотрим указанные ранее операции:

  • сцепление двух строк,

  • поэлементное сравнение двух строк,

  • разбиение строки на части,

  • нахождение подстроки.

Строка может быть отображена и вектором, и списком.

        1. Строка-вектор

Если строка отображается вектором, она представляется массивом элементов некоторого типа и некоторого размера; доступ к элементу строки осуществляется с помощью индекса, например:

char string[80];– строка символов размером в 80 символов; отдельный элемент строки – символ – определяется какstring[i];

char words[20][10];– строка из 20 слов, каждое длиной 20 символов; отдельный элемент строки – слово – определяется какwords[i];

char * pwords[20];– еще одна строка слов, в которой слово задается указателем на его первый символ; отдельный элемент строки – указатель на начало слова – также определяется с помощью индекса:pwords[i];

Если строка имеет постояннуюдлину, тогда любой элемент в пределах указанного размера является элементом строки; в приведенных выше примерах такой строкой является строка словwords.

Строка может иметь переменнуюдлину; в этом случае выбирается некоторый специальный элемент, который хранится в строке наряду с другими элементами и служит признаком конца строки. Такой специальный символ может выбираться в зависимости от приложения и используемого языка программирования, например: строка символов в языке С/С++ (в приведенных выше примерах этоstring) всегда является нуль ограниченной; если строка состоит из указателей (в приведенных выше примерах этоpwords), тогда признаком конца строки может служить пустой указательNULL.

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

Алгоритмы выполнения операций со строками, представленными вектором, затруднений не вызывают. Сложности могут возникнуть лишь при использовании соответствующих средств языка программирования.

Рассмотрим реализацию операций со строками.