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

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