Структуры данных и алгоритмы на Lua
В Lua есть одна структура данных, таблица, поэтому каждую структуру этого пути вы собираете из неё: стек из её части-массива, очередь с двумя индексами, дерево из таблиц, которые ссылаются на таблицы. На этом пути вы пишете каждую из них на Lua, затем с их помощью сортируете, применяете рекурсию и обходите графы, а завершаете задачами с собеседований, проверяемыми тестами. Бесплатно, в браузере, с сертификатом за большинство курсов.
377 уроков228 задачи702 вопросов квиза
- Для начинающих
Помощь ИИ при написании кода
Практические интерактивные уроки
Аудио-озвучка к каждому уроку
Тесты для проверки знаний
23 бесплатных сертификатов на протяжении пути
DSA на Lua, шаг за шагом
Каждый шаг состоит из уже существующих курсов Coddy, и каждая кнопка «Начать» открывает их на Lua. Три курса, которых пока нет на Lua, перечислены после шагов.
- 1Шаг 15 курсов, по порядку
- 2Шаг 2
Серия по структурам данных, часть вторая
Начать этот шагНачатьДвусвязный список, кучи и очереди с приоритетом, префиксные деревья, графы и самобалансирующееся АВЛ-дерево. В Lua узел префиксного дерева представляет собой просто таблицу с ключами по следующему символу, а граф является таблицей списков соседей, поэтому каждая структура сложна ровно настолько, насколько сложна её идея.Начать5 курсов, по порядку- Двусвязный список — Серия «Структуры данных» №614 уроков6 задачи
- Кучи и очереди с приоритетом — Структуры данных №714 уроков6 задачи
- Префиксные деревья (Trie) — Серия «Структуры данных» №814 уроков12 задачи
- Графы — Серия «Структуры данных» №914 уроков12 задачи
- AVL-дерево — Серия «Структуры данных» №1016 уроков6 задачи
- 3Шаг 3
Алгоритмы сортировки
Начать этот шагНачатьПузырьковая, выбором, вставками, слиянием, быстрая, пирамидальная, подсчётом и поразрядная сортировки: вы пишете их на Lua и наблюдаете в визуализаторе.table.sortсортирует неустойчиво, как и сказано в справочном руководстве Lua; после этого шага вы знаете, почему сортировка отказывается от устойчивости и как индекс для разрешения равенств её возвращает.Начать8 курсов, по порядку- Сортировка пузырьком11 уроков10 задачи
- Сортировка выбором — серия DSA9 уроков3 задачи54 вопросов
- Сортировка вставками — серия DSA9 уроков3 задачи
- Сортировка слиянием — Серия DSA9 уроков3 задачи52 вопросов
- Быстрая сортировка — серия DSA9 уроков3 задачи52 вопросов
- Пирамидальная сортировка — Серия DSA9 уроков3 задачи54 вопросов
- Сортировка подсчетом — Серия DSA9 уроков3 задачи52 вопросов
- Поразрядная сортировка — серия DSA9 уроков3 задачи55 вопросов
- 4Шаг 4
Рекурсивное мышлениеСвоя страница
Начать этот шагНачатьЗадачи на рекурсию на Lua, где есть настоящие хвостовые вызовы: при вызове в хвостовой позиции,return f(x), вызываемая функция переиспользует запись стека вызывающей, поэтому хвостовая рекурсия в роли цикла никогда не увеличивает стек. Обычная глубокая рекурсия всё равно заканчивается переполнением стека. Динамическое программирование и битовые операции перечислены после шагов, так как они преподаются на Python и C++.НачатьСвоя страница - 5Шаг 5
Алгоритмы на графах
Начать этот шагНачатьПоиск в ширину и в глубину, Дейкстра, Беллман-Форд, топологическая сортировка, Крускал и Прим на Lua, поверх графа, который вы построили на втором шаге. В Lua нет очереди с приоритетом, поэтому для алгоритма Дейкстры нужна именно куча со второго шага, а поиску в ширину нужна очередь, которая никогда не вызываетtable.remove(t, 1).Начать7 курсов, по порядку- Поиск в ширину — Алгоритмы на графах9 уроков3 задачи54 вопросов
- Поиск в глубину — алгоритмы на графах9 уроков3 задачи54 вопросов
- Алгоритм Дейкстры — Алгоритмы на графах9 уроков3 задачи54 вопросов
- Алгоритм Беллмана-Форда — Алгоритмы на графах9 уроков3 задачи54 вопросов
- Топологическая сортировка — алгоритмы на графах9 уроков3 задачи55 вопросов
- Алгоритм Краскала — Алгоритмы на графах9 уроков3 задачи57 вопросов
- Алгоритм Прима — Алгоритмы на графах9 уроков3 задачи55 вопросов
- 6Шаг 6
Подготовка к собеседованию
Начать этот шагНачатьДесять наборов задач с собеседований и два банка задач по программированию на Lua с проверкой по тестам: незнакомые задачи, решение без туториалов, с таблицами, превращёнными в то, что нужно каждой задаче.Начать12 курсов, по порядку- Задачи для ИТ-собеседований — Набор I3 уроков3 задачи
- Задачи для собеседований по программированию — Набор II3 уроков3 задачи
- Задачи для технического интервью — Набор III3 уроков3 задачи
- Задачи для собеседований — Набор IV3 уроков3 задачи
- Задачи для подготовки к интервью — Пакет V3 уроков3 задачи
- Задачи для собеседований — Пакет VI3 уроков3 задачи
- Задачи для собеседований — Пакет VII3 уроков3 задачи
- Задачи для собеседований — Пакет VIII3 уроков3 задачи
- Задачи по программированию для интервью — Пакет IX3 уроков3 задачи
- Задачи по программированию для собеседований - X3 уроков3 задачи
- Задачи по программированию32 уроков31 задачи
- Задачи по программированию: Часть 225 уроков24 задачи
Learn by Doing
Write real code, query databases, build websites, and master AI prompts. Our interactive lessons cover every skill modern developers need.
Build Your Coding Streak
Stay consistent and watch your progress grow! Track your daily coding habit, protect your streak with freeze days, and earn rewards for showing up every day.
12 days streak
Return tomorrow to keep your streak!
January 2026
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
21
22
23
24
25
26
27
28
29
30
Double or Nothing
Day 5 of 7
Streak Freeze
2 left
Code Anywhere, Anytime
Take your coding journey on the go! No setup, no downloads - just open and start coding. Available on iOS, Android and Web with 4.9 star ratings.
You're Not Alone in This
Compete on global leaderboards, invite friends to earn rewards, and celebrate each other's wins. Coding is better with friends!
Every way to learn
Read, listen, test yourself, ask the AI, or look up anything you've already covered. Every lesson meets you where you are.
A variable is a named container that stores a value you can reference later in your program.
In Python, you create one by writing the name, an equals sign, then the value you want to store.
The value can change over time - reassigning the name simply points it to a new value.
Prove Your Skills
Earn certificates for every course you complete. Add them to your LinkedIn profile and resume to showcase your coding expertise to employers.
Почему учить DSA на Lua с Coddy
- Одна структура, а из неё все остальные. Таблица Lua объединяет часть-массив и хеш-часть, и больше ничего встроенного нет: ни типа списка, ни множества, ни очереди, ни кучи. В Lua любая структура состоит из таблиц, ссылающихся на таблицы, и нагляднее, чем здесь, вы не увидите, чем на самом деле являются связный список или дерево.
- Для Roblox, игр и плагинов. На Lua работают Roblox (в виде Luau), игровые скрипты, конфигурация Neovim и скрипты Redis, а игровой код состоит из структур данных: инвентарь представляет собой хеш-таблицу, очерёдность ходов устроена как очередь, а поиск пути сводится к поиску по графу. Изучая структуры на Lua, вы изучаете их на языке, на котором уже пишете скрипты.
- Почти весь путь на Lua. Все структуры данных, сортировки, алгоритмы на графах, задачи на рекурсию и наборы задач с собеседований преподаются на Lua. Три курса преподаются на других языках и перечислены после шагов, у каждого своя ссылка: динамическое программирование и серия по интервью на Python (Python), а также битовые операции (C++). Всё, что остаётся на Lua, сделано из таблиц, от первого стека до последней задачи с собеседования.
- Проверка как на собеседовании. Каждый урок заканчивается задачей на Lua с автопроверкой по тестам, а когда решение не проходит, Bugsy читает ваш код и подталкивает к исправлению, не выдавая ответ. Бесплатный сертификат за большинство курсов, каждый с проверкой по собственной ссылке.
Частые вопросы о DSA на Lua
Подходит ли Lua для структур данных и алгоритмов?
nil вместо ошибки, а оператор длины #t надёжен только для последовательности без дыр из nil. Собеседования на Lua проводятся редко, поэтому, если вы готовитесь к собеседованию, наборы задач с собеседований есть и на том языке, на котором вы будете его проходить.Как сделать стек и очередь из таблицы Lua?
table.insert(t, x) добавляет элемент, а table.remove(t) снимает его. С очередью нужно аккуратнее, потому что table.remove(t, 1) сдвигает все оставшиеся элементы на одну позицию, так что каждое извлечение стоит O(n). Вместо этого храните два индекса, first и last: добавляйте по last + 1, читайте по first, записывайте в эту ячейку nil и сдвигайте индекс, и извлечение станет константным по времени. На первом шаге вы пишете и то и другое.Почему #t в Lua иногда даёт неправильную длину?
#t в Lua иногда даёт неправильную длину?# возвращает границу таблицы: такой индекс n, при котором t[n] не равно nil, а t[n + 1] равно. У правильной последовательности ровно одна граница, её длина; поставьте nil в середину, и границ может стать несколько, а # может вернуть любую из них. Поэтому никогда не храните nil в массиве, длину которого измеряете через #, а в структурах с пропусками, например в очереди с двумя индексами, отслеживайте размер сами.Важны ли структуры данных для скриптов в Roblox?
#, так что всё, что вы пишете здесь, переносится напрямую.Какие курсы этого пути не преподаются на Lua?
&, |, << и >> из C++, а XOR и NOT оба записываются как ~.