Sobes.tech
Intern

Jakie istnieją struktury danych?

sobes.tech AI

Odpowiedź od AI

Istnieją następujące główne struktury danych:

Prymitywne:

  • Liczby całkowite (Integer)
  • Liczby zmiennoprzecinkowe (Floating-point numbers)
  • Wartości logiczne (Boolean)
  • Znaki (Character)

Abstrakcyjne:

  • Tablica (Array): Posortowana kolekcja elementów tego samego typu, dostęp przez indeks w czasie stałym.
  • Lista powiązana (Linked List): Kolekcja węzłów, z których każdy zawiera dane i odniesienie do następnego węzła. Efektywne dodawanie/usuwanie na początku/końcu, dostęp przez indeks - $O(n)$.
    • Lista jednokierunkowa (Singly Linked List)
    • Lista dwukierunkowa (Doubly Linked List)
    • Lista cykliczna (Circular Linked List)
  • Stos (Stack): Struktura LIFO (Last-In, First-Out). Operacje: push (dodanie), pop (usunięcie), peek (podgląd górnego elementu).
    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
        }
    }
    
  • Kolejka (Queue): Struktura FIFO (First-In, First-Out). Operacje: enqueue (dodanie), dequeue (usunięcie), peek (podgląd pierwszego elementu).
    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
        }
    }
    
  • Tablica mieszająca (Hash Table) / Słownik (Dictionary) / Tablica asocjacyjna (Associative Array): Kolekcja par "klucz-wartość", umożliwiająca efektywne wyszukiwanie, dodawanie i usuwanie po kluczu za pomocą funkcji hash.
    var dictionary = [String: Any]() // Przykład słownika w Swift
    dictionary["key1"] = "value1"
    let value = dictionary["key1"]
    
  • Zbiór (Set): Nieuporządkowana kolekcja unikalnych elementów. Obsługuje operacje: dodawanie, usuwanie, sprawdzanie istnienia, sumę, przecięcie, różnicę.
    var set: Set<Int> = [1, 2, 3] // Przykład zbioru w Swift
    set.insert(4)
    let containsTwo = set.contains(2)
    
  • Drzewo (Tree): Hierarchiczna struktura danych, składająca się z węzłów połączonych krawędziami. Ma korzeń i węzły potomne.
    • Drzewo binarne (Binary Tree)
    • Drzewo binarne wyszukiwania (Binary Search Tree - BST)
    • Zrównoważone drzewo binarne (Balanced Binary Tree) - AVL, drzewo czerwono-czarne
    • Drzewo B (B-Tree)
  • Graf (Graph): Zbiór wierzchołków (węzłów) i krawędzi (połączeń), łączących wierzchołki. Może być skierowany lub nieskierowany, ważony lub nieważony.

Zrozumienie tych struktur danych jest kluczowe do pisania wydajnego i skalowalnego kodu. Wybór odpowiedniej struktury zależy od wymagań dotyczących wydajności operacji (wyszukiwanie, wstawianie, usuwanie) i charakterystyki danych.