
- •1. Общая классификация структур.
- •4. Стек. Доступ к элементу стека, адресация элемента. Алгоритмы исключения и включения элемента стека. Варианты конкретной реализации стека.
- •5. Очереди. Алгоритмы включения, исключения элемента и очистки очереди. Конкретная реализация очереди.
- •10. Разреженные матрицы, примеры их использования. Методы обработки разреженных матриц.
- •11. Деревья. Виды деревьев и способы их представления.
- •12. Двоичные деревья. Обход двоичных деревьев. Двоичные деревья поиска (ддп). Алгоритмы поиска в ддп.
- •15. Матричное и списковое представление графов.
- •16. Поиск путей в графах. Алгоритм поиска в глубину. Алгоритм поиска в ширину.
- •17. Алгоритм построения каркасов в графе.
- •18. Пути в графах. Алгоритм поиска Эйлерова и Гамильтонова пути в графе.
1. Общая классификация структур.
Структуры данных делятся на простые (числовые, символьные, логические, перечислеимые, указатели), статические (векторы, массивы, записи, матрицы), динамические (списки, графы, деревья), файловые (последовательные, прямого доступа, комбинированного доступа).
Массив – регулярная однородная структура со случайным доступом – все компоненты одного типа и одинаково доступны. Свойства: все элементы одного типа; размерность определяется при описании и не меняется; к каждому элементу есть прямой доступ. Отсюда, каждый элемент имеет одно имя и свой индекс. Бывают одномерными, двумерными и многомерными.
Вектор
– конечное упорядоченное множество
элементов одного типа. Элементы вектора
могут быть пронумерованы последовательными
целыми числами (индексами), называемыми
селекторами
элементов вектора. Описание вектора
должно содержать имя, минимальный и
максимальный индексы, длину элемента.
Основная операция: доступ к элементу,
логический (по индексу a[i]) и физический
(по адресу памяти).
дескриптор вектора
– имя, адрес первого элемента, индекс
начального и конечного, тип элемента и
длина. Доступ к j элементу:
Матрица
– одномерный массив состоящий из
векторов. Доступ осуществляется по двум
индексам: номеру строки и номеру столбца.
Логически – матрица это прямоугольный
массив, каждый элемент характеризуется
двумя индексами. Физически - можно
хранить двумя способами, отображением
по строкам и отображением по столбцам.
Структура вектора векторов, Mt[l1..k1,
l2..k2] или Mt[l1..k1][l2..k2].
Чтобы развернуть
такой вектор в «линию» нужна линейная
функция адресации:
при отображении по строкам.
Многомерный массив реализуется как вектор массивов на 1 меньшей размерности. Логический массив можно преобразовать в физическую одномерную структуру путем процесса линеаризации – линейной последовательностью элементов.
2. Оценка эффективности алгоритмов, временная и емкостная сложность алгоритмов.
Эффективность алгоритма оценивается: временем его работы (временная сложность) и объёмом памяти, требуемой для выполнения (емкостная сложность). Время выполнения зависит от порядка следования элементов и определяется размером входа – число элементов на входе или число байт памяти для представления данных. Время работы оценивается числом элементарных операций для каждой строки алгоритма.
3. Выделение памяти под статические и динамические массивы. Расчет адресов памяти элементов массива с использованием дескриптора массива. Вектора Айлиффа.
Память под статические массивы выделяется в момент входа в функцию/при запуске программы, освобождается при выходе из программы/функции.
Для статических массивов компилятор создаёт дескрипторы. Для динамических массивов память выделяется «вручную» в ходе выполнения программы с помощью операторов malloc или new.
В дескрипторе массива содержатся:
-имя переменной V
-индекс 1-го элемента массива A1
-индекс последнего элемента массива Aj
-длина элемента L
-тип элемента T
Расчёт адреса: Addr(V[i]) = A1 + L * i
Представление массива с помощью векторов Айлиффа:
Для массива любой мерности формируется набор дескрипторов: основного и несколько уровней вспомогательных дескрипторов, называемых векторами Айлиффа. Каждый вектор Айлиффа определенного уровня содержит указатель на нулевые компоненты векторов Айлиффа следующего, более низкого уровня, а векторы Айлиффа самого нижнего уровня содержат указатели групп элементов отображаемого массива. Основной дескриптор массива хранит указатель вектора Айлиффа первого уровня. При такой организации к произвольному элементу В(j1,j2,...,jn) многомерного массива можно обратиться пройдя по цепочке от основного дескриптора через соответствующие компоненты векторов Айлиффа.