Menu
CoddyTech
Путь обучения

Структуры данных и алгоритмы на Lua

В Lua есть одна структура данных, таблица, поэтому каждую структуру этого пути вы собираете из неё: стек из её части-массива, очередь с двумя индексами, дерево из таблиц, которые ссылаются на таблицы. На этом пути вы пишете каждую из них на Lua, затем с их помощью сортируете, применяете рекурсию и обходите графы, а завершаете задачами с собеседований, проверяемыми тестами. Бесплатно, в браузере, с сертификатом за большинство курсов.

377 уроков284 задачи702 вопросов квиза

DSA на Lua, шаг за шагом

38 курсов377 уроков284 задачи702 вопросов квиза

Каждый шаг состоит из уже существующих курсов Coddy, и каждая кнопка «Начать» открывает их на Lua. Три курса, которых пока нет на Lua, перечислены после шагов.

  1. 1
    Начать этот шагНачатьСтек, очередь, двоичное дерево, хеш-таблица и связный список: каждую структуру вы пишете на Lua с нуля, а затем применяете для решения задач. Таблица Lua уже является хеш-таблицей, поэтому этот шаг показывает, что она делает за вас и как превратить её в остальные четыре структуры.Начать
  2. 2
    Начать этот шагНачатьДвусвязный список, кучи и очереди с приоритетом, префиксные деревья, графы и самобалансирующееся АВЛ-дерево. В Lua узел префиксного дерева представляет собой просто таблицу с ключами по следующему символу, а граф является таблицей списков соседей, поэтому каждая структура сложна ровно настолько, насколько сложна её идея.Начать
  3. 3
    Начать этот шагНачатьПузырьковая, выбором, вставками, слиянием, быстрая, пирамидальная, подсчётом и поразрядная сортировки: вы пишете их на Lua и наблюдаете в визуализаторе. table.sort сортирует неустойчиво, как и сказано в справочном руководстве Lua; после этого шага вы знаете, почему сортировка отказывается от устойчивости и как индекс для разрешения равенств её возвращает.Начать
  4. 4
    Начать этот шагНачатьЗадачи на рекурсию на Lua, где есть настоящие хвостовые вызовы: при вызове в хвостовой позиции, return f(x), вызываемая функция переиспользует запись стека вызывающей, поэтому хвостовая рекурсия в роли цикла никогда не увеличивает стек. Обычная глубокая рекурсия всё равно заканчивается переполнением стека. Динамическое программирование и битовые операции перечислены после шагов, так как они преподаются на Python и C++.НачатьСвоя страница
  5. 5
    Начать этот шагНачатьПоиск в ширину и в глубину, Дейкстра, Беллман-Форд, топологическая сортировка, Крускал и Прим на Lua, поверх графа, который вы построили на втором шаге. В Lua нет очереди с приоритетом, поэтому для алгоритма Дейкстры нужна именно куча со второго шага, а поиску в ширину нужна очередь, которая никогда не вызывает table.remove(t, 1).Начать
  6. 6
    Начать этот шагНачатьДесять наборов задач с собеседований и два банка задач по программированию на Lua с проверкой по тестам: незнакомые задачи, решение без туториалов, с таблицами, превращёнными в то, что нужно каждой задаче.Начать
Что вы получаете
Всё, что вам нужно, чтобы научиться программировать

Учитесь на практике

Пишите реальный код, работайте с базами данных, создавайте сайты и осваивайте ИИ-промпты. Наши интерактивные уроки охватывают все навыки, необходимые современным разработчикам.

playground.js
Редактор кода
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
Тест №1test Case Success icon
Тест №2test Case Success icon
Тест №3test Case Failure icon
Ввод
"Alex"
Вывод
"Hello, Coddy! Alex"

Создайте свою серию

Будьте последовательны и наблюдайте за своим прогрессом! Отслеживайте ежедневную привычку программирования, защищайте свою серию с помощью дней заморозки и получайте награды за каждый день.

12 дней подряд

Возвращайтесь завтра, чтобы сохранить серию!

fire Filled icon
left icon

January 2026

right icon

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

product Double Or Nothing icon

Всё или ничего

День 5 из 7

fire Freeze icon

Заморозка серии

2 left

Код где угодно

Возьмите свое путешествие по программированию с собой! Без настройки, без загрузок - просто откройте и начните программировать. Доступно на iOS, Android и Web с рейтингом 4.9 звезд.

Python
7Серия
250Очки
5Энергия
Переменные
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Right Done icon
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Left Done icon
journey Hex Active Base iconjourney Hex Active Shadow iconjourney Hex Active Top iconjourney Lesson Theory Challenge icon
ПРОДОЛЖИТЬ
journey Path Right icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson Theory Challenge icon
journey Path Left icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson All icon
Путь
Цели
Таблица лидеров
Профиль
4.9
ЗвездаЗвездаЗвездаЗвездаЗвезда
Рейтинг

Вы не одиноки

Соревнуйтесь в глобальных рейтингах, приглашайте друзей, чтобы получать награды, и празднуйте успехи друг друга. Программировать веселее с друзьями!

