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

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) многомерного массива можно обратиться пройдя по цепочке от основного дескриптора через соответствующие компоненты векторов Айлиффа.