Sobes.tech
Intern

Ποιες δομές δεδομένων υπάρχουν;

sobes.tech AI

Απάντηση από AI

Υπάρχουν οι ακόλουθες βασικές δομές δεδομένων:

Απλές (Primitive):

  • Ακέραιοι αριθμοί (Integer)
  • Αριθμοί κινητής υποδιαστολής (Floating-point numbers)
  • Αληθής/Ψευδής τιμές (Boolean)
  • Χαρακτήρες (Character)

Αφηρημένες (Abstract):

  • Πίνακας (Array): Ταξινομημένη συλλογή στοιχείων ενός τύπου, πρόσβαση μέσω δείκτη με σταθερό χρόνο.
  • Συνδεδεμένη λίστα (Linked List): Συλλογή κόμβων, καθένας από τους οποίους περιέχει δεδομένα και αναφορά στον επόμενο κόμβο. Αποτελεσματική προσθήκη/διαγραφή στην αρχή/τέλος, πρόσβαση μέσω δείκτη - $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): Σύνολο κορυφών (κόμβων) και ακμών (συνδέσεων), που συνδέουν τις κορυφές. Μπορεί να είναι προσανατολισμένος ή μη, με βάρη ή χωρίς.

Η κατανόηση αυτών των δομών δεδομένων είναι κρίσιμη για την αποτελεσματική και κλιμακούμενη γραφή κώδικα. Η επιλογή της κατάλληλης δομής δεδομένων εξαρτάται από τις απαιτήσεις απόδοσης των λειτουργιών (αναζήτηση, εισαγωγή, διαγραφή) και το χαρακτήρα των δεδομένων.