Лига Претендентов
Лига ПретендентовТоп 7 продвигаются
leaderboard First icon1
avatar 1 icon
fire Filled icon
Alex7+ Days
2840
leaderboard Second icon2
avatar 2 icon
fire Filled icon
Jordan7+ Days
2650
leaderboard Third icon3
avatar 3 icon
fire Filled icon
Sam7+ Days
2420
4
avatar 4 icon
Casey
2180
5
avatar placeholder icon
fire Filled icon
Morgan7+ Days
1950
leaderboard Arrow Up iconЗона продвиженияleaderboard Arrow Up icon

Учитесь как угодно

Читайте, слушайте, проверяйте себя, спрашивайте у ИИ или ищите то, что уже изучили. Каждый урок подстраивается под вас.

Введение в переменные
Аудио

Переменная - это именованный контейнер, который хранит значение для последующего использования.

В Python вы создаёте её, написав имя, знак равенства и значение, которое нужно сохранить.

Значение может меняться - переприсваивание просто направляет имя на новое значение.

1xSarah

Ваш сертификат

Получайте сертификаты за каждый завершенный курс. Добавьте их в свой профиль LinkedIn и резюме, чтобы продемонстрировать работодателям свои навыки программирования.

CoddyСертификат о прохождении
Настоящим подтверждается, чтоИван Ивановуспешно завершил(а)
python iconОсновы Python
Подтверждено
Датаянв. 2026
LinkedInДобавить в LinkedIn

Почему учить DSA на Lua с Coddy

  • Одна структура, а из неё все остальные. Таблица Lua объединяет часть-массив и хеш-часть, и больше ничего встроенного нет: ни типа списка, ни множества, ни очереди, ни кучи. В Lua любая структура состоит из таблиц, ссылающихся на таблицы, и нагляднее, чем здесь, вы не увидите, чем на самом деле являются связный список или дерево.
  • Для Roblox, игр и плагинов. На Lua работают Roblox (в виде Luau), игровые скрипты, конфигурация Neovim и скрипты Redis, а игровой код состоит из структур данных: инвентарь представляет собой хеш-таблицу, очерёдность ходов устроена как очередь, а поиск пути сводится к поиску по графу. Изучая структуры на Lua, вы изучаете их на языке, на котором уже пишете скрипты.
  • Почти весь путь на Lua. Все структуры данных, сортировки, алгоритмы на графах, задачи на рекурсию и наборы задач с собеседований преподаются на Lua. Три курса преподаются на других языках и перечислены после шагов, у каждого своя ссылка: динамическое программирование и серия по интервью на Python (Python), а также битовые операции (C++). Всё, что остаётся на Lua, сделано из таблиц, от первого стека до последней задачи с собеседования.
  • Проверка как на собеседовании. Каждый урок заканчивается задачей на Lua с автопроверкой по тестам, а когда решение не проходит, Bugsy читает ваш код и подталкивает к исправлению, не выдавая ответ. Бесплатный сертификат за большинство курсов, каждый с проверкой по собственной ссылке.

Частые вопросы о DSA на Lua

Подходит ли Lua для структур данных и алгоритмов?

Для изучения на удивление хорошо: когда строить можно только из таблиц, каждая структура становится явной, а код остаётся коротким. Подвох в том, что таблицы тихо прощают ошибки: массивы по соглашению начинаются с 1, отсутствующий ключ возвращает 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 иногда даёт неправильную длину?

Потому что # возвращает границу таблицы: такой индекс n, при котором t[n] не равно nil, а t[n + 1] равно. У правильной последовательности ровно одна граница, её длина; поставьте nil в середину, и границ может стать несколько, а # может вернуть любую из них. Поэтому никогда не храните nil в массиве, длину которого измеряете через #, а в структурах с пропусками, например в очереди с двумя индексами, отслеживайте размер сами.

Важны ли структуры данных для скриптов в Roblox?

Да, как только игра перерастает горстку объектов. Инвентарь представляет собой хеш-таблицу, очерёдность появления или ходов устроена как очередь, список кулдаунов может быть очередью с приоритетом, а поиск пути по карте сводится к поиску по графу. Luau, язык, на котором пишут скрипты для Roblox, происходит от Lua 5.1 и сохраняет его таблицы, массивы с индексацией с 1 и оператор #, так что всё, что вы пишете здесь, переносится напрямую.

Какие курсы этого пути не преподаются на Lua?

Три: динамическое программирование и серия по интервью на Python преподаются на Python, а битовые операции на C++. Они перечислены после шагов, каждый со ссылкой, которая открывает курс на его собственном языке. Мемоизация в Lua хранится в таблице; битовые операторы появились только в Lua 5.3, где есть &, |, << и >> из C++, а XOR и NOT оба записываются как ~.

Нужно ли знать Lua, прежде чем начинать этот путь?

Как минимум таблицы, функции, циклы и локальные переменные; метатаблицы пригодятся, если вы хотите, чтобы структуры вели себя как объекты. Если это для вас новое, курс Lua от Coddy сначала бесплатно разберёт эти темы, а этот путь начинается там, где он заканчивается.

Другие пути обучения

Те же курсы, выстроенные под другую роль. Прогресс сохраняется: курс, пройденный на одном пути, засчитывается на каждом пути, куда он входит.

Все пути обучения
Иллюстрация языков программирования Coddy

Начните путь Структуры и алгоритмы бесплатно

Начать учиться