Структуры данных в C для себя, любимых • Live coding

Только тронь сортировку — и всплывают какие-то деревья, какие-то связные списки, ещё хэш-таблицы не дай бог. А на LeetCode сколько этого добра! А в книжках через слово — структуры данных во всех видах. Надо бы и нам этими структурами обзавестись. Их же в «голом» C нет почти совсем. Что-то (например, словарь) соберём в прямом эфире. А остальное — поймём, как собирать. И зачем. Таймлайн: 0:01 Вступление. Обзор текущей серии стримов про C 0:14 Переход от базовых тем к более продвинутым: структуры, указатели, архитектура 0:32 Призыв предлагать темы. Возможные направления — драйвера, многопоточность 1:09 Зачем изучать структуры данных в C 1:47 Введение: игра "дойди за 7 шагов" как модель для демонстрации кода 3:00 Правила игры и описание логики: массив, шаги, вероятность 4:47 Первый пример: реализация логики в плоском коде, без структур 6:00 Плохая архитектура: глобальные переменные, магические числа, зашитая логика 8:52 Проблемы масштабируемости: невозможность добавлять фичи (например, сокровища) 9:13 Переход к динамическому массиву: замена `#define` длины на параметр 10:55 Кольцевой буфер и хождение по кругу: реализация на указателях 11:02 Динамическое расширение данных: новые элементы, новые фичи 13:03 Типовые ошибки новичков при работе со структурами 14:28 Когда использовать `struct`: группировка логически связанных переменных 15:03 Пример: создание структуры `Cell` для одной клетки игрового поля 16:34 Добавление полей в структуру: позиция, шаг вперёд/назад, флаги 17:24 Указатели внутри структур: построение графа или связного списка 19:05 Динамический массив указателей на структуры 20:00 Пример: двумерная карта как массив указателей внутри `struct` 22:39 Рефакторинг: переход от плоского кода к структурам 25:00 Компиляция и отладка: типичные ошибки при объявлении `struct` 28:29 Прямой доступ к полям структуры (`cell.forward`, `cell.back`) 30:06 Итоги: замена логики на структуру с прямыми полями 31:07 Динамическое создание структур vs статический массив 33:02 Структура для хранения состояния игры: `GameState` 35:40 Передача структур в функции: по значению или по указателю 38:10 Унификация: замена 3+ переменных одной структурой 40:03 Создание функции `make_step(struct GameState *state)` 42:27 Рефакторинг: вынос логики в отдельные функции 44:41 Подготовка игрового поля: инициализация массива структур 46:27 Про важность английского при работе с именованием в коде 48:12 Что даёт структура: читаемость, расширяемость, повторное использование 50:09 Указатели в структурах: реализация связных списков 51:12 Указатели на `self-type`: `struct Node *next` 52:28 Построение цепочек и кольцевых списков через указатели 54:47 Подход к проектированию: от задачи к структуре 56:01 Где и как хранить структуры: статика, malloc, массивы 58:05 Структура как дескриптор для других данных (например, массивов) 59:09 Применение: словари, списки, каталоги, игры, микроконтроллеры 1:01:06 Архитектурный подход: когда переходить на новые структуры 1:02:11 Завершение стрима. Общий вывод: структуры — ключ к масштабируемости в C Конспект:

Смотрите также