Menu
Coddy logo textTech
Путь обучения

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

Базовые библиотеки Dart дают больше, чем у большинства языков: в dart:collection есть Queue, LinkedList и splay-деревья, но кучи или очереди с приоритетом в базовом SDK нет. На этом пути вы пишете каждую структуру на Dart, где строгая null safety превращает каждую ссылку, которой может не оказаться, в Node?, и такую ссылку нужно проверить, затем с их помощью сортируете, применяете рекурсию и обходите графы, а завершаете задачами с собеседований, проверяемыми тестами. Бесплатно, в браузере, с сертификатом за большинство курсов.

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

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

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

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

  1. 1
    Начать этот шагНачатьСтек, очередь, двоичное дерево, хеш-таблица и связный список: каждую структуру вы пишете на Dart с нуля, а затем применяете для решения задач. После этого шага вы знаете, что делают за вас List, Queue и Map и почему литерал Map помнит порядок, в котором вы вставляли ключи.Начать
  2. 2
    Начать этот шагНачатьДвусвязный список, кучи и очереди с приоритетом, префиксные деревья, графы и самобалансирующееся АВЛ-дерево. После этого шага DoubleLinkedQueue становится структурой, которую вы уже писали, кучу, которой нет в базовом SDK, вы можете написать сами, а в SplayTreeMap вы видите упорядоченное дерево, которое понимаете: самонастраивающееся там, где ваше сбалансировано по высоте.Начать
  3. 3
    Начать этот шагНачатьПузырьковая, выбором, вставками, слиянием, быстрая, пирамидальная, подсчётом и поразрядная сортировки: вы пишете их на Dart и наблюдаете в визуализаторе. List.sort принимает компаратор вроде (a, b) => a.compareTo(b); после этого шага вы можете написать алгоритм, который стоит за этим вызовом.Начать
  4. 4
    Начать этот шагНачатьЗадачи на рекурсию на Dart, где null safety делает базовый случай явным: функция над Node? должна обработать null, прежде чем вызвать себя рекурсивно, а продвижение типа (type promotion) после этой проверки позволяет свободно пользоваться узлом. Вышедшая из-под контроля рекурсия заканчивается ошибкой StackOverflowError. Динамическое программирование и битовые операции перечислены после шагов, так как они преподаются на Python и C++.НачатьСвоя страница
  5. 5
    Начать этот шагНачатьПоиск в ширину и в глубину, Дейкстра, Беллман-Форд, топологическая сортировка, Крускал и Прим на Dart, поверх графа, который вы построили на втором шаге. В базовом SDK нет очереди с приоритетом, поэтому для алгоритма Дейкстры нужна именно куча со второго шага.Начать
  6. 6
    Начать этот шагНачатьДесять наборов задач с собеседований и два банка задач по программированию на Dart с проверкой по тестам: незнакомые задачи, решение без туториалов, а null safety проверяет каждую ссылку, по которой вы переходите.Начать
Что вы получаете
Всё, что вам нужно, чтобы научиться программировать

Learn by Doing

Write real code, query databases, build websites, and master AI prompts. Our interactive lessons cover every skill modern developers need.

playground.js
Code Editor
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
Test #1test Case Success icon
Test #2test Case Success icon
Test #3test Case Failure icon
Input
"Alex"
Output
"Hello, Coddy! Alex"

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!

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

Double or Nothing

Day 5 of 7

fire Freeze icon

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.

Python
7Streak
250Score
5Energy
Variables
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
CONTINUE
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
Journey
Goals
Leaderboard
Profile
4.9
StarStarStarStarStar
Rating

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!

Challenger League
Challenger LeagueTop 7 advance
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 iconPromotion zoneleaderboard Arrow Up icon

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.

Intro to Variables
Audio

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.

1xSarah

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.

CoddyCertificate of Completion
This certifies thatJohn Doehas successfully completed
python iconPython Fundamentals
Verified
DateJan 2026
LinkedInAdd to LinkedIn

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

  • Null safety там, где она важнее всего. Связный список или дерево состоит из ссылок, которых может не оказаться, а строгая null safety в Dart делает каждую из них значением Node?, которое нужно проверить, прежде чем по нему переходить. Падение из-за null-указателя, которое другие языки обнаруживают во время выполнения, компилятор Dart показывает, пока вы ещё пишете структуру.
  • Подготовка к собеседованиям для Flutter-разработчиков. Во Flutter вы думаете на Dart, а собеседования на мобильную разработку во многих компаниях включают алгоритмический раунд. Дерево виджетов Flutter тоже является деревом, поэтому обходы, которые вы изучаете здесь, повторяют форму фреймворка, которым вы пользуетесь каждый день.
  • Почти весь путь на Dart. Все структуры данных, сортировки, алгоритмы на графах, задачи на рекурсию и наборы задач с собеседований преподаются на Dart. Три курса преподаются на других языках и перечислены после шагов, у каждого своя ссылка: динамическое программирование и серия по интервью на Python (Python), а также битовые операции (C++). Битовые операции легко читать с позиции Dart, где есть &, |, ^, ~, << и >> из C++.
  • Проверка как на собеседовании. Каждый урок заканчивается задачей на Dart с автопроверкой по тестам, а когда решение не проходит, Bugsy читает ваш код и подталкивает к исправлению, не выдавая ответ. Бесплатный сертификат за большинство курсов, каждый с проверкой по собственной ссылке.

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

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

Да. Он типизированный и построен на классах, по устройству близок к Java или C#, поэтому класс Node<T> с полем next, которое может быть null, выглядит ровно тем, чем является, а dart:collection покрывает больше, чем большинство стандартных библиотек. Стоит знать две вещи: в базовом SDK нет очереди с приоритетом, а литерал Map или Set создаёт LinkedHashMap или LinkedHashSet, который помнит порядок вставки; это удобно для вывода, но не то же обещание, что даёт отсортированный словарь.

Какие классы Dart каким структурам данных соответствуют?

List представляет собой динамический массив и ваш стек; Map и Set построены на хеш-таблицах и по умолчанию сохраняют порядок вставки; dart:collection добавляет Queue (это ListQueue, кольцевой буфер, если вы не выберете DoubleLinkedQueue), LinkedList для элементов, наследующих LinkedListEntry, а также SplayTreeMap и SplayTreeSet, самонастраивающиеся упорядоченные деревья. Кучу даёт PriorityQueue из package:collection от команды Dart. Префиксные деревья и графы вы пишете сами.

Есть ли в Dart очередь с приоритетом?

В базовом SDK нет. dart:collection ограничивается очередями, связными списками и splay-деревьями, а PriorityQueue находится в package:collection, пакете, который поддерживает команда Dart, но подключаете его вы сами. Поэтому на собеседовании по Dart вполне могут попросить написать кучу, и на втором шаге вы её пишете.

Что такое splay-дерево и когда использовать SplayTreeMap?

Splay-дерево представляет собой самонастраивающееся двоичное дерево поиска: каждое обращение перемещает затронутый узел в корень, поэтому к недавно использованным ключам снова добираться быстро, а операции стоят O(log n) амортизированно, без гарантии для каждого отдельного вызова. Используйте SplayTreeMap, когда нужны ключи в отсортированном порядке, наименьший или наибольший ключ или ближайший ключ с любой стороны от значения через firstKeyAfter и lastKeyBefore. АВЛ-дерево, которое вы пишете на втором шаге, использует другой подход: перебалансируется при каждом изменении, чтобы его высота оставалась строго ограниченной.

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

Три: динамическое программирование и серия по интервью на Python преподаются на Python, а битовые операции на C++. Они перечислены после шагов, каждый со ссылкой, которая открывает курс на его собственном языке. Таблица мемоизации в Dart представляет собой List или Map, а toRadixString(2) выводит int в двоичном виде: это самый быстрый способ проверить, что на самом деле содержит маска.

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

Как минимум классы, дженерики, списки, словари и null safety. Если это для вас новое, курс Dart от Coddy сначала бесплатно доведёт вас до этого уровня, а этот путь начинается там, где он заканчивается.

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

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

Все пути обучения
Coddy programming languages illustration

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

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