ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο...

35
1 Κεφάλαιο 8: «Αφηρημένοι τύποι δεδομένων» ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδομένων 8.1 Βασικές έννοιες δομών δεδομένων 8.2 Σχετικές έννοιες 8.3 Υλοποίηση δομών δεδομένων 8.4 Μια σύντομη μελέτη περίπτωσης 8.5 Προσαρμοσμένοι τύποι δεδομένων

Transcript of ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο...

Page 1: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

1 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

● 8.1 Βασικές έννοιες δοµών δεδοµένων ● 8.2 Σχετικές έννοιες

● 8.3 Υλοποίηση δοµών δεδοµένων

● 8.4 Μια σύντοµη µελέτη περίπτωσης

● 8.5 Προσαρµοσµένοι τύποι δεδοµένων

Page 2: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

2 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Βασικές δοµές δεδοµένων

● Οµοιογενής πίνακας. ● Λίστα.

– Στοίβα. – Ουρά.

● Δέντρο.

Page 3: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

3 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Ορολογία λιστών

● Η λίστα είναι µία συλλογή δεδοµένων της οποίας οι καταχωρήσεις έχουν σειριακή διάταξη.

● Το ένα άκρο µίας λίστας ονοµάζεται αρχή (head) της λίστας, ενώ το άλλο άκρο τέλος (tail).

Λίστα: a1, a2, a3, ..., a89, nil

τέλος λίστας

Page 4: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

4 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Ορολογία στοιβών

●  Στοίβα είναι µία λίστα της οποίας οι καταχωρήσεις αφαιρούνται και εισάγονται µόνο από την αρχή.

●  Δοµή LIFO (Last In, First Out). ●  H αρχή µίας στοίβας ονοµάζεται κορυφή

(top) της στοίβας, ενώ το τέλος ονοµάζεται βάση (base).

●  Απώθηση (pop) ονοµάζεται η αφαίρεση µίας καταχώρησης από την κορυφή.

●  Ώθηση (push) είναι η εισαγωγή µίας νέας καταχώρησης στην κορυφή.

Στοίβα

a1

a2

a3

Page 5: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

5 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Ορολογία ουρών

● Η ουρά είναι µία λίστα στην οποία οι καταχωρίσεις αφαιρούνται από την αρχή ενώ οι νέες καταχωρίσεις προστίθενται στο τέλος.

● Δοµή FIFO (First In, First Out).

Ουρά: a1 a2 a3 Είσοδος Έξοδος

Page 6: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

6 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Ορολογία δέντρων

● Ένα δέντρο είναι µία οµάδα δεδοµένων της οποίας οι καταχωρίσεις έχουν µία ιεραρχική οργάνωση.

●  Κόµβος (node) είναι η κάθε θέση σε ένα δέντρο. ●  Δυαδικό δένδρο (binary tree) είναι ένα δένδρο στο οποίο κάθε κόµβος έχει µέχρι δύο θυγατρικούς κόµβους.

● Ως βάθος ορίζουµε το πλήθος των κόµβων που βρίσκονται στη µεγαλύτερη διαδροµή από τη ρίζα µέχρι ένα φύλλο.

Page 7: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

7 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Ορολογία δένδρων: κόµβοι

●  Κόµβος ρίζα είναι ο κόµβος στην κορυφή. ●  Τερµατικός κόµβος ή φύλλο είναι ο κόµβος που βρίσκεται στο κάτω µέρος.

●  Γονικός κόµβος (γονέας) ονοµάζεται ο αµέσως επάνω κόµβος ενός συγκεκριµένου κόµβου.

●  Θυγατρικός κόµβος (παιδί) είναι ο αµέσως από κάτω κόµβος ενός συγκεκριµένου κόµβου.

●  Πρόγονος είναι ο γονέας, ο γονέας του γονέα κτλ. ●  Απόγονος είναι το παιδί, το παιδί του παιδιού κτλ. ●  Αµφιθαλείς (ή κόµβοι αδέρφια) είναι δύο κόµβοι µε τους ίδιους γονείς.

Page 8: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

8 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Παράδειγµα οργανογράµµατος

Page 9: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

9 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Ορολογία δέντρων

Page 10: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

10 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Η φύση των δοµών δεδοµένων

● Στατική είναι η δοµή της οποίας το µέγεθος δεν αλλάζει.

● Δυναµική είναι η δοµή της οποίας το µέγεθος µπορεί να αλλάξει.

Page 11: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

11 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Αποθήκευση λιστών

●  Συνεχόµενη λίστα είναι η λίστα που αποθηκεύεται σε έναν οµοιογενή πίνακα.

●  Συνδεδεµένη λίστα είναι η λίστα στην οποία κάθε κόµβος δείχνει στον επόµενο του. –  Δείκτης αρχής είναι ο δείκτης που δείχνει στη αρχή, ή την κεφαλή, της λίστας.

–  Δείκτης ΝΙL είναι ένα ειδικό σχήµα bit που τοποθετείται στο κελί δείκτη της τελευταίας καταχώρισης για να προσδιορίσει ότι δεν υπάρχουν άλλες καταχωρίσεις στη λίστα.

Page 12: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

12 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Αποθήκευση του πίνακα ενδείξεων θερµοκρασίας στη µνήµη µε αρχή τη διεύθυνση χ

int Readings[24];

Page 13: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

13 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Ένας δισδιάστατος πίνακας µε τέσσερις γραµµές και πέντε στήλες, αποθηκευµένες µε διάταξη γραµµές

int Sales[4,5]

Page 14: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

14 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Αποθήκευση ετερογενούς πίνακα

Page 15: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

15 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Ονόµατα αποθηκευµένα στη µνήµη µε τη µορφή συνεχόµενης λίστας

Page 16: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

16 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Η δοµή µιας συνδεδεµένης λίστας

Page 17: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

17 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Διαγραφή καταχώρισης από συνδεδεµένη λίστα

Page 18: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

18 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Προσθήκη καταχώρισης σε συνδεδεµένη λίστα

Page 19: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

19 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Μια διαδικασία για την εκτύπωση µιας συνδεδεµένης λίστας

διαδικασία PrintList(Λίστα) ΤρέχωνΔείκτης ß δείκτης κεφαλής της Λίστας όσο (ΤρέχωνΔείκτης διάφορος του NIL) κάνε

