Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
данияр (2).docx
Скачиваний:
7
Добавлен:
01.07.2025
Размер:
247.08 Кб
Скачать

25) Структура и формат данных

 

 На этапе определения спецификаций для разработки  качественного программного обеспечения необходимо определить структуру и формат используемых в программах данных [41].

Структура данных — это множество элементов данных и  связей между ними.

Независимо от содержания и сложности любые данные в  памяти компьютера представляются в виде последовательности двоичных разрядов (битов), а их значениями являются  соответствующие двоичные числа. Битовые последовательности слабо структурированы и неудобны для практического применения.

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

 Классификация структур данных

С понятием структуры данных тесно связано понятие типа данных.

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

внутренней.

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

Между отдельными элементами структур могут  наличествовать или отсутствовать явно заданные связи. В зависимости от этого следует различать: несвязные структуры (векторы, массивы,

строки, стеки, очереди) и связные структуры (связные списки).

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

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

Линейные структуры, в свою очередь, делятся на структуры с последовательным распределением (векторы, строки, массивы, стеки, очереди) и структуры с произвольным связным  распределением (односвязные, двусвязные списки) по характеру  распределения элементов в памяти.

Указание типа данных четко определяет:

• размер памяти, отведенной под данную структуру и способ

ее размещения в памяти;

• значения, допустимые для данного типа данных;

• операции, которые возможно над этими данными  выполнять.

 26) Массив (в некоторых языках программирования также таблицарядматрица) — тип или структура данных в виде набора компонентов (элементов массива), расположенных в памяти непосредственно друг за другом. При этом доступ к отдельным элементам массива осуществляется с помощью индексации, то есть ссылки на массив с указанием номера (индекса) нужного элемента. За счёт этого, в отличие от списка, массив является структурой с произвольным доступом[1].

Размерность массива — это количество индексов, необходимое для однозначного доступа к элементу массива[2][3]Форма или структура массива — количество размерностей плюс размер (протяжённость) массива для каждой размерности[4]; может быть представлена одномерным массивом[5].

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

Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив (колонка, столбец) нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.

В информатикеспи́сок — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором некоторое значение может встречаться более одного раза. Экземпляр списка является компьютерной реализациейматематического понятия конечной последовательности. Экземпляры значений, находящихся в списке, называются элементами списка (англ. item, entry либо element); если значение встречается несколько раз, каждое вхождение считается отдельным элементом.

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

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

27) Стеком (англ. stack) называется хранилище данных, в котором можно работать только с одним элементом: тем, который был добавлен в стек последним. Стек должен поддерживать следующие операции:

push

Добавить (положить) в конец стека новый элемент 

pop

Извлечь из стека последний элемент 

back

Узнать значение последнего элемента (не удаляя его) 

size

Узнать количество элементов в стеке 

clear

Очистить стек (удалить из него все элементы)

Хранить элементы стека мы будем в массиве. Для начала будем считать, что максимальное количество элементов в стеке не может превосходить константы MAX_SIZE, тогда для хранения элементов массива необходимо создать массив размера MAX_SIZE.

Объявим структуру данных типа stack.

     const int MAX_SIZE=1000;            struct stack {          int m_size;            // Количество элементов в стеке          int m_elems[MAX_SIZE]; // Массив для хранения элементов                stack();               // Конструктор          ~stack();              // Деструктор          void push(int d);      // Добавить в стек новый элемент          int pop();             // Удалить из стека последний элемент                                 // и вернуть его значение          int back();            // Вернуть значение последнего элемента          int size();            // Вернуть количество элементов в стеке          void clear();          // Очистить стек      };

Объявленная здесь структура данных stack реализует стек целых чисел. Поле структуры m_size хранит количество элементов в стеке в настоящее время, сами элементы хранятся в элементах массива m_elems с индексами 0..m_size-1. Элементы, добавленные позже, получают большие номера.

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

Элементы очереди будем также хранить в массиве. При этом из очереди удаляется первый элемент, и, чтобы не сдвигать все элементы очереди, будем в отдельном поле m_start хранить индекс элемента массива, с которого начинается очередь. При удалении элементов, очередь будет "ползти" дальше от начала массива. Чтобы при этом не происходил выход за границы массива, замкнем массив в кольцо: будем считать, что за последним элементом массива следует первый.

Описание структуры очередь:

     const int MAX_SIZE=1000;            struct queue {          int m_size;            // Количество элементов в очереди          int m_start;           // Номер элемента, с которого начинается очередь          int m_elems[MAX_SIZE]; // Массив для хранения элементов                queue();               // Конструктор          ~queue();              // Деструктор          void push(int d);      // Добавить в очередь новый элемент          int pop();             // Удалить из очереди первый элемент                                 // и вернуть его значение          int front();           // Вернуть значение первого элемента          int size();            // Вернуть количество элементов в очереди          void clear();          // Очистить очередь      };