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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Σειρά Προβλημάτων 3 Λύσεις

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

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

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

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

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

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

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

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

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

Ανάπτυξη και Σχεδίαση Λογισμικού

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

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Η γλώσσα προγραμματισμού Strange

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

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

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

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

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

ΔΟΜΗ ΕΠΙΛΟΓΗΣ. Οι διάφορες εκδοχές της

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Γλώσσα Προγραμματισμού C

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

Προγραμματισμός I (Θ)

Μεταγλωττιστές Βελτιστοποίηση

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

Χρήσεις Στοίβας ΣΤΟΙΒΑ. Ορισμός Στοίβας (stack) Βασική Λειτουργικότητα

Διδάσκων: Κωνσταντίνος Κώστα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

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

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Συναρτήσεις στη Visual Basic 6.0

Υλοποίηση Λειτουργιών Στοίβας Απλά(1/2)

Εισαγωγή στην γλώσσα προγραμματισμού C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Δομή προγράμματος στη Fortran

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Έστω συμβολοσειρά Το σύνολο FIRST περιέχει τα τερματικά σύμβολα από τα οποία αρχίζουν οι συμβολοσειρές που παράγονται από την

Προγραµµατισµός. Αναδροµή (1/2)

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Η γλώσσα προγραμματισμού EEL

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

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

Εντολές επιλογής Επαναλήψεις (if, switch, while)

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ. Παράδειγμα #1. Πράξεις μεταξύ ακεραίων αριθμών

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

Transcript:

Εφαρμογές στοιβών Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων Αντίστροφος Πολωνικός Συμβολισμός ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

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

Εφαρμογές Στοίβων Αφού κάθε κλήση μιας διαδικασίας εκτελείται στο δικό της περιβάλλον, είναι επιτρεπτή και η κλήση συναρτήσεων από τον εαυτό τους (αναδρομή). int f(int x, int y) { } int a; if ( term_cond ) return...; a =...; return g(a); int g(int z) { int p,q; p =...; q =...; return f(p,q); } ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-3

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

Λύση βασισμένη σε στοίβες Ισοζυγισμός Παρενθέσεων MakeEmpty (S); while (c = next character and c is not EOF){ if c = (,[,{ Push(c,S); else if IsEmpty(S) report error; else d = Top(S); Pop(S); if c does not match d report error; } if IsEmpty(S) report success else report error Χρόνος Εκτέλεσης: O(n) όπου n το μήκος της συμβολοσειράς ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-5

Παράδειγμα Εκτέλεσης Ανά πάσα στιγμή, η στοίβα περιέχει όλες τις `αριστερές παρενθέσεις που δεν έχουν ακόμη `ταιριαστεί. ( [ {}( ]) Error! ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-6

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

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

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

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

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

Παράδειγμα Εκτέλεσης a+b*c * (d+e) ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-12