
- •Типы и структуры данных. Опредления, классифиация.
- •Простые типы данных, операции над ними. Сильная и слабая типизация.
- •Массивы. Операции, способы предсавления, сложность операций.
- •Записи. Операции над ними, способы представления, сложность операций.
- •Объединения. Операции, представление. Сложность операций.
- •Множества. Операции, способы представления, сложность операций.
- •Последовательности вкратце
- •Линейные списки
- •Очереди.
- •Линейный список, сложность операции o(1)
- •Динамические струкутуры данных. Работа динамической памяти в c.
- •Деревья. Определения, классификация, способы представления.
- •Двоичные деревья, операции.
- •Дерево поиска. Основные операции, вычисление средней длины пути.
- •Виды сбалансированных деревьев, достоинства и недостатки.
- •Дерево оптимального поиска
- •Красно-черные деревья.
- •Splay-деревья.
- •Асоциативные массивы и хэши
Массивы. Операции, способы предсавления, сложность операций.
Объявление:
Состоит из компонент одного типа (базового), представляет собой структуру случайного доступа (для того, чтобы обозначить отдельную компоненту к имени добавляется индекс определенного типа, который выделяет нужную компоненту).
На Паскале – <имя>: array [Tindex] of Titem;
На Си – Titem <имя> [Tindex].
Типом индекса может быть любой простой тип, для которого существуют операции инкремента и декремента (все, кроме float), например:
A: array [(x, y, z)] of Integer – индексный тип состоит из перечислимого типа (м. б. координаты)
A: array[1..10] of Integer – индексный тип является перечислимым.
Характеристики:
Мощность (#)= произведению мощностей компонент
.
Размер – сумма размеров составляющих типов.
Sieof (array) = sizeof(Titem)*#Tindex.
Операции:
Индексация А[i];
Присваивание A=B
В Си и Паскале ее нет, но можем использовать цикл и присваивать покомпонентно или скопировав один участок памяти в другой memcopy(A, B, sizeof B) – копирует из B в А столько, сколько занимает В, но можем скопировать столько, сколько влезет в А.
Выделение подмассива
A[5:9] – выделяем подмассив с 5го по 9й элемент
A[5:9]=B[1:5] – типы должны бить эквивалентны.
Сравнение A==B
Можем сделать циклом или memcmp(A, B, sizeof B)
Инициализация A[]={1,2,3}.
Представление в памяти :
Массив следует отображать таким способом, чтобы можно было максимально просто и эффективно вычислять адреса его компонент.
Одномерные:
В Си операции с индексами напрямую связаны с указателями: A[i]=*(addr+i*sizeof(элемента)) – реальный адрес элемента массива в памяти можно вычислить, зная тип элемента и № нужного элемента.
Для двумерной матрицы:
-
4 элемента в строке
A[i][j] = *(A + (i-1)*N* sizeof(эл-та) + (j-1)*sizeof(эл-та)
В терминах Си: *(A[i]+j)=*(*(A+i)+j)
Int **A – двойной указатель, элемент A[i] должен быть уже указателем
Получаем массив указателей:
Упакованный/неупакованный способ хранения:
Е
сли
sizeof(эл)>sizeof(word)
Массив упакованный – память занимается максимально плотно, нет пустых мест => экономия памяти
Неупакованный – используется адрес, кратный машинному слову => быстрый доступ
Записи. Операции над ними, способы представления, сложность операций.
Запись (структура) - это набор из одной или более переменных, возможно различных типов, сгруппированных под одним именем для удобства обработки.
Определяется следующим образом:
Паскаль – record
S1 of T1
S2 of T2
…
Sn of Tn
End
В си – struct {
T1 S1;
T2 S2;
…
Tn Sn;
}
T1…Tn – типы данных; S1…Sn – поля записи.
Все поля могут иметь разный тип.
Имена полей – идентификаторы полей.
Структура случайного доступа к компонентам.
Все элементы начинаются каждый со своего места в памяти.
Применяют для БД и анкет.
Характеристики:
1)Мощность #record = #T1 * #T2 *… * #Tn;
2)Размер
записи – сумма размеров всех ее типов
.
Операции:
1)Можем обратиться к элементу записи, но не по индексу, а по имени A.name;
2)Присваивание А=В с помощью memcpy(A, B, sizeof B);
3)Сравнение А==В с помощью memcmp(A, B, sizeof B);
4)Инициализация
A = {“Андрей”, “Иванович”, 1990, m}.
Хранение записей в памяти:
Записи размещаются в памяти так, что их компоненты идут последовательно друг за другом.
Если:
sizeof(эл) кратен sizeof(word) – одновременно упакованный и неупкованный способ хранения
– выбираем между упакованным и неупак.
– элемент умещается в длину машинного слова