(Τύπωσε το όνοµα της καταχώρισης στην οποία δείχνει ο ΤρέχωνΔείκτης. Βρες την τιµή στο κελί δείκτη της καταχώρισης της Λίστας όπου δείχνει ο ΤρέχωνΔείκτης και ανάθεσε εκ νέου τον ΤρέχονταΔείκτη την τιµή αυτή.)

Page 20: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

20 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Αποθήκευση στοιβών και ουρών

● Μπορεί να χρησιµοποιήσει παρόµοιους µηχανισµούς µε την αποθήκευση λιστών.

● Η κυκλική ουρά είναι ένας οµογενής πίνακας όπου η πρώτη καταχώριση στον πίνακα συµπεριφέρεται σαν να είναι η αµέσως επόµενη της τελευταίας καταχώρισης. – Προστατεύει την ουρά από το να “γλιστράει” εκτός του τµήµατος µνήµης που έχει δεσµευτεί για αυτή.

Page 21: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

21 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Μία στοίβα στη µνήµη

Page 22: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

22 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Μια υλοποίηση ουράς µε δείκτες αρχής και τέλους. Παρατηρήστε το πώς «γλιστράει» στη µνήµη η ουρά καθώς προστίθενται και

αφαιρούνται καταχωρίσεις

Page 23: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

23 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Η δοµή ενός κόµβου σε ένα δυαδικό δέντρο

Page 24: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

24 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Η σχηµατική και η πραγµατική οργάνωση ενός δυαδικού δέντρου µε τη χρήση ενός συστήµατος αποθήκευσης συνδέσεων

Page 25: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

25 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Ένα δέντρο που έχει αποθηκευτεί χωρίς δείκτες

Page 26: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

26 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Η σχηµατική αναπαράσταση ενός αραιού, µη ισορροπηµένου δέντρου, και ο τρόπος που θα αποθηκευόταν χωρίς δείκτες

Page 27: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

27 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Case study: δηµιουργία µιας αφηρηµένης δοµής

•  Ορισµός δοµής – Δεδοµένα: ονόµατα – Μέθοδοι χειρισµού δεδοµένων: αναζήτηση, εκτύπωση, εισαγωγή νέας καταχώρησης

•  Υλοποίηση δοµής – Υλοποίηση στην µνήµη – Αλγόριθµοι

Page 28: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

28 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Τα γράµµατα Α έως Ν µε τη µορφή διατεταγµένου δέντρου

Page 29: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

29 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Η δυαδική αναζήτηση µε τη µορφή που θα είχε αν η λίστα είχε υλοποιηθεί ως συνδεδεµένο δυαδικό κέντρο

διαδικασία Αναζήτηση (Δέντρο, ΤιµήΣτόχος) αν (δείκτης ρίζας Δέντρου = NIL)

τότε (δήλωσε την αναζήτηση ως ανεπιτυχή)

αλλιώς (εκτέλεσε το τµήµα των παρακάτω εντολών που σχετίζεται µε την κατάλληλη περίπτωση)

περίπτωση 1: ΤιµήΣτόχος=τιµή κόµβου ρίζας (Ανάφερε ότι η αναζήτηση πέτυχε) περίπτωση 2: ΤιµήΣτόχος<τιµή κόµβου ρίζας

(Εφάρµοσε τη διαδικασία Αναζήτησης για να δεις αν η ΤιµήΣτόχος βρίσκεται στο υποδέντρο που προσδιορίζεται από τον αριστερό θυγατρικό κόµβο της ρίζας, και ανάφερε το αποτέλεσµα αυτής της αναζήτησης) περίτπωση 3: ΤιµηΣτόχος> τιµή κόµβου ρίζας (Εφάρµοσε τη διαδικασία Αναζήτησης για να δεις αν η ΤιµήΣτόχος βρίσκεται στο υποδέντρο που προσδιορίζεται από τον δεξιό θυγατρικό κόµβο της ρίζας, και ανάφερε το αποτέλεσµα αυτής της αναζήτησης)

) τέλος αν

Page 30: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

30 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Τα προοδευτικά µικρότερα δέντρα που θα ερευνήσει η διαδικασία «Αναζήτηση» κατά την αναζήτηση του γράµµατος Κ

Page 31: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

31 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Εκτύπωση ενός δέντρου αναζήτησης σε αλφαβητική σειρά

Page 32: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

32 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Μια διαδικασία για την εκτύπωση των δεδοµένων ενός δυαδικού δέντρου

διαδικασία Εκτύπωση_Δέντρου (Δέντρο) αν (Δέντρο όχι άδειο)

τότε (Εφάρµοσε τη διαδικασία Εκτύπωση_Δέντρου στο δέντρο που εµφανίζεται ως αριστερός κλάδος του Δέντρου

Τύπωσε το ριζικό κόµβο του Δέντρου. Εφάρµοσε τη διαδικασία Εκτύπωση_Δέντρου στο δέντρο που εµφανίζεται ως δεξιός κλάδος του Δέντρου)

Page 33: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

33 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Εισαγωγή της καταχώρισης Ν στη λίστα Β,Ε,Η,Θ,Κ,Λ,Ο,Ρ που έχει αποθηκευτεί ως δέντρο

+ Ν à

Page 34: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

34 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Μια διαδικασία για την εισαγωγή µιας νέας καταχώρισης σε µία λίστα που είναι αποθηκευµένη ως δυαδικό δέντρο

