Назад к вопросам
Intern
93
questionbank

Какие существуют структуры данных?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Существуют следующие основные структуры данных:

Примитивные (Primitive):

  • Целые числа (Integer)
  • Числа с плавающей точкой (Floating-point numbers)
  • Булевы значения (Boolean)
  • Символы (Character)

Абстрактные (Abstract):

  • Массив (Array): Упорядоченная коллекция элементов одного типа, доступ по индексу с постоянным временем.
  • Связный список (Linked List): Коллекция узлов, каждый из которых содержит данные и ссылку на следующий узел. Добавление/удаление в начале/конце efficient, доступ по индексу - $O(n)$.
    • Односвязный (Singly Linked List)
    • Двусвязный (Doubly Linked List)
    • Циклический (Circular Linked List)
  • Стек (Stack): Структура данных LIFO (Last-In, First-Out). Операции: push (добавление), pop (удаление), peek (просмотр верхнего элемента).
    struct Stack<Element> {
        private var elements: [Element] = []
    
        mutating func push(_ element: Element) {
            elements.append(element)
        }
    
        mutating func pop() -> Element? {
            return elements.popLast()
        }
    
        func peek() -> Element? {
            return elements.last
        }
    
        var isEmpty: Bool {
            return elements.isEmpty
        }
    }
    
  • Очередь (Queue): Структура данных FIFO (First-In, First-Out). Операции: enqueue (добавление), dequeue (удаление), peek (просмотр первого элемента).
    struct Queue<Element> {
        private var elements: [Element] = []
    
        mutating func enqueue(_ element: Element) {
            elements.append(element)
        }
    
        mutating func dequeue() -> Element? {
            guard !elements.isEmpty else { return nil }
            return elements.removeFirst()
        }
    
        func peek() -> Element? {
            return elements.first
        }
    
        var isEmpty: Bool {
            return elements.isEmpty
        }
    }
    
  • Хеш-таблица (Hash Table) / Словарь (Dictionary) / Ассоциативный массив (Associative Array): Коллекция пар "ключ-значение", позволяющая эффективный поиск, добавление и удаление по ключу, используя хеш-функцию.
    var dictionary = [String: Any]() // Пример словаря в Swift
    dictionary["key1"] = "value1"
    let value = dictionary["key1"]
    
  • Множество (Set): Неупорядоченная коллекция уникальных элементов. Поддерживает операции: добавление, удаление, проверка на существование, объединение, пересечение, разность.
    var set: Set<Int> = [1, 2, 3] // Пример множества в Swift
    set.insert(4)
    let containsTwo = set.contains(2)
    
  • Дерево (Tree): Иерархическая структура данных, состоящая из узлов, связанных ребрами. Имеет корневой узел и дочерние узлы.
    • Бинарное дерево (Binary Tree)
    • Бинарное дерево поиска (Binary Search Tree - BST)
    • Сбалансированное бинарное дерево (Balanced Binary Tree) - AVL, красно-черное дерево.
    • B-дерево (B-Tree)
  • Граф (Graph): Набор вершин (узлов) и ребер (связей), соединяющих вершины. Может быть направленным или ненаправленным, взвешенным или невзвешенным.

Понимание этих структур данных критически важно для написания эффективного и масштабируемого кода. Выбор правильной структуры данных зависит от требований к производительности операций (поиск, вставка,удаление) и характера данных.