- •Ответы на экзаменационные вопросы по курсу «Алгоритмы и структуры данных»
- •1.Понятие типов и структур данных. Оперативные и внешние структуры.
- •2.Стандартные и пользовательские типы данных.
- •3.Определение и представление структур данных.
- •4.Классификация структур данных. Векторы и массивы как статистические структуры. Классификация структур данных
- •Статические структуры данных Векторы
- •Массивы
- •5.Записи и таблицы как статические структуры. Записи
- •6.Понятие списковой структуры. Стек как полустатическая структура. Операция над стеками
- •Алгоритмы основных операций со стеком
- •7.Очередь как полустатическая структура. Операции над очередью. Очередь
- •8.Недостатки полустатической очереди, методы их исправления. Очередь со сдвигом.
- •9.Кольцевая полустатическая очередь. Операции над кольцевой очередью. Деки, операции над ними.
- •10.Понятие динамических структур данных. Организация односвязных и двусвязных списков. Простейшие операции над односвязными списками. Динамические структуры данных
- •Связные списки
- •Односвязные списки
- •Кольцевой односвязный список
- •Двусвязный список
- •Кольцевой двусвязный список
- •Простейшие операции над односвязными списками
- •11.Реализация стеков с помощью списков.
- •Утилизация освободившихся элементов в многосвязных списках
- •13.Очередь и операции над ней при реализации связными списками
- •14.Операции вставки и извлечения элементов из списка. Сравнение этих операций с аналогичными в массивах. Недостаток связного списка по сравнению с массивом.
- •15.Пример алгоритма решения задачи извлечения элементов из списка по заданному признаку.
- •16.Пример алгоритма решения задачи вставки заданного элемента в упорядоченный список.
- •17.Элементы заголовков в списках; нелинейные связные структуры.
- •Нелинейные связанные структуры
- •18.Понятие рекурсивных структур данных. Деревья, их признаки и представления.
- •Деревья
- •Бинарные деревья
- •19.Алгоритм сведения m-арного дерева к бинарному; основные операции над деревьями; виды обхода.
- •Графическое пояснение алгоритма
- •Основные операции с деревьями
- •Рекурсивные алгоритмы обхода (прохождения) бинарных деревьев
- •20.Понятие поиска и ключей; назначение и структуры алгоритмов поиска.
- •21.Последовательный поиск и его эффективность.
- •22.Индексно-последовательный поиск.
- •23.Оптимизация поиска. Переупорядочивание таблицы с учетом вероятности поиска элемента. Дерево оптимального поиска.
- •24.Метод оптимизации поиска путем перестановки в начало списка.
- •25.Метод транспозиции при оптимизации поиска.
- •26.Бинарный поиск
- •27.Алгоритм создания упорядоченного бинарного дерева.
- •28.Поиск по бинарному дереву. Эффективность поиска по бинарному дереву.
- •29.Поиск по бинарному дереву с включением.
- •30.Поиск по бинарному дереву с удалением.
- •31.Алгоритмы прохождения бинарных деревьев. Рекурсивные алгоритмы обхода (прохождения) бинарных деревьев
- •32.Понятие сортировки, ее эффективность; классификация методов сортировки.
- •33.Сортировка методом прямого выбора.
- •34.Сортировка методом прямого включения. Сортировка методом прямого включения
- •Эффективность алгоритма прямого включения
- •35.Сортировка методом прямого обмена.
- •36.Быстрая сортировка.
- •37.Сортировка Шелла.
- •38.Сортировка с помощью бинарного дерева.
- •39.Сравнительный анализ эффективности методов сортировки.
- •40.Нерекурсивный алгоритм обхода бинарного дерева.
Кольцевой двусвязный список
Кольцевые двусвязные списки получают следующим образом: в качестве значения поля R последнего элемента принимают ссылку на первый элемент, а в качестве значения поля L первого элемента - ссылку на последний элемент.
Простейшие операции над односвязными списками
Вставка элемента в начало односвязного списка
Удаление элемента из начала односвязного списка
Вставка в начало списка
Надо вставить в начало односвязного списка элемент с информационным полем D. Для этого необходимо сгенерировать пустой элемент (P=GetNode). Информационному полю этого элемента присвоить значение D (INFO(P)=D), значению указателя на этот элемент присвоить значение указателя на начало списка (Ptr(P) = Lst), значению указателя начала списка присвоить значение указателя P (Lst = P).
P=GetNode
Info(P)=x
Ptr(P) = Lst
Lst = P
return
Удаление из начала списка
Надо удалить первый элемент списка, но запомнить информацию, содержащуюся в поле Info этого элемента. Для этого введем указатель P, который будет указывать на удаляемый элемент (P = Lst). В переменную X занесем значение информационного поля Info удаляемого элемента (X=Info(P)). Значению указателя на начало списка присвоим значение указателя следующего за удаляемым элемента (Lst = Ptr(P)). Удалим элемент (FreeNode(P)).
P = Lst
x=Info(P)
Lst = Ptr(P)
FreeNode(P)
return
11.Реализация стеков с помощью списков.
Любой односвязный список может рассматриваться в виде стека. Однако список по сравнению со стеком, реализованным на одномерном массиве имеет преимущество, так как заранее не задан его размер.
Стековые операции, применимые к спискам
Чтобы добавить элемент в стек, надо в алгоритме вставки в начало списка заменить указатель Lst на указатель S (операция Push(S, x).
P = GetNode
Info(P) = x
Ptr(P) = S
S = P
return
Проверка стека на пустоту Empty(S)
if S = Nil
then print “Стек пуст”
Stop
endif
return
Выборка элемента из стека POP(S)
Empty(S)
P = S
X = Info(P)
S = Ptr(P)
FreeNode(P)
return
Заметим, что проверку на переполнение для стека в виде списка делать не нужно.
12.Смысл и организация операций создания и удаления элемента динамической структуры. Понятие свободного списка и пула свободных элементов. Утилизация освободившихся элементов.
Организация операций Getnode, Freenode и утилизация освободившихся элементов
Для более эффективного использования памяти компьютера при работе его со списками, создается свободный список, имеющий тот же формат полей, что и у функциональных списков.
Если у функциональных списков разный формат, то надо создавать свободный список каждого функционального списка.
Количество элементов в свободном списке должно быть определено задачей, которую решает программа.
Как правило, свободный список создается в памяти машины как стек.
Создание (GetNode) нового элемента эквивалентно выборке элемента из свободного стека, а операция FreeNode - добавлению в свободный стек освободившегося элемента.
Пусть необходимо создать пустой список по типу стека с указателем начала списка - AVAIL. Рассмотрим функции, которые позволят создавать пустой элемент списка и освобождать элемент из списка.
Операция P = GetNode
Для реализации операции GetNode необходимо указателю сгенерированного элемента присвоить значение указателя начала свободного списка, а указатель начала свободного списка перенести к следующему элементу.
Перед этим надо проверить, есть ли элементы в списке. Пустота свободного списка (Avail = nil), эквивалентна переполнению функционального списка.
If Avail = Nil
then Print “Переполнение”
Stop
else P = Avail
Avail = Ptr(Avail)
endif
return
Операция FreeNode (P)
При освобождении элемента из функционального списка, он заносится в свободный список.
FreeNode(P)
Ptr(P) = Avail
Avail = P
return
