Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структура данных.doc
Скачиваний:
1
Добавлен:
11.07.2019
Размер:
152.06 Кб
Скачать

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

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

Тип данных — фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.

Типы данных бывают следующие:

  • Простые.

    • Перечислимый тип. Может хранить только те значения, которые прямо указаны в его описании.

    • Числовые. Хранятся числа. Могут применяться обычные арифметические операции.

      • Целочисленные: со знаком, то есть могут принимать как положительные, так и отрицательные значения; и без знака, то есть могут принимать только неотрицательные значения.

      • Вещественные: с запятой (то есть хранятся знак и цифры целой и дробной частей) и с плавающей запятой (то есть число приводится к виду m*be, где m — мантисса, b — основание показательной функции, e — показатель степени (порядок) (в англоязычной литературе экспонента), причём в нормальной форме 0<=m<b, а в нормализованной форме 1<=m<b, e — целое число и хранятся знак и числа m и e).

      • Числа произвольной точности, обращение с которыми происходит посредством длинной арифметики. Примером языка с встроенной поддержкой таких типов является UBASIC, часто применяемый среди криптографов.

    • Символьный тип. Хранит один символ. Могут использоваться различные кодировки.

    • Логический тип. Имеет два значения: истина и ложь, при троичной логике может иметь и третье значение — «не определено» (или «неизвестно»). Могут применяться логические операции. Используется в операторах ветвления и циклах. В некоторых языках является подтипом числового типа, при этом ложь=0, истина=1.

    • Множество. В основном совпадает с обычным математическим понятием множества. Допустимы стандартные операции с множествами и проверка на принадлежность элемента множеству. В некоторых языках рассматривается как составной тип.

  • Составные (сложные).

    • Массив. Является индексированным набором элементов одного типа. Одномерный массив — вектор, двумерный массив — матрица.

      • Строковый тип. Хранит строку символов. Аналогом сложения в строковой алгебре является конкатенация (прибавление одной строки в конец другой строки). В языках, близких к бинарному представлению данных, чаще рассматривается как массив символов, в языках более высокой абстракции зачастую выделяется в качестве простого.

    • Запись (структура). Набор различных элементов (полей записи), хранимый как единое целое. Возможен доступ к отдельным полям записи. Например, struct в C или record в Pascal.

    • Файловый тип. Хранит только однотипные значения, доступ к которым осуществляется только последовательно (файл с произвольным доступом, включённый в некоторые системы программирования, фактически является неявным массивом).

    • Класс.

  • Другие типы данных. Если описанные выше типы данных представляли какие-либо объекты реального мира, то рассматриваемые здесь типы данных представляют объекты компьютерного мира, то есть являются исключительно компьютерными терминами.

    • Указатель. Хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — указатель на переменную.

    • Ссылка.

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

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

Организация данных

Традиционно применяют два способа организации данных: текстовые данные (в файловой системе: текстовый файл, в программировании: строковый тип данных) — последовательность символов алфавита, представленная в виде кодировки.

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

Типы и иерархия данных в программировании

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

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

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

1.1.Типы и структуры данных

1.1.1.Основные типы данных.

Данные, хранящиеся в памяти ЭВМ представляют собой совокупность нулей и единиц (битов). Биты объединяются в последовательности: байты, слова и т.д. Каждому участку оперативной памяти, который может вместить один байт или слово, присваивается порядковый номер (адрес).

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

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

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

Некоторые структуры:

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

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

Такие структуры данных как массив или запись занимают в памяти ЭВМ постоянный объем, поэтому их называют статическими структурами. К статическим структурам относится также множество.

Имеется ряд структур, которые могут изменять свою длину - так называемые динамические структуры. К ним относятся дерево, список, ссылка.

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

Рис. 1.1 Классификация типов данных.