В какую структуру данных вставка элемента выполняется быстрее, чем в массив?

«В какую структуру данных вставка элемента выполняется быстрее, чем в массив?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Связный список (Linked List) обеспечивает более быструю вставку элементов в начало или середину по сравнению с массивом.

Сравнение сложности операций:

Операция Массив (Array) Связный список
Вставка в начало O(n) O(1)
Вставка в середину O(n) O(1) (при известном узле)
Вставка в конец O(1) (амортизированно) O(n) или O(1) с tail-указателем
Доступ по индексу O(1) O(n)

Пример реализации на Swift:

class ListNode<T> {
    var value: T
    var next: ListNode?

    init(_ value: T) {
        self.value = value
    }
}

// Вставка в начало связного списка — O(1)
func insertAtBeginning<T>(_ value: T, into list: inout ListNode<T>?) {
    let newNode = ListNode(value)
    newNode.next = list
    list = newNode
}

// Вставка в массив в начало — O(n)
var array = [1, 2, 3, 4, 5]
array.insert(0, at: 0) // Требует сдвига всех элементов

Практические рекомендации:

  • Используйте связные списки, когда частые вставки/удаления в середине структуры
  • Выбирайте массивы, когда нужен быстрый доступ по индексу и последовательное хранение
  • В Swift Array сильно оптимизирован, поэтому для большинства случаев он предпочтительнее