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

21. Динамические структуры данных. Классификация.

Классификация:

a) Несвязанные динамические структуры

b) Связанные динамические структуры

1) Линейной структуры

a) Односвязные: 1) очередь; 2) стек; 3) дек (двухсторонняя очередь); 4) список.

b) Многосвязные: многосвязный линейный список.

2) Кольцевой структуры: 1) односвязный линейный список; 2) многосвязный линейный список.

3) Разветвлённой структуры:

a) Деревья: 1) Двоичные (бинарные); 2) Разветвлённые.

b) Графы

22. Связные списки. Виды связных списков. Способы представления.

23. Односвязные линейные списки. Последовательное распределение.

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

Из определения следует, что каждый элемент списка содержит поле данных (Data) (оно может иметь сложную структуру) и поле ссылки на следующий элемент (next). Поле ссылки последнего элемента должно содержать пустой указатель (NULL).

Так как ссылка всего одна (только на следующий элемент), то такой список является односвязным.

1. ПОСЛЕДОВАТЕЛЬНОЕ РАСПРЕДЕЛЕНИЕ В ПАМЯТИ.

При последовательном распределении в памяти список размещается в смежных ячейках памяти.

Достоинства последовательного размещения:

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

2. Экономия памяти: элемент используется только для хранения

информации. Недостатки последовательного размещения:

1. При включении/удалении элемента в середине списка необходимо сдвигать большое количество элементов.

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

24. Односвязные линейные списки. Связное распределение.

25. Односвязные линейные списки. Добавление и удаление элементов.

26. Односвязные линейные списки. Обход списков.

27. Двусвязные списки. Двусвязные кольцевые списки.

28. Понятие рекурсии. Рекурсивные процедуры и функции. Использование рекурсии.

29. Стеки. Определение и основные понятия. Способы реализации стеков.

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

· Стек - последовательность элементов, включение и исключение элементов в которую производится только с одного конца

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

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

Рассмотрим пример организации стека, элементами которого являются целые переменные.

30. Очереди. Определение и основные понятия. Способы реализации очередей.

Очередь - простая динамическая структура данных, в которой элементы добавляются в один конец, а извлекаются из другого. FIFO (First In First Out).

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

31. Нелинейные структуры данных. Мультисписки, слоеные списки. Деревья.

32. Деревья. Основные определения и свойства.

33. Деревья. Классификация деревьев.

34. Деревья. Представление деревьев.

35. Деревья. Обходы деревьев.

Дерево – это связный неориентированный граф без циклов (илисвязный граф с минимальным числом ребер).

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

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

а) Дерево:

A

B C D

E F

б) Обход в ширину:A A, B, C, D, E, F B C D

в) Обход в глубину:A, B, C, E, F, DE F

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

36. Поиск. Понятие таблицы. Алгоритмы поиска.

37. Линейный поиск.

38. Бинарный поиск.

39. Интерполяционный поиск. Однородный бинарный поиск

Однородный бинарный поиск.

Эта модификация бинарного поиска требует сохранения таблицы значений величин D[1] ... D[max] max= |logN|+2. Эти величины отражают возможное L - изменение текущего индекса i на каждом шаге поиска i=i(+-)d, где d - один из элементов массива D. При этом может достигаться экономия времени за счет более эффективной программы. Схема алгоритма имеет вид.

Время работы алгоритма t примерно оценивается формулой:

t=a*logN, где a - неизвестная константа, зависящая от программной реализации алгоритма, а также от результата поиска: удачен-неудачен.