διαδικασία Εισαγωγή (Δέντρο, ΝέαΤιµή) αν (δείκτης ρίζα Δέντρου = NIL) (όρισε το δείκτη ρίζας ώστε να δείχνει σε ένα νέο φύλλο που περιέχει τη ΝέαΤιµή) αλλιώς (εκτέλεσε το τµήµα των εντολών παρακάτω που

σχετίζεται µε την κατάλληλη περίπτωση) περίπτωση 1: ΝέαΤιµή = τιµή ριζικού κόµβου (Μην κάνεις τίποτα) περίπτωση 2: ΝέαΤιµή < τιµή ριζικού κόµβου (αν (αριστερός θυγατρικός δείκτης του ριζικού κόµβου = NIL) τότε (όρισε το δείκτη αυτόν ώστε να δείχνει σε ένα νέο κόµβο φύλλο που περιέχει τη ΝέαΤιµή) αλλιώς (εφάρµοσε τη διαδικασία Εισαγωγή για την εισαγωγή της ΝέαςΤιµής στο υποδέντρο που προσδιορίζεται από τον αριστερό θυγατρικό δείκτη) περίπτωση 3:ΝέαΤιµή < τιµή ριζικού κόµβου (αν (δεξιός θυγατρικός δείκτης του ριζικού κόµβου = NIL) τότε (όρισε το δείκτη αυτόν ώστε να δείχνει σε ένα νέο κόµβο φύλλο που περιέχει τη ΝέαΤιµή) αλλιώς (εφάρµοσε τη διαδικασία Εισαγωγή για την εισαγωγή της ΝέαςΤιµής στο υποδέντρο που προσδιορίζεται από τον δεξιό θυγατρικό δείκτη)

) ) τέλος αν

Page 35: ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδο ένωνpages.cs.aueb.gr/courses/epl131/files/Ch08_Abstract_Data_Types.pdfΗ λίστα είναι ... Είσοδος Έξοδος. Κεφάλαιο

35 Κεφάλαιο 8: «Αφηρηµένοι τύποι δεδοµένων»

Προσαρµοσµένοι τύποι δεδοµένων

•  Τύποι δεδοµένων οριζόµενοι από τον χρήστη

•  Αφηρηµένοι τύποι δεδοµένων

8.5 !!"#$!%"#%&'"( )*+"( ,&,"%&'-' 509

8.5 !!"#$!µ"#µ%&"" #$%"" '('"µ%&)& !"# $%&'()*# 6 +),#-.*'.)µ% /*) +,0"1 &#,' "12 322#*) "#- "4+#- 5%5#µ3-

262, 7)* +%,*/,'8)µ% 7'+#*#-9 ."#*:%*05%*9 "4+#-9 ;+69 #* )73,)*#*, #* +,)/-

µ)"*7#<, #* :),)7"=,%9, 7)* #* (#/*739 "*µ39 (Boolean). >-"#< #* "4+#* 5%5#µ3-

262 +),3:#2")* ."*9 +%,*..;"%,%9 /(0..%9 +,#/,)µµ)"*.µ#4 69 ."#*:%*05%*9

(primitive). !"12 %2;"1") )-"= ?) 5#4µ% ",;+#-9 µ% "#-9 #+#<#-9 32)9 +,#-

/,)µµ)"*."=9 µ+#,%< 2) #,<.%* "#-9 5*7#49 "#- "4+#-9 5%5#µ3262, 0."% 2) 7)-

(48%* 7)(4"%,) "*9 )2'/7%9 µ*)9 .-/7%7,*µ3219 %&),µ#/=9.

!"#$% &'&$µ()*) $+%,-µ')$% .#- /$ 0+12/3 @#((39 &#,39, 1 37&,).1 %2;9 )(/#,<?µ#- %<2)* %-7#(;"%,1 ;")2 # +,#/,)µ-

µ)"*."=9 3:%* ."1 5*'?%.= "#- 7)* '((#-9 "4+#-9 5%5#µ3262 %7";9 "62 ."#*-

:%*6502 +#- +),3:#-2 #* /(0..%9 +,#/,)µµ)"*.µ#4. A*) "# (;/# )-";2, +#(-

(39 .4/:,#2%9 /(0..%9 +,#/,)µµ)"*.µ#4 %+*",3+#-2 ."#-9 +,#/,)µµ)"*."39

2) #,<.#-2 %+*+(3#2 "4+#-9 5%5#µ3262, :,1.*µ#+#*02")9 "#-9 ."#*:%*05%*9 "4-

+#-9 69 5#µ*7' ."#*:%<). B) +*# C).*7' +),)5%</µ)") "3"#*62 +,#.),µ#.µ3-

262 "4+62 5%5#µ3262 %<2)* #* (%/;µ%2#* !"#$%µ&'!# ()% *! +",-*. */)!# 0&-

0!µ1'2' (user-defined data types), #* #+#<#* ."12 #-.<) )+#"%(#42 .-2%20.%*9

."#*:%*6502 "4+62 .-/7%2",6µ3262 7'"6 )+; 32) µ#2)5*7; ;2#µ).

A*) 2) "# %D1/=.#-µ% )-"; 7)(4"%,), )9 -+#?3.#-µ% ;"* ?3(#-µ% 2) 7)")-

.7%-'.#-µ% 32) +,;/,)µµ) µ% +#((39 µ%")C(1"39, 7)?%µ<) )+; "*9 #+#<%9 ?)

3:%* "12 <5*) %"%,#/%2= 5#µ= +#- ?) )+#"%(%<")* )+; ;2#µ), 1(*7<), 7)* C)?µ;

*7)2;"1")9. E*) +,#.3//*.1 ?) =")2 2) #,<.#-µ% 7'?% µ%")C(1"= D%:6,*."'

69 %"%,#/%2= +<2)7) (F2;"1") 6.2). G.";.#, µ*) 7)(4"%,1 µ3?#5#9 %<2)* 2) #-

,<.#-µ% "12 %"%,#/%2= 5#µ= 69 32)2 23# (#,*H;µ%2# )+; "# :,=."1) "4+# 5%-

5#µ3262, 7)* µ%"' 2) :,1.*µ#+#*=.#-µ% )-";2 "#2 "4+# .)2 2) =")2 ."#*:%*0-

519.

