Η στοίβα (stack) είναι μια γραμμική δομή δεδομένων που ακολουθεί την αρχή LIFO (Last In, First Out). Αυτό σημαίνει ότι το τελευταίο στοιχείο που προστέθηκε είναι το πρώτο που θα αφαιρεθεί.
Η υλοποίηση της στοίβας γίνεται με μονοδιάστατο πίνακα. Η κορυφή της στοίβας παρακολουθείται με έναν δείκτη top.
Η στοίβα μπορεί να υλοποιηθεί με δύο κύριους τρόπους:
Χρησιμοποιείται ένας στατικός μονοδιάστατος πίνακας για την αποθήκευση των στοιχείων. Η κορυφή της στοίβας παρακολουθείται με τον δείκτη top.
Κάθε κόμβος περιέχει ένα στοιχείο και έναν δείκτη στον επόμενο κόμβο. Η κορυφή είναι ο πρώτος κόμβος.
Παραστάσεις μιας στοίβας με τρία στοιχεία: 7 (κορυφή), 5, 3 (βάση).
Παρακάτω παρουσιάζονται οι αλγόριθμοι για τις βασικές λειτουργίες μιας στοίβας χρησιμοποιώντας την ψευδογλώσσα ΓΛΩΣΣΑ.
Αλγόριθμος Ωθήση
Δεδομένα // stack, top, size, item
αν top < size τότε
top ← top + 1
stack[top] ← item
overflow ← ψευδής
αλλιώς
overflow ← αληθής
τέλος_αν
Αποτελέσματα // top, overflow, stack
Τέλος Ωθήση
Αλγόριθμος Απώθηση
Δεδομένα // stack, top, underflow
αν top >= 1 τότε
underflow ← ψευδής
top ← top - 1
αλλιώς
underflow ← αληθής
τέλος_αν
Αποτελέσματα // top, underflow, stack
Τέλος Απώθηση
ΠΡΟΓΡΑΜΜΑ Παράδειγμα_Στοίβας
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Στοίβα[5], Κορυφή, Επιλογή, Στοιχείο
ΑΡΧΗ
Κορυφή ← 0
ΓΡΑΨΕ '1: Ώθηση (Push), 2: Απώθηση (Pop), 3: Έξοδος'
ΔΙΑΒΑΣΕ Επιλογή
ΟΣΟ Επιλογή ≠ 3 ΕΠΑΝΑΛΑΒΕ
ΑΝ Επιλογή = 1 ΤΟΤΕ
! --- ΚΩΔΙΚΑΣ ΩΘΗΣΗΣ (PUSH) ---
ΑΝ Κορυφή < 5 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε στοιχείο για ώθηση:'
ΔΙΑΒΑΣΕ Στοιχείο
Κορυφή ← Κορυφή + 1
Στοίβα[Κορυφή] ← Στοιχείο
ΓΡΑΨΕ 'Το στοιχείο ', Στοιχείο, ' εισήχθη επιτυχώς.'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Αδυναμία εισαγωγής: Υπερχείλιση (Η στοίβα είναι γεμάτη)!'
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ_ΑΝ Επιλογή = 2 ΤΟΤΕ
! --- ΚΩΔΙΚΑΣ ΑΠΩΘΗΣΗΣ (POP) ---
ΑΝ Κορυφή > 0 ΤΟΤΕ
Στοιχείο ← Στοίβα[Κορυφή]
Κορυφή ← Κορυφή - 1
ΓΡΑΨΕ 'Εξήχθη το στοιχείο: ', Στοιχείο
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Αδυναμία εξαγωγής: Υποχείλιση (Η στοίβα είναι άδεια)!'
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λανθασμένη επιλογή. Ξαναπροσπάθησε.'
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ '1: Ώθηση (Push), 2: Απώθηση (Pop), 3: Έξοδος'
ΔΙΑΒΑΣΕ Επιλογή
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Ερώτηση 1: Ποια είναι η αρχή λειτουργίας μιας στοίβας;
Ερώτηση 2: Ποιο σφάλμα προκύπτει όταν προσπαθούμε να προσθέσουμε ένα στοιχείο σε μια γεμάτη στοίβα;
Ερώτηση 3: Ποιος δείκτης χρησιμοποιείται για να παρακολουθείται η κορυφή μιας στοίβας υλοποιημένης με μονοδιάστατο πίνακα;
Ερώτηση 4 (Θεωρητική): Ποια είναι η διαφορά μεταξύ μιας στοίβας και μιας ουράς;
Ερώτηση 5 (Θεωρητική): Ποια από τις παρακάτω λειτουργίες ΔΕΝ είναι βασική λειτουργία μιας στοίβας;
Ερώτηση 6 (Θεωρητική): Ποιες από τις παρακάτω δομές δεδομένων χρησιμοποιούν την αρχή LIFO;
Οχήματα[250] για την αποθήκευση των πινακίδων των οχημάτων.Κορυφή για να παρακολουθείτε την κορυφή της στοίβας.Κορυφή < 250. Αν ναι, διαβάστε την πινακίδα και αυξήστε τον δείκτη Κορυφή.Κορυφή > 0. Αν ναι, εμφανίστε την πινακίδα του οχήματος στην κορυφή και μειώστε τον δείκτη Κορυφή.ΟΣΟ για να συνεχίζετε την επανάληψη μέχρι ο χρήστης να επιλέξει Έξοδος.Παρακολουθήστε πώς λειτουργούν οι βασικές λειτουργίες μιας στοίβας (Ωθήση και Απώθηση) με οπτικοποίηση.