Подходит ли Swift для структур данных и алгоритмов?
Да. Благодаря дженерикам, протоколам вроде Comparable и Hashable и опционалам то, что next у узла может быть nil, выражено прямо в его типе, а компилятор проверяет каждое использование. Две вещи стоит знать заранее: стандартная библиотека скромная, поэтому очередь и кучу вы пишете сами; а коллекции являются значениями, поэтому если присвоить массив новой переменной и изменить её, оригинал останется прежним, что удивляет тех, кто пришёл из Java или JavaScript.
Какие типы Swift каким структурам данных соответствуют?
Array представляет собой динамический массив и стек с append и popLast(); Dictionary и Set построены на хеш-таблицах. Вот и вся стандартная библиотека. Открытый пакет Apple swift-collections добавляет Deque, Heap, OrderedSet и OrderedDictionary; связный список, дерево, префиксное дерево и граф вы пишете сами, на первом и втором шагах.
Почему узел дерева в Swift должен быть классом?
Потому что структура является значением. Она не может содержать хранимое свойство собственного типа, даже опциональное, а там, где хранятся её копии, например в массиве, изменение копии не затрагивает оригинал. Экземпляр класса является ссылкой, поэтому узлы могут указывать друг на друга; indirect enum тоже подходит, для деревьев, которые вы никогда не меняете на месте. Подвох в ARC: указатель на родителя должен быть weak, иначе родитель и потомок удерживают друг друга в памяти и дерево никогда не освобождается.
Как написать быструю очередь на Swift?
Не через removeFirst(): у Array он сдвигает все оставшиеся элементы, так что каждое извлечение стоит O(n). Храните индекс начала и сдвигайте его вперёд или используйте два массива: добавляйте во входной, забирайте из выходного, а когда выходной опустеет, заполняйте его, развернув входной. Оба способа дают извлечение за амортизированное O(1). Deque из swift-collections делает это за вас, а на первом шаге вы сами пишете очередь.
Какие курсы этого пути не преподаются на Swift?
Три: динамическое программирование и серия по интервью на Python преподаются на Python, а битовые операции на C++. Они перечислены после шагов, каждый со ссылкой, которая открывает курс на его собственном языке. Таблица мемоизации в Swift представляет собой массив или Dictionary, а у целых чисел Swift есть nonzeroBitCount и trailingZeroBitCount, которые одним свойством делают то, что битовый трюк на C++ делает вручную.
Нужно ли знать Swift, прежде чем начинать этот путь?
Как минимум структуры, классы, опционалы, дженерики и протоколы. Если это для вас новое, курс Swift от Coddy сначала бесплатно разберёт эти темы, а этот путь начинается там, где он заканчивается.