1. Записи
2. Массивы.
3. Адресация в многомерных массивах: C-style, FORTRAN-style.
4. Данные как «белый ящик» и как «черный ящик».
5. Стеки, очереди и их применение в различных задачах.
6. Реализация стека с помощью массива в С.
7. Связные списки: структура и свойства.
8. Операции над списками.
9. Реализация стека с помощью связного списка в С.
10. Двусвязные списки, кольцевые списки, двусвязные кольцевые списки.
3. ЗАПИСИ
• Объединяют разнотипные данные, относящиеся к одному
объекту из предметной области.
struct Point { struct Order {
double x, y, z; struct User *user;
}; struct Date date;
int nitems;
struct Planet { struct OrderItem *items;
const char *name; };
double mass;
double radius;
/* .... */
};
4. МАССИВЫ
• Множество однотипных данных:
• Набор временных отсчетов.
• Векторы и матрицы.
• Набор строк.
• Элементы массива хранятся в смежных ячейках памяти.
5. ОДНОМЕРНЫЙ МАССИВ
• A0 – адрес начала массива.
•s – размер элемента массива.
• Чему равен A(n) – адрес n-го элемента массива?
int a[5];
Индекс 0 1 2 3 4
Адрес A0 ? ? ? ?
11. ДВА СПОСОБА СМОТРЕТЬ
НА ДАННЫЕ
«Белый ящик» «Черный ящик»
(прозрачный) (непрозрачный)
Устройство Операции
12. ОПЕРАЦИИ НАД ДАННЫМИ
• Записи: • Массив:
• Прочитать элемент по имени. • Прочитать элемент по
индексу.
• Изменить элемент по имени.
• Изменить элемент по индексу.
• Добавить новый элемент.
• Изменить размер массива.
• Удалить элемент.
• Добавить элемент.
• Удалить элемент.
13. «ПРОДВИНУТОСТЬ»
СТРУКТУР ДАННЫХ
• Количество«степеней свободы» (возможных операций со
структурой данных).
• Рост количества степеней свободы возможен:
• за счет усложнения внутренней структуры;
• за счет понижения быстродействия.
14. СТЕК
• Абстрактный тип данных.
• Базовые операции:
• Вставка элемента (push).
• Извлечение элемента
(pop).
push pop
• Принцип LIFO (last-in, first-
out) – «последним вошел,
первым вышел».
15. ПРИМЕНЕНИЯ СТЕКА
• Машинный стек.
• Вычисление выражений в обратной польской записи:
• (1+2*4+3) →124*+3+
• Язык Postscript.
• Поиск пути в лабиринте.
• Задачи с иерархией элементов (обход дерева).
16. ОЧЕРЕДЬ
• Абстрактный тип данных.
• Базовые операции:
• Вставка элемента (enqueue).
• Извлечение элемента
(dequeue). enqueue
• Принцип FIFO (first-in, first-
out) – «первым вошел, первым
вышел». dequeue
18. РЕАЛИЗАЦИЯ СТЕКА
• Статический массив достаточно большого размера.
int stack[99999];
int sp = 0;
stack[sp] = 10;
sp++;
stack[sp] = 20;
sp++;
sp--;
stack[sp]; // => 20
19. СВЯЗНЫЕ СПИСКИ
• Связныйсписок (linked list) – линейно упорядоченный
набор элементов, каждый из которых содержит связь со
следующим элементом.
Голова
Хвост
20. ОПЕРАЦИИ СО СВЯЗНЫМ
СПИСКОМ
• Вставка элемента в голову.
• Вставка в середину.
• Удаление элемента.
• Обход списка.
• Поиск элемента по критерию.
21. СВОЙСТВА СВЯЗНОГО
СПИСКА
• Динамическая структура данных.
• Вставка и удаление выполняются за O(1).
• Медленный поиск по номеру (индексирование): O(n).
22. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
СПИСКОВ
• Многочлены (символьная алгебра).
• Реализация стеков и очередей.
• Цепочки кластеров в файловых системах.