A*) 2) -(#+#*=.#-µ% )-"= "12 *53), ?) µ+#,#4.)µ% 2) -*#?%"=.#-µ% µ*)

%2"#(= 8%-5#705*7) "19 µ#,&=9

!"#$% &'() !"#$%&#'(()($* *+ { char +,$µ'[25]. int -(./0'. real 1'2µ3%4/',3565'%. }

/*) 2) #,<.#-µ% "# 23# "4+# µ% ;2#µ) !"#$%&#'(()($*, # #+#<#9 )+#"%(%<")*

)+; "12 %"%,#/%2= 5#µ= +#- +%,*3:%* "# ."#*:%<# +,$µ' ("4+#- :),)7"=,62), "#

."#*:%<# -(./0' ("4+#- )7%,)<62), 7)* "# ."#*:%<# 1'2µ3%4/',3565'% ("4+#-

+,)/µ)"*702 ),*?µ02). >-";9 # 23#9 "4+#9 5%5#µ3262 ?) µ+#,#4.% 2) :,1.*-

µ#+#*1?%< /*) "1 5=(6.1 µ%")C(1"02 µ% "#2 <5*# ",;+# +#- :,1.*µ#+#*%<")*

7)* 32)9 ."#*:%*0519 "4+#9. I1()5=, µ% "#2 <5*# ",;+# +#- #* +%,*..;"%,%9

/(0..%9 +,#/,)µµ)"*.µ#4 %+*",3+#-2 "1 5=(6.1 "19 µ%")C(1"=9 x 69 )73-

,)*19, µ3.6 "19 %2"#(=9

!!"#$#%& 8 ""#%'!() *!*&+!,-, 510

int x;

! µ"#$%&!#' !"#$$%$&'1 ($ µ)*+*,-" .$ /!&0("1 #,)*2 ()"&'!"*$$+$&, µ" #!.

".#*&'

()"&'!"*$$+$&, !"#$$%$&'1;

3)4 #* -!µ"1* $2#4 5$6 µ"#7, ! µ"#$%&!#' !"#$$%$&'1 ($ $.$89+"#$6 -" 9.$

*&45&!+* #µ'µ$ 5"&6:. µ.'µ!; #* *)*1* )"+69<"6 #* 4.*µ$, #!. !&651$, 5$6 #*

%$(µ4 65$.4#!#$; ".4; 2)$&&'&*2. =$ µ"µ*.0µ9.$ -#*6<"1$ $2#*, #*2 #µ'µ$-

#*; ($ µ)*+*,. .$ )+*-)"&7>*.#$6 µ" )$+$-#7-"6; #*2 #,)*2 !"#$$%$&'1.-.&-

µ* 5$6 !"#$$%$&'1./$012*. ?#-6, µ6$ ".#*&' 4)0; !

!"#$$%$&'1./$012* ! 26;

($ µ)*+*,-" .$ <+!-6µ*)*6!("1 @6$ #*. *+6-µ4 #!; #6µ'; 26 -#* -2-#$#654

-#*6<"1* /$012* µ9-$ -#* #µ'µ$ )*2 "1.$6 @.0-#4 0; !"#$$%$&'1. A)1-!;, ! "-

.#*&'

()"&'!"*$$+$&, 304,5,.6+', 7.60"89:$+;4:.1, 7.60"89:$+;4:.2;

($ µ)*+"1 .$ <+!-6µ*)*6!("1 @6$ #! /'&0-! #0. #+6:. µ"#$%&!#:. 304,5,.6+',

7.60"89:$+;4:.1, 5$6 7.60"89:$+;4:.2 :-#" .$ $.'5*2. -#*. #,)*

()"&'!"*$$+$&,, $5+6%:; 4)0; ! ".#*&'

real Maniki, Mesi, Laimos;

<+!-6µ*)*6"1#$6 @6$ #! /'&0-! #0. µ"#$%&!#:. Maniki, Mesi, 5$6 Laimos :-#"

.$ $.'5*2. -#* -#*6<"6:/! #,)* real.

A1.$6 -!µ$.#654 .$ 5$#$&7%"#" #! /6$8*+7 µ"#$B, ".4; #,)*2 *+6>4µ".*2

$)4 #* <+'-#! 5$6 ".4; )+$@µ$#65*, -#*6<"1*2 #*2. =* #"&"2#$1* $.$89+"#$6

0; !"#$µ#%"&'( (instance) #*2 #,)*2. ?.$; *+6>4µ".*; $)4 #* <+'-#! #,)*;

$)*#"&"1 -#!. *2-1$ 9.$ )+4#2)* #* *)*1* <+!-6µ*)*6"1#$6 @6$ #!. 5$#$-5"2'

-#6@µ6*#,)0. #*2 -2@5"5+6µ9.*2 #,)*2. C"+6@+78"6 #6; 6/64#!#"; )*2 9<*2.

4&$ #$ -#6@µ64#2)$ #*2 -2@5"5+6µ9.*2 #,)*2, $&&7 * 1/6*; /". $)*#"&"1 -#6@-

µ64#2)* (µ" #*. 1/6* #+4)* )*2 µ6$ 84+µ$ @6$ µ)6-54#$ "1.$6 9.$ “)+4#2)*” µ"

#* *)*1* 8#67<.*.#$6 #$ µ)6-54#$, <0+1; .$ "1.$6 ! 1/6$ µ)6-54#*). D#* )+*!-

@*,µ".* )$+7/"6@µ$, * *+6>4µ".*; $)4 #* <+'-#! #,)*; ()"&'!"*$$+$&, <+!-6-

µ*)*6'(!5" @6$ #!. 5$#$-5"2' #+6:. -#6@µ6*#,)0. $2#*, #*2 #,)*2, µ" *.4-

µ$#$ 304,5,.6+', 7.60"89:$+;4:.1, 5$6 7.60"89:$+;4:.2.

!"#$#µ%&'( )*+'( ,-,'µ%&.& C$+4&* )*2 ! 9..*6$ #0. *+6>4µ".0. $)4 #* <+'-#! #,)0. 9<"6 )&"*."5#'µ$-

#$, /". 5$#$89+."6 .$ ")6#+9E"6 #! /!µ6*2+@1$ #,)0. µ" 4&! #! -!µ$-1$ #!;

&9B!;. ?.$; *&*5&!+0µ9.*; #,)*; /"/*µ9.0. $)*#"&"1#$6 $)4 /,* µ9+!: (1)

9.$ )+*5$(*+6-µ9.* -,-#!µ$ $)*('5"2-!; (4)0; 9.$ -,-#!µ$ -2µ)&!+:µ$-

#*; 0; )+*; /,* -#!. )"+1)#0-! #*2 #,)*2 $5"+$10. 5$6 9.$ -,-#!µ$ 56.!#';

2)*/6$-#*&'; -#!. )"+1)#0-! #*2 #,)*2 )+$@µ$#65:.) 5$6 (2) 9.$ -,.*&* $)4

)+*5$(*+6-µ9."; )+7B"6; (4)0; )+4-("-! 5$6 $8$1+"-!). C6* -2@5"5+6µ9.$, *6

!!"#$#%& 8 ""#%'!() *!*&+!,-, 510

