Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών



Σχετικά έγγραφα
ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

Συλλογές, Στοίβες και Ουρές

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Διάλεξη 15: Αναδρομή (Recursion)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Διάλεξη 08: ΛίστεςΙΙ Κυκλικές Λίστες. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 15: Αναδρομή (Recursion)

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων (Data Structures)

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

POINTERS, AGGREGATION, COMPOSITION

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Δοµές Δεδοµένων. 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Φροντιστήριο 4 Σκελετοί Λύσεων

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων & Αλγόριθμοι

ιαφάνειες παρουσίασης #11

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Οντοκεντρικός Προγραμματισμός

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Δομές Δεδομένων και Αλγόριθμοι

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Φροντιστήριο 4 Σκελετοί Λύσεων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

Αναδρομικοί Αλγόριθμοι

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

υναµικές οµές εδοµένων

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Στοίβες με Δυναμική Δέσμευση Μνήμης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

ΕΠΛ232: Εργαστήριο 2

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Προγραμματισμός Ι (ΗΥ120)

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

Κεφάλαιο 5 Συλλογές, Στοίβες και Ουρές

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

Ουρά Προτεραιότητας (priority queue)

Αντικειµενοστρεφής Προγραµµατισµός

Εισαγωγή στον Προγραμματισμό

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Εισαγωγή στον Προγραμματισμό

Transcript:

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες - Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις - Εφαρμογή Στοιβών 2: Ισοζυγισμός Παρενθέσεων - Εφαρμογή Στοιβών 3: Αντίστροφος Πολωνικός Συμβολ. - Εφαρμογή Ουρών 1: Διερεύνηση κατά Πλάτος

Ανασκόπηση ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2

Size=3 head ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 3 Συνδεδεμένες Λίστες Μία απλή συνδεδεμένη λίστα είναι μία συμπαγής δομή δεδομένων η οποία αποτελείται από μία ακολουθία κόμβων. Κάθε κόμβος αποτελείται από: Δεδομένα Δείκτη/Αναφορά προς τον επόμενο κόμβο της λίστας data next node Επίσης μπορεί να χρησιμοποιηθεί μία βοηθητική δομή που να αποθηκεύει χρήσιμες πληροφορίες, π.χ., αναφορά στον πρώτο κόμβο, μέγεθος των στοιχείων, κτλ. ADT data next data next data next NULL node node node

Size=3 head ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4 Στοίβα ως Συνδεδεμένη Λίστα Μπορούμε να υλοποιήσουμε μία Στοίβα με μία απλά συνδεδεμένη λίστα Κάθε κόμβος αποτελείται από ένα στοιχείο (στοιχεία της στοίβας) και από ένα δείκτη (προς τον επόμενο κόμβο της στοίβας). Η κορυφή της στοίβας είναι ο πρώτος κόμβος της λίστας, Χρησιμοποιούμε μια μεταβλητή για να φυλάγουμε στοιχεία σχετικά με τη στοίβα π.χ. μέγεθος (size) και δείκτη προς την κορυφή της στοίβας (head) που βρίσκεται και το στοιχείο top. STACK top data next data next data next NULL node node node

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5 Υλοποίηση Στοίβας με Συνδεδεμένη Λίστα Με χρήση εσωτερικής κλάσης για τους κόμβους public class Stack<E> implements IStack<E> private class StackNode<E>{ private E obj; private StackNode<E> next; StackNode(E obj, StackNode<E> head) { this.obj = obj; this.next = head; public E getelement(){ return this.obj; private StackNode<E> head; private int size; public Stack() { head = null; size=0; public boolean isempty(){ return this.size==0; public void makeempty(){ this.head = null; this.size=0; public int size() { return this.size; public E top() { return isempty()? null : head.getelement(); public void push(e obj) { StackNode<E> newnode = new StackNode<E>(obj, head); this.head = newnode; size+=1; public void pop() { if (!isempty()) { this.head = this.head.next; size-=1;

Ουρά ως Συνδεδεμένη Λίστα Size=3 head Μπορούμε να υλοποιήσουμε μία Ουρά με μία απλά συνδεδεμένη λίστα Κάθε κόμβος αποτελείται από ένα στοιχείο (στοιχεία της ουράς) και από ένα δείκτη (προς τον επόμενο κόμβο της ουράς). Το πρώτο στοιχείο αποθηκεύεται στον πρώτο κόμβο Κάθε νέο στοιχείο αποθηκεύεται στο πίσω μέρος Χρησιμοποιούμε μια μεταβλητή για να φυλάγουμε στοιχεία σχετικά με την ουρά π.χ., μέγεθος (size) και δείκτες προς την κορυφή της ουράς (head) ) που βρίσκεται και το στοιχείο front και προς το τελευταίο στοιχείο της ουράς (rear). QUEUE front rear data next data next data next NULL node node node ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 6

Εφαρμογή Στοίβας 1: Αναδρομικές Διαδικασίες Οι στοίβες βρίσκουν μεγάλη χρήση στην πληροφορική για δημιουργία άλλων δομών και σε βασικό λογισμικό. Κλασικό παράδειγμα αφορά την κλήση υποπρογραμμάτων (function calls) και αναδρομικών διαδικασιών. Σε κάθε κλήση οποιασδήποτε συνάρτησης ένα σύνολο από λέξεις (stack frame) φυλάσσεται σε μια στοίβα, από όπου μπορεί να ανασυρθεί. Όταν μια συνάρτηση καλεί μια άλλη συνάρτηση οι παράμετροι της συνάρτησης, η διεύθυνση επιστροφής και οι τοπικές μεταβλητές της καλούσας συνάρτησης φυλάσσονται μέσα στη στοίβα του προγράμματος. Έτσι, όταν η κληθείσα συνάρτηση τερματίσει, το περιβάλλον της καλούσας συνάρτησης ανασύρεται από τη στοίβα για να συνεχιστεί κανονικά η εκτέλεσή της. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 7

Εφαρμογή Στοίβας 1: Αναδρομικές Διαδικασίες Όταν ένα πρόγραμμα φορτώνεται στην μνήμη του υπολογιστή, τότε η δεσμευμένη μνήμη οργανώνεται σε τρεις περιοχές (segments): a) text (code) segment, b) stack segment, and c) heap segment. To text segment περιέχει τον κώδικα υπό εκτέλεση, ενώ το heap segment επιτρέπει στον πρόγραμμα να δεσμεύσει μνήμη. Αυτή η μνήμη παραμένει μέχρι να αποδεσμευτεί από τον garbage collector ή να τερματιστεί το πρόγραμμα. To stack segment από την άλλη χρησιμεύει για να φυλάγονται όλες οι πληροφορίες σχετικές με την εκτέλεση συναρτήσεων. Η εντολή ulimit -a στο unix δείχνει τους πόρους που είναι διαθέσιμους σε ένα πρόγραμμα: virtual memory, stack, cpu time, processes, κτλ. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 8

Παράδειγμα: Παραγοντικός Αριθμός με Αναδρομή int factorial ( int n ) { if (n == 0) return 1; else Βήμα Τερματισμού return n x factorial(n-1); Αναδρομικό Βήμα 6 2 Εκτέλεση factorial(3) 1 Εκτέλεση factorial(2) return 2 return 3 factorial(2); Εκτέλεση factorial(0) return 1 1 Εκτέλεση factorial(1) return 1 factorial(0); factorial(1); ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 9

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 10 Αναδρομή και Διαχείριση Μνήμης factorial(2) Στοίβα main factorial(2) return 2 * factorial(1) factorial( 2 ) main factorial(2) return 2 * factorial(1) return 1 * factorial(0) factorial( 1 ) factorial( 2 ) main

Αναδρομή και Διαχείριση Μνήμης ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 11 factorial(2) return 2 * factorial(1) return 1 * factorial(0) return 1 factorial( 0 ) factorial( 1 ) factorial( 2 ) main factorial(2) return 2 * factorial(1) return 1 * 1 factorial( 1 ) factorial( 2 ) main

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12 Αναδρομή και Διαχείριση Μνήμης factorial(2) return 2 * 1 factorial( 2 ) main Στοίβα 2 main

Εφαρμογή Στοίβας 2: Ισοζυγισμός Παρενθέσεων Ο έλεγχος σύνταξης (π.χ. ενός προγράμματος) απαιτεί να ταιριάξουμε σύμβολα/λέξεις όπως: begin με end else με if παρενθέσεις { με Ας υποθέσουμε την ύπαρξη του συνόλου χαρακτήρων: {,, [, ], (, ). Πρόβλημα: να διαπιστώσετε αν μια συμβολοσειρά που περιέχει τους πιο πάνω χαρακτήρες είναι ισοζυγισμένη, δηλαδή όλες οι παρενθέσεις ταιριάζουν. π.χ. { [ ] ( [ { { [ ] ) ) ( [ ] { ( ) ) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 13

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14 Εφαρμογή Στοίβας 2: Ισοζυγισμός Παρενθέσεων Ανά πάσα στιγμή, η στοίβα περιέχει όλες τις `αριστερές παρενθέσεις που δεν έχουν ακόμη `ταιριαστεί. ( ( [ { [ ( ( [ { ( ] ) [ { ( ] ) { ( ] ) ( ] ) [ ( ( [ ( ( ] ) ] )

Εφαρμογή Στοίβας 2: Ισοζυγισμός Παρενθέσεων Λύση βασισμένη σε στοίβες public class IsozygismosParentheseon { public static void main(string[] args) { Stack<Character> stack = new Stack<Character>(); String test1 = "{ [ ] "; String test2 = "( [ { { [ ] ) )"; String test3 = "( [ ] { ( ) )"; for(character c: test3.tochararray()) { if(!(c=='(' c=='[' c=='{' c=='' c==']' c==')') ) continue; if( c=='(' c=='[' c=='{' ) { stack.push(c); else { if( stack.isempty() ) {System.out.println("Error"); return; Character check = stack.top(); stack.pop(); if(!match(check,c) ) {System.out.println("Error"); return; if( stack.isempty() ) {System.out.println("Success"); else {System.out.println("Error"); public static boolean match(character a, Character b){ return ( (a=='(' && b==')') (a=='{' && b=='') (a=='[' && b==']') ); ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15

Εφαρμογή Στοίβας 3: Αντίστροφος Πολωνικός Συμβ. Ο αντίστροφος πολωνικός συμβολισμός (Jan Lukasiewich, 1951) είναι μια μέθοδος αναπαράστασης αριθμητικών παραστάσεων που δεν κάνει χρήση παρενθέσεων. π.χ. αντί α + β γράφουμε α β + (α + β)*γ γράφουμε α β + γ * α + (β*γ) γράφουμε α β γ * + α*β + γ*δ γράφουμε α β * γ δ * + 60 - ((5+3)*(2+4)) γράφουμε 60 5 3 + 2 4 + * - Η συνήθης μορφή μιας παράστασης ονομάζεται ενθεματική (infix), γιατί οι τελεστές των πράξεων τίθενται μεταξύ των τελεστέων. Η πολωνική μορφή μιας παράστασης ονομάζεται μεταθεματική (postfix) γιατί οι τελεστές βρίσκονται μετά από τους τελεστέους. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17 Εφαρμογή Στοίβας 3: Αντίστροφος Πολωνικός Συμβ. Ζητείται η υλοποίηση ενός προγράμματος που να υπολογίζει αριθμητικές εκφράσεις αντίστροφου πολωνικού συμβολισμού. Για τον υπολογισμό τέτοιων εκφράσεων μπορεί να χρησιμοποιηθεί η έννοια της στοίβας. Η δομή του προγράμματος θα έχει τη μορφή της παρακάτω ανακύκλωσης: MakeEmpty(); while (c = next character && c is not EOF){ switch (c) { integer: Push(c); *: Push(Pop() * Pop()); +: Push(Pop() + Pop()); : default: error print Top(); Χρόνος Εκτέλεσης: O(n) υποθέτουμε υλοποίηση της Pop η οποία και επιστρέφει και αφαιρεί τον κόμβο κορυφής στοίβας

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18 Εφαρμογή Στοίβας 3: Αντίστροφος Πολωνικός Συμβ. Έστω η παράσταση 60 5 3 + 2 4 + * -. ( Η σε ενθεματική μορφή: 60 - (5+3)*(2+4) ) 6 48 8 12 60 5 3 + 2 4 + * -

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 19 Εφαρμογή Στοίβας 3: Αντίστροφος Πολωνικός Συμβ. Υποθέτουμε την ύπαρξη ακεραίων, παρενθέσεων (, ), +, * Κανόνας: το * έχει μεγαλύτερη προτεραιότητα από το +. Στόχος: μετατροπή της ενθεματικής σε μεταθεματική μορφή. π.χ. 60 + (( 5 + 3) * ( 2 + 4)) 60 5 3 + 2 4 + * + Χρησιμοποιώντας στοίβες η μετατροπή μπορεί να επιτευχθεί σε χρόνο Ο(Ν).

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 20 Εφαρμογή Στοίβας 3: Αντίστροφος Πολωνικός Συμβ. Δεδομένο Εισόδου: λίστα L που περιέχει μια ενθεματική παράσταση MakeEmpty(); για κάθε c στην L κάνε { αν ο c είναι integer: τύπωσέ τον ( : γράψε ( στη στοίβα S ) : ανέτρεξε στη στοίβα αφαιρώντας και τυπώνοντας όλα τα στοιχεία μέχρι την πρώτη ( που θα συναντήσεις την οποία αφαίρεσε χωρίς να τυπώσεις. + : αφαίρεσε και τύπωσε όλα τα + και * που βρίσκονται στη στοίβα μέχρι να συναντήσεις μια ( ή να αδειάσει η στοίβα και στη συνέχεια πρόσθεσε το + στη στοίβα * : αφαίρεσε και τύπωσε όλα τα * που βρίσκονται στη στοίβα μέχρι να συναντήσεις μια ( ή ένα + ή να αδειάσει η στοίβα και στη συνέχεια πρόσθεσε το * αφαίρεσε και τύπωσε όλα τα στοιχεία που παραμένουν στη στοίβα. Χρόνος Εκτέλεσης: O(n)

Εφαρμογή Στοίβας 3: Αντίστροφος Πολωνικός Συμβ. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 21 a + b * c * ( d + e )

Εφαρμογές Ουράς Παραδείγματα Πραγματικού Κόσμου Γραμμή Πελατών Ανσανσέρ Μηχανές Λεφτών Μηχανές Ποτών/Φαγητών... ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 22 Παραδείγματα σε Υπολογιστές/Δίκτυα Διαχείρηση Περιορισμένων Πόρων, π.χ., bandwidth Προσωμείωση Διακριτών Γεγονότων (Discrete event simulation) Χρήση σε Αλγόριθμους, π.χ., BFS, Dijkstra, Huffman Coding, A*

Εφαρμογή Ουράς 1: Διερεύνηση κατά Πλάτος (BFS) Στη θεωρία γράφων, η διερεύνηση κατά βάθος (breadth-first search (BFS)) επιτυγχάνει την αναζήτηση ανά επίπεδο Παράδειγμα Επίπεδο 1: D Επίπεδο 2: C, F Επίπεδο 3: A, E, H Επίπεδο 4: B, G Δεδομένου ενός κόμβου, μπορούμε κάθε φορά να έχουμε πρόσβαση στους απευθείας απόγονούς του Πως μπορεί να υλοποιηθεί; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 23

Εφαρμογή Ουράς 1: Παράδειγμα Εκτέλεσης BFS A C D E F H Ουρά Q D C,F F, A A, E, H E, H, B H, B B, G Έξοδος Διαδικασίας D C F A E H B G G { B G 18 February 2005 ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι 24