Sobes.tech
Intern

Quali sono le strutture dati esistenti?

sobes.tech AI

Risposta dell'AI

Esistono le seguenti strutture dati principali:

Primitive:

  • Numeri interi (Integer)
  • Numeri a virgola mobile (Floating-point numbers)
  • Valori booleani (Boolean)
  • Caratteri (Character)

Astratte:

  • Array: Collezione ordinata di elementi dello stesso tipo, accesso tramite indice con tempo costante.
  • Lista collegata (Linked List): Collezione di nodi, ognuno contenente dati e un riferimento al nodo successivo. Inserimenti/eliminazioni efficienti all'inizio/fine, accesso tramite indice - $O(n)$.
    • Lista semplicemente collegata (Singly Linked List)
    • Lista doppiamente collegata (Doubly Linked List)
    • Lista circolare (Circular Linked List)
  • Stack: Struttura LIFO (Last-In, First-Out). Operazioni: push (aggiunta), pop (rimozione), peek (visualizza l'elemento superiore).
    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
        }
    }
    
  • Coda (Queue): Struttura FIFO (First-In, First-Out). Operazioni: enqueue (aggiunta), dequeue (rimozione), peek (visualizza il primo elemento).
    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
        }
    }
    
  • Tabella hash (Hash Table) / Dizionario (Dictionary) / Array associativo (Associative Array): Collezione di coppie "chiave-valore", che consente ricerche, inserimenti e rimozioni efficienti tramite chiave usando una funzione hash.
    var dictionary = [String: Any]() // Esempio di dizionario in Swift
    dictionary["key1"] = "value1"
    let value = dictionary["key1"]
    
  • Insieme (Set): Collezione non ordinata di elementi unici. Supporta operazioni: aggiunta, rimozione, verifica presenza, unione, intersezione, differenza.
    var set: Set<Int> = [1, 2, 3] // Esempio di insieme in Swift
    set.insert(4)
    let containsTwo = set.contains(2)
    
  • Albero (Tree): Struttura gerarchica di dati, composta da nodi collegati da rami. Ha un nodo radice e nodi figli.
    • Albero binario (Binary Tree)
    • Albero binario di ricerca (Binary Search Tree - BST)
    • Albero binario bilanciato (Balanced Binary Tree) - AVL, albero rosso-nero
    • Albero B (B-Tree)
  • Grafo (Graph): Insieme di vertici (nodi) e archi (connessioni) che collegano i vertici. Può essere diretto o indiretto, pesato o non pesato.

Comprendere queste strutture dati è fondamentale per scrivere codice efficiente e scalabile. La scelta della struttura giusta dipende dai requisiti di prestazioni (ricerca, inserimento, eliminazione) e dalla natura dei dati.