int x;

! µ"#$%&!#' !"#$$%$&'1 ($ µ)*+*,-" .$ /!&0("1 #,)*2 ()"&'!"*$$+$&, µ" #!.

".#*&'

()"&'!"*$$+$&, !"#$$%$&'1;

3)4 #* -!µ"1* $2#4 5$6 µ"#7, ! µ"#$%&!#' !"#$$%$&'1 ($ $.$89+"#$6 -" 9.$

*&45&!+* #µ'µ$ 5"&6:. µ.'µ!; #* *)*1* )"+69<"6 #* 4.*µ$, #!. !&651$, 5$6 #*

%$(µ4 65$.4#!#$; ".4; 2)$&&'&*2. =$ µ"µ*.0µ9.$ -#*6<"1$ $2#*, #*2 #µ'µ$-

#*; ($ µ)*+*,. .$ )+*-)"&7>*.#$6 µ" )$+$-#7-"6; #*2 #,)*2 !"#$$%$&'1.-.&-

µ* 5$6 !"#$$%$&'1./$012*. ?#-6, µ6$ ".#*&' 4)0; !

!"#$$%$&'1./$012* ! 26;

($ µ)*+*,-" .$ <+!-6µ*)*6!("1 @6$ #*. *+6-µ4 #!; #6µ'; 26 -#* -2-#$#654

-#*6<"1* /$012* µ9-$ -#* #µ'µ$ )*2 "1.$6 @.0-#4 0; !"#$$%$&'1. A)1-!;, ! "-

.#*&'

()"&'!"*$$+$&, 304,5,.6+', 7.60"89:$+;4:.1, 7.60"89:$+;4:.2;

($ µ)*+"1 .$ <+!-6µ*)*6!("1 @6$ #! /'&0-! #0. #+6:. µ"#$%&!#:. 304,5,.6+',

7.60"89:$+;4:.1, 5$6 7.60"89:$+;4:.2 :-#" .$ $.'5*2. -#*. #,)*

()"&'!"*$$+$&,, $5+6%:; 4)0; ! ".#*&'

real Maniki, Mesi, Laimos;

<+!-6µ*)*6"1#$6 @6$ #! /'&0-! #0. µ"#$%&!#:. Maniki, Mesi, 5$6 Laimos :-#"

.$ $.'5*2. -#* -#*6<"6:/! #,)* real.

A1.$6 -!µ$.#654 .$ 5$#$&7%"#" #! /6$8*+7 µ"#$B, ".4; #,)*2 *+6>4µ".*2

$)4 #* <+'-#! 5$6 ".4; )+$@µ$#65*, -#*6<"1*2 #*2. =* #"&"2#$1* $.$89+"#$6

0; !"#$µ#%"&'( (instance) #*2 #,)*2. ?.$; *+6>4µ".*; $)4 #* <+'-#! #,)*;

$)*#"&"1 -#!. *2-1$ 9.$ )+4#2)* #* *)*1* <+!-6µ*)*6"1#$6 @6$ #!. 5$#$-5"2'

-#6@µ6*#,)0. #*2 -2@5"5+6µ9.*2 #,)*2. C"+6@+78"6 #6; 6/64#!#"; )*2 9<*2.

4&$ #$ -#6@µ64#2)$ #*2 -2@5"5+6µ9.*2 #,)*2, $&&7 * 1/6*; /". $)*#"&"1 -#6@-

µ64#2)* (µ" #*. 1/6* #+4)* )*2 µ6$ 84+µ$ @6$ µ)6-54#$ "1.$6 9.$ “)+4#2)*” µ"

#* *)*1* 8#67<.*.#$6 #$ µ)6-54#$, <0+1; .$ "1.$6 ! 1/6$ µ)6-54#*). D#* )+*!-

@*,µ".* )$+7/"6@µ$, * *+6>4µ".*; $)4 #* <+'-#! #,)*; ()"&'!"*$$+$&, <+!-6-

µ*)*6'(!5" @6$ #!. 5$#$-5"2' #+6:. -#6@µ6*#,)0. $2#*, #*2 #,)*2, µ" *.4-

µ$#$ 304,5,.6+', 7.60"89:$+;4:.1, 5$6 7.60"89:$+;4:.2.

!"#$#µ%&'( )*+'( ,-,'µ%&.& C$+4&* )*2 ! 9..*6$ #0. *+6>4µ".0. $)4 #* <+'-#! #,)0. 9<"6 )&"*."5#'µ$-

#$, /". 5$#$89+."6 .$ ")6#+9E"6 #! /!µ6*2+@1$ #,)0. µ" 4&! #! -!µ$-1$ #!;

&9B!;. ?.$; *&*5&!+0µ9.*; #,)*; /"/*µ9.0. $)*#"&"1#$6 $)4 /,* µ9+!: (1)

9.$ )+*5$(*+6-µ9.* -,-#!µ$ $)*('5"2-!; (4)0; 9.$ -,-#!µ$ -2µ)&!+:µ$-

#*; 0; )+*; /,* -#!. )"+1)#0-! #*2 #,)*2 $5"+$10. 5$6 9.$ -,-#!µ$ 56.!#';

2)*/6$-#*&'; -#!. )"+1)#0-! #*2 #,)*2 )+$@µ$#65:.) 5$6 (2) 9.$ -,.*&* $)4

)+*5$(*+6-µ9."; )+7B"6; (4)0; )+4-("-! 5$6 $8$1+"-!). C6* -2@5"5+6µ9.$, *6

!!"#$#%& 8 ""#%'!() *!*&+!,-, 510

int x;

! µ"#$%&!#' !"#$$%$&'1 ($ µ)*+*,-" .$ /!&0("1 #,)*2 ()"&'!"*$$+$&, µ" #!.

".#*&'

()"&'!"*$$+$&, !"#$$%$&'1;

3)4 #* -!µ"1* $2#4 5$6 µ"#7, ! µ"#$%&!#' !"#$$%$&'1 ($ $.$89+"#$6 -" 9.$

*&45&!+* #µ'µ$ 5"&6:. µ.'µ!; #* *)*1* )"+69<"6 #* 4.*µ$, #!. !&651$, 5$6 #*

%$(µ4 65$.4#!#$; ".4; 2)$&&'&*2. =$ µ"µ*.0µ9.$ -#*6<"1$ $2#*, #*2 #µ'µ$-

#*; ($ µ)*+*,. .$ )+*-)"&7>*.#$6 µ" )$+$-#7-"6; #*2 #,)*2 !"#$$%$&'1.-.&-

µ* 5$6 !"#$$%$&'1./$012*. ?#-6, µ6$ ".#*&' 4)0; !

!"#$$%$&'1./$012* ! 26;

($ µ)*+*,-" .$ <+!-6µ*)*6!("1 @6$ #*. *+6-µ4 #!; #6µ'; 26 -#* -2-#$#654

-#*6<"1* /$012* µ9-$ -#* #µ'µ$ )*2 "1.$6 @.0-#4 0; !"#$$%$&'1. A)1-!;, ! "-

.#*&'

()"&'!"*$$+$&, 304,5,.6+', 7.60"89:$+;4:.1, 7.60"89:$+;4:.2;

($ µ)*+"1 .$ <+!-6µ*)*6!("1 @6$ #! /'&0-! #0. #+6:. µ"#$%&!#:. 304,5,.6+',

7.60"89:$+;4:.1, 5$6 7.60"89:$+;4:.2 :-#" .$ $.'5*2. -#*. #,)*

()"&'!"*$$+$&,, $5+6%:; 4)0; ! ".#*&'

real Maniki, Mesi, Laimos;

<+!-6µ*)*6"1#$6 @6$ #! /'&0-! #0. µ"#$%&!#:. Maniki, Mesi, 5$6 Laimos :-#"

.$ $.'5*2. -#* -#*6<"6:/! #,)* real.

A1.$6 -!µ$.#654 .$ 5$#$&7%"#" #! /6$8*+7 µ"#$B, ".4; #,)*2 *+6>4µ".*2

$)4 #* <+'-#! 5$6 ".4; )+$@µ$#65*, -#*6<"1*2 #*2. =* #"&"2#$1* $.$89+"#$6

0; !"#$µ#%"&'( (instance) #*2 #,)*2. ?.$; *+6>4µ".*; $)4 #* <+'-#! #,)*;

$)*#"&"1 -#!. *2-1$ 9.$ )+4#2)* #* *)*1* <+!-6µ*)*6"1#$6 @6$ #!. 5$#$-5"2'

-#6@µ6*#,)0. #*2 -2@5"5+6µ9.*2 #,)*2. C"+6@+78"6 #6; 6/64#!#"; )*2 9<*2.

4&$ #$ -#6@µ64#2)$ #*2 -2@5"5+6µ9.*2 #,)*2, $&&7 * 1/6*; /". $)*#"&"1 -#6@-

µ64#2)* (µ" #*. 1/6* #+4)* )*2 µ6$ 84+µ$ @6$ µ)6-54#$ "1.$6 9.$ “)+4#2)*” µ"

#* *)*1* 8#67<.*.#$6 #$ µ)6-54#$, <0+1; .$ "1.$6 ! 1/6$ µ)6-54#*). D#* )+*!-

@*,µ".* )$+7/"6@µ$, * *+6>4µ".*; $)4 #* <+'-#! #,)*; ()"&'!"*$$+$&, <+!-6-

µ*)*6'(!5" @6$ #!. 5$#$-5"2' #+6:. -#6@µ6*#,)0. $2#*, #*2 #,)*2, µ" *.4-

µ$#$ 304,5,.6+', 7.60"89:$+;4:.1, 5$6 7.60"89:$+;4:.2.

!"#$#µ%&'( )*+'( ,-,'µ%&.& C$+4&* )*2 ! 9..*6$ #0. *+6>4µ".0. $)4 #* <+'-#! #,)0. 9<"6 )&"*."5#'µ$-

#$, /". 5$#$89+."6 .$ ")6#+9E"6 #! /!µ6*2+@1$ #,)0. µ" 4&! #! -!µ$-1$ #!;

&9B!;. ?.$; *&*5&!+0µ9.*; #,)*; /"/*µ9.0. $)*#"&"1#$6 $)4 /,* µ9+!: (1)

9.$ )+*5$(*+6-µ9.* -,-#!µ$ $)*('5"2-!; (4)0; 9.$ -,-#!µ$ -2µ)&!+:µ$-

#*; 0; )+*; /,* -#!. )"+1)#0-! #*2 #,)*2 $5"+$10. 5$6 9.$ -,-#!µ$ 56.!#';

2)*/6$-#*&'; -#!. )"+1)#0-! #*2 #,)*2 )+$@µ$#65:.) 5$6 (2) 9.$ -,.*&* $)4

)+*5$(*+6-µ9."; )+7B"6; (4)0; )+4-("-! 5$6 $8$1+"-!). C6* -2@5"5+6µ9.$, *6

Instance of type

!!"#$#%& 8 ""#%'!() *!*&+!,-, 512

!" #$%&'(µ) *+,)- %.- µ-) ./."-) *,."'0 1*, *+,)- 1-)2/3-µ(, *4.%5 4)- ), "$+-

3"6µ* µ-) 4).7''('( 1-)1-4)3+) µ* %,"µ) push. 8''*5 '*-."6$9+*5 #"6 2) 2/-

')µ* ,) *4.*'":,.)- 3* µ*.)&'(./5 ."6 .:#"6 !"#$%&'$()*% *+,)- ( )#;2(3(

(pop) 4).)<=$+3*=, )#% .( 3."+&), " /'*9<"5 9-) ." ), ( 3."+&) *+,)- 71*-),

4)- " /'*9<"5 9-) ." ), ( 3."+&) *+,)- #'0$(5 — *$9)3+*5 "- "#"+*5 %'*5 2) )-

#)-.":3), "$-3µ":5 #$%32*.=, 1-)1-4)3-;,. >* '+9) '%9-), " "$-3µ%5 ."6 .:-

#"6 1*1"µ/,=, !"#$%&'$()*% 1*, #*$-')µ&7,*- %'*5 .-5 -1-%.(.*5 #"6 2) 2/')µ*

,) 3<*.+?",.)- µ* )6.%,.

@) µ#"$":3)µ* ,) ':3"6µ* )6.% ." #$%&'(µ) *#*4.*+,",.)5 .(, *,."'0

µ)5 +,-./ '"#$ ;3.* ,) #*$-')µ&7,*- 1-)1-4)3+*5 4)2;5 4)- #*$-9$)A/5 1*1"-

µ/,=,. B-) #)$71*-9µ), 2) µ#"$":3)µ* ,) 9$7C"6µ* .", 4;1-4)

!"#$% &'() !"#$%&'$()*% *+ { int 0*'*12,(./-%&'$()*%[20]. int 3/(4'5%&'$()*%=0. ,#-,#.-$/- push('-µ6) { 0*'*12,(./-%&'$()*%[3/(4'5%&'$()*%] ! '-µ6. 3/(4'5%&'$()*% ! 3/(4'5%&'$()*% + 1. } ,#-,#.-$/- pop ... }

µ/3= ."6 "#"+"6 363<*.+?"6µ* .", .:#" !"#$%&'$()*% µ* µ*.)&'(./5 #"6 ","-

µ7?",.)- 0*'*12,(./-%&'$()*% 4)- 3/(4'5%&'$()*% 4)- µ* 1-)1-4)3+*5 #"6 ","-

µ7?",.)- push 4)- pop. (D7$-, )#'%.(.)5, /<"6µ* 36µ#*$-'7&*- µ-) #"': )#'0

/41"3( .(5 1-)1-4)3+)5 push. E.(, #$)9µ).-4%.(.), ( 1-)1-4)3+) 2) /#$*#* ,)

*'/9<*- ), ( 3."+&) /<*- <;$" #$-, #$"3#)203*- ,) #$"32/3*- µ-) ,/) 4).)<;-

$-3( 3* )6.0.)

>* )6.%, .", *#*4.*.)µ/," "$-3µ% ."6 .:#"6 !"#$%&'$()*%, 2) µ#"$":3)µ*

,) 1(';3"6µ* .-5 3."+&*5 &'$()*78*, &'$()*3"$, 4)- &'$()*!,(* µ* .(, *,."'0

!"#$%&'$()*% &'$()*78*, &'$()*3"$, &'$()*!,(*;

F).%#-,, 2) *+<)µ* .( 16,).%.(.) ,) =2":µ* 4).)<=$+3*-5 3* )6./5 .-5 3."+-

&*5 µ/3= *,."';, %#=5 (

&'$()*78*.push(25);

( "#"+) ?(.7*- .(, *4./'*3( .(5 1-)1-4)3+)5 push #"6 3<*.+?*.)- µ* .(

&'$()*78*, µ* .( <$03( .(5 .-µ05 25 =5 #$)9µ).-405 #)$)µ/.$"6.

G- "$-?%µ*,"- )#% ." <$03.( .:#"- #"6 #*$-/<"6, "$-3µ":5 '*-."6$9-;, 4)-

#$7H*=, ","µ7?",.)- !"#$#µ%&'( )*+'( ,-,'µ%&.& (abstract data types). E*

),.+2*3( µ* ."65 #-" 3."-<*-;1*-5 .:#"65 #"6 "$+?",.)- )#% ." <$03.(, "- )A(-

$(µ/,"- .:#"- 1*1"µ/,=, *+,)- "'"4'($=µ/,*5 1"µ/5 4)- ( *µA7,-30 ."65 3*

!!"#$#%& 8 ""#%'!() *!*&+!,-, 512

!" #$%&'(µ) *+,)- %.- µ-) ./."-) *,."'0 1*, *+,)- 1-)2/3-µ(, *4.%5 4)- ), "$+-

3"6µ* µ-) 4).7''('( 1-)1-4)3+) µ* %,"µ) push. 8''*5 '*-."6$9+*5 #"6 2) 2/-

')µ* ,) *4.*'":,.)- 3* µ*.)&'(./5 ."6 .:#"6 !"#$%&'$()*% *+,)- ( )#;2(3(

(pop) 4).)<=$+3*=, )#% .( 3."+&), " /'*9<"5 9-) ." ), ( 3."+&) *+,)- 71*-),

4)- " /'*9<"5 9-) ." ), ( 3."+&) *+,)- #'0$(5 — *$9)3+*5 "- "#"+*5 %'*5 2) )-

#)-.":3), "$-3µ":5 #$%32*.=, 1-)1-4)3-;,. >* '+9) '%9-), " "$-3µ%5 ."6 .:-

#"6 1*1"µ/,=, !"#$%&'$()*% 1*, #*$-')µ&7,*- %'*5 .-5 -1-%.(.*5 #"6 2) 2/')µ*

,) 3<*.+?",.)- µ* )6.%,.

@) µ#"$":3)µ* ,) ':3"6µ* )6.% ." #$%&'(µ) *#*4.*+,",.)5 .(, *,."'0

µ)5 +,-./ '"#$ ;3.* ,) #*$-')µ&7,*- 1-)1-4)3+*5 4)2;5 4)- #*$-9$)A/5 1*1"-

µ/,=,. B-) #)$71*-9µ), 2) µ#"$":3)µ* ,) 9$7C"6µ* .", 4;1-4)

!"#$% &'() !"#$%&'$()*% *+ { int 0*'*12,(./-%&'$()*%[20]. int 3/(4'5%&'$()*%=0. ,#-,#.-$/- push('-µ6) { 0*'*12,(./-%&'$()*%[3/(4'5%&'$()*%] ! '-µ6. 3/(4'5%&'$()*% ! 3/(4'5%&'$()*% + 1. } ,#-,#.-$/- pop ... }

µ/3= ."6 "#"+"6 363<*.+?"6µ* .", .:#" !"#$%&'$()*% µ* µ*.)&'(./5 #"6 ","-

µ7?",.)- 0*'*12,(./-%&'$()*% 4)- 3/(4'5%&'$()*% 4)- µ* 1-)1-4)3+*5 #"6 ","-

µ7?",.)- push 4)- pop. (D7$-, )#'%.(.)5, /<"6µ* 36µ#*$-'7&*- µ-) #"': )#'0

/41"3( .(5 1-)1-4)3+)5 push. E.(, #$)9µ).-4%.(.), ( 1-)1-4)3+) 2) /#$*#* ,)

*'/9<*- ), ( 3."+&) /<*- <;$" #$-, #$"3#)203*- ,) #$"32/3*- µ-) ,/) 4).)<;-

$-3( 3* )6.0.)

