Στοίβες
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Ορισμός
-  Η στοίβα (stack) είναι μια γραμμική διάταξη στοιχείων
στην οποία κάθε πρόσθεση και αφαίρεση στοιχείων γίνεται μόνο στην κορυφή της.
-  Στοιχεία εισάγονται με την ώθηση (push).
-  Στοιχεία εξάγονται με την απώθηση (pop).
-  Η μέθοδος φύλαξης που υλοποιεί η στοίβα λέγεται LIFO (Last In First Out).
Υλοποίηση στη μνήμη
-  Τα στοιχεία φυλάσσονται σε διαδοχικές θέσεις.
-  Ένας δείκτης ή καταχωρητής δείχνει την κορυφή της στοίβας.
-  Το μέγεθος της στοίβας ορίζεται με σύμβαση.
-  Πολλοί επεξεργαστές περιέχουν ειδικές εντολές για υλοποίηση
στοίβας.
Υλοποίηση σε Pascal
-  Η στοίβα υλοποιείται με τη μορφή πίνακα.
-  Μια ξεχωριστή μεταβλητή δείχνει την κορυφή της στοίβας ή
το επόμενο ελεύθερο στοιχείο.
-  Απαραίτητοι οι έλεγχοι για υπερχείλιση και υποχείλιση. 
Αφηρημένος τύπος
- { Αρχικοποιείται η στοίβα }
- 
procedure stackInitialize;
- { Το στοιχείο i εισάγεται στην κορυφή της στοίβας }
- 
procedure stackPush(i : integer);
- { Το στοιχείο από την κορυφή της στοίβας αφαιρείται και επιστρέφεται }
- 
function stackPop : integer;
- { Επιστρέφεται αληθές αν η στοίβα είναι κενή }
- 
function stackIsEmpty : boolean;
Εφαρμογές
-  Κλήση υποπρογραμμάτων
-  Χειρισμός διακοπών
-  Γραφικά (τρισδιάστατη απεικόνιση)
-  Λεκτική και συντακτική ανάλυση
-  Αναδρομικές τεχνικές
Πολωνικός συμβολισμός
Βιβλιογραφία
- Χρήστος Κοίλιας
Δομές Δεδομένων και Οργανώσεις Αρχείων. σ. 45-55
	Εκδόσεις Νέων Τεχνολογιών, 1993.
 
- Alfred V. Aho, John E.
  Hopcroft, and Jeffrey D. Ullman.
Dasta Structures and Algorithms, pages 53–55.
Addison-Wesley, 1983.
- Donald E. Knuth.
The Art of Computer Programming, volume 1 / Fundamental
  Algorithms, pages 234–238.
Addison-Wesley, second edition, 1973.
- Robert Sedgewick.
Algorithms in C, pages 25–30.
Addison-Wesley, 1990.
Ασκήσεις
Άσκηση ADS02
-  Να υλοποιηθεί σε Pascal ο αφηρημένος τύπος της στοίβας ακεραίων
σύμφωνα με τις παρακάτω συναρτήσεις:
- { Αρχικοποιείται η στοίβα }
- 
procedure stackInitialize;
- { Το στοιχείο i εισάγεται στην κορυφή της στοίβας }
- 
procedure stackPush(i : integer);
- { Το στοιχείο από την κορυφή της στοίβας αφαιρείται και επιστρέφεται }
- 
function stackPop : integer;
- { Επιστρέφεται αληθές αν η στοίβα είναι κενός }
- 
function stackIsEmpty : bool;
 
-  Με βάση τον αφηρημένο αυτό τύπο να υλοποιηθεί πρόγραμμα το οποίο να 
διαβάζει ακεραίους μέχρι να διαβάσει 0 και να τους τυπώνει με αντίστροφη σειρά.
Περισσότερες λεπτομέρειες για τις ασκήσεις