Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы и структ дан.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
234 Кб
Скачать
☆

Коллекция.

Линейные:

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

Нелинейные :

Иерархические (деревья, НЕАР-дерево), групповые (множество, граф, сеть).

Структура – файлы.

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

Структура – массив.

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

Структура – запись.

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

Struct student

{

int id;

Char name[20];

};

Коллекция с последовательным доступом. Более общей коллекций является список, сохраняющий элементы в последовательном порядке. Реализовать списки можно с помощью массивов и указателей. При реализации списков с помощью массивов элементы списка располагаются в смежных ячейках массива. Это представление позволяет легко просматривать содержимое списка и вставлять новые элементы в его коллекции. Но вставка нового элемента в середину списка требует перемещения всех последующих элементов на одну позицию к концу массива, чтобы освободить место для нового элемента. Удаление элемента также требует перемещение элементов, чтобы закрыть освободившуюся ячейку. При использовании массива, мы определяем тип лист как запись, имеющую два поля: 1. Элементы массива, размер которого считается достаточным для хранения списков любой длины. 2. Целочисленного типа указывает на позицию последнего элемента списка в массиве.

Struct list

{

Int mas[30];

Int last;

};

При реализации списков помощью указателей, независимые элементы в связанном списке называют узлами. Узел (node) состоит из поля данных и указателя обозначающего следующий элемент в списке. Связанный список состоит из множества узлов, первый элемент которого – это узел, на который указывает голова. Список связывает узлы от первого до хвоста. Хвост определяется как узел, чье поле указателя содержит пустое значение (NULL). Для списка без узлов голова будет одержать значение NULL. Таким образом, списковая структура данных представляет собой множество переменных, связанных между собой указателями. Каждый элемент такой структуры содержит 1 или несколько указателей на аналогичные элементы.

Struct node

{

Int data;

Node *next; // единственный указатель

Node *prev, *next;

Node *link [10];

Node **plinks;

};

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

Для односвязного списка наиболее простыми являются операции включения и исключения элементов в начале и конце списка, поэтому они используются для моделирования таких структур как стеки и очереди. Стеки и очереди – это особые версии линейного списка с ограниченным доступом к элементам данных. В стеки элементы добавляются и удаляются только в один конец списка, называемый вершиной. LIFO – тип хранения в стеке. Абстрактные типы данных семейства стек обычно используют следующие пять операторов: 1. Push – вставляет элемент в вершину стека. 2. Pop – служит для извлечения или удаления элемента из вершины стека. 2. Top (pick) – возвращает значение элемента из вершины стека. 4. Stack Empty – возвращает единицу, если стек пустой и ноль в противном случае. 5. Clear Stack – делает стек пустым.

Очередь – это список с доступом в начале и в конце. Элементы вставляется в конец списка, а удаляются из начала. Тип хранения соответствует FIFO. Для работы с очередями используются следующие операторы: 1. QInsert - записывает элемент в конец очереди. 2. QDelete – удаляет элемент из начала очереди. 3. Qfront - возвращает значение элемента в начале очереди. 4. Qlen – определяет количество элементов в очереди. 5. QEMPTY – возвращает 1 если очередь пуста, 0 в противном случае. 6. QClear – очищает очередь.

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