>* )6.%, .", *#*4.*.)µ/," "$-3µ% ."6 .:#"6 !"#$%&'$()*%, 2) µ#"$":3)µ*

,) 1(';3"6µ* .-5 3."+&*5 &'$()*78*, &'$()*3"$, 4)- &'$()*!,(* µ* .(, *,."'0

!"#$%&'$()*% &'$()*78*, &'$()*3"$, &'$()*!,(*;

F).%#-,, 2) *+<)µ* .( 16,).%.(.) ,) =2":µ* 4).)<=$+3*-5 3* )6./5 .-5 3."+-

&*5 µ/3= *,."';, %#=5 (

&'$()*78*.push(25);

( "#"+) ?(.7*- .(, *4./'*3( .(5 1-)1-4)3+)5 push #"6 3<*.+?*.)- µ* .(

&'$()*78*, µ* .( <$03( .(5 .-µ05 25 =5 #$)9µ).-405 #)$)µ/.$"6.

G- "$-?%µ*,"- )#% ." <$03.( .:#"- #"6 #*$-/<"6, "$-3µ":5 '*-."6$9-;, 4)-

#$7H*=, ","µ7?",.)- !"#$#µ%&'( )*+'( ,-,'µ%&.& (abstract data types). E*

),.+2*3( µ* ."65 #-" 3."-<*-;1*-5 .:#"65 #"6 "$+?",.)- )#% ." <$03.(, "- )A(-

$(µ/,"- .:#"- 1*1"µ/,=, *+,)- "'"4'($=µ/,*5 1"µ/5 4)- ( *µA7,-30 ."65 3*

!!"#$#%& 8 ""#%'!() *!*&+!,-, 512

!" #$%&'(µ) *+,)- %.- µ-) ./."-) *,."'0 1*, *+,)- 1-)2/3-µ(, *4.%5 4)- ), "$+-

3"6µ* µ-) 4).7''('( 1-)1-4)3+) µ* %,"µ) push. 8''*5 '*-."6$9+*5 #"6 2) 2/-

')µ* ,) *4.*'":,.)- 3* µ*.)&'(./5 ."6 .:#"6 !"#$%&'$()*% *+,)- ( )#;2(3(

(pop) 4).)<=$+3*=, )#% .( 3."+&), " /'*9<"5 9-) ." ), ( 3."+&) *+,)- 71*-),

4)- " /'*9<"5 9-) ." ), ( 3."+&) *+,)- #'0$(5 — *$9)3+*5 "- "#"+*5 %'*5 2) )-

#)-.":3), "$-3µ":5 #$%32*.=, 1-)1-4)3-;,. >* '+9) '%9-), " "$-3µ%5 ."6 .:-

#"6 1*1"µ/,=, !"#$%&'$()*% 1*, #*$-')µ&7,*- %'*5 .-5 -1-%.(.*5 #"6 2) 2/')µ*

,) 3<*.+?",.)- µ* )6.%,.

@) µ#"$":3)µ* ,) ':3"6µ* )6.% ." #$%&'(µ) *#*4.*+,",.)5 .(, *,."'0

µ)5 +,-./ '"#$ ;3.* ,) #*$-')µ&7,*- 1-)1-4)3+*5 4)2;5 4)- #*$-9$)A/5 1*1"-

µ/,=,. B-) #)$71*-9µ), 2) µ#"$":3)µ* ,) 9$7C"6µ* .", 4;1-4)

!"#$% &'() !"#$%&'$()*% *+ { int 0*'*12,(./-%&'$()*%[20]. int 3/(4'5%&'$()*%=0. ,#-,#.-$/- push('-µ6) { 0*'*12,(./-%&'$()*%[3/(4'5%&'$()*%] ! '-µ6. 3/(4'5%&'$()*% ! 3/(4'5%&'$()*% + 1. } ,#-,#.-$/- pop ... }

µ/3= ."6 "#"+"6 363<*.+?"6µ* .", .:#" !"#$%&'$()*% µ* µ*.)&'(./5 #"6 ","-

µ7?",.)- 0*'*12,(./-%&'$()*% 4)- 3/(4'5%&'$()*% 4)- µ* 1-)1-4)3+*5 #"6 ","-

µ7?",.)- push 4)- pop. (D7$-, )#'%.(.)5, /<"6µ* 36µ#*$-'7&*- µ-) #"': )#'0

/41"3( .(5 1-)1-4)3+)5 push. E.(, #$)9µ).-4%.(.), ( 1-)1-4)3+) 2) /#$*#* ,)

*'/9<*- ), ( 3."+&) /<*- <;$" #$-, #$"3#)203*- ,) #$"32/3*- µ-) ,/) 4).)<;-

$-3( 3* )6.0.)

>* )6.%, .", *#*4.*.)µ/," "$-3µ% ."6 .:#"6 !"#$%&'$()*%, 2) µ#"$":3)µ*

,) 1(';3"6µ* .-5 3."+&*5 &'$()*78*, &'$()*3"$, 4)- &'$()*!,(* µ* .(, *,."'0

!"#$%&'$()*% &'$()*78*, &'$()*3"$, &'$()*!,(*;

F).%#-,, 2) *+<)µ* .( 16,).%.(.) ,) =2":µ* 4).)<=$+3*-5 3* )6./5 .-5 3."+-

&*5 µ/3= *,."';, %#=5 (

&'$()*78*.push(25);

( "#"+) ?(.7*- .(, *4./'*3( .(5 1-)1-4)3+)5 push #"6 3<*.+?*.)- µ* .(

&'$()*78*, µ* .( <$03( .(5 .-µ05 25 =5 #$)9µ).-405 #)$)µ/.$"6.

G- "$-?%µ*,"- )#% ." <$03.( .:#"- #"6 #*$-/<"6, "$-3µ":5 '*-."6$9-;, 4)-

#$7H*=, ","µ7?",.)- !"#$#µ%&'( )*+'( ,-,'µ%&.& (abstract data types). E*

),.+2*3( µ* ."65 #-" 3."-<*-;1*-5 .:#"65 #"6 "$+?",.)- )#% ." <$03.(, "- )A(-

$(µ/,"- .:#"- 1*1"µ/,=, *+,)- "'"4'($=µ/,*5 1"µ/5 4)- ( *µA7,-30 ."65 3*