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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 9: Αφηρημένοι Τύποι Δεδομένων. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

Δηάιεμε 9: Σηνίβεο:Υινπνίεζε & Εθαξκνγέο

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

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

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

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

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

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

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

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

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

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

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

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

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

Διαδικασιακός Προγραμματισμός

ιαφάνειες παρουσίασης #5 (β)

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

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

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

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

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

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

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

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

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

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

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

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

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

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

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

Προγραμματισμός Αναδρομή

Δείκτες και Δομές. Info. Link. typedef struct NodeTag { InfoField Info; struct NodeTag *Link; } NodeType;

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

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Διάλεξη 9: Δυναμική Δέσμευση Μνήμης

IsEmptyList(L): επιστρέφει true αν L = < >, false

Προγραμματισμός Αναδρομή

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

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

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

Περιεχόμενα. Πρόλογος... 21

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

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

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

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

Εργαστήριο 5. Εαρινό Εξάμηνο

Προγραμματισμός Δομές Δεδομένων

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

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

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

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

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

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

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

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

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

Εισαγωγή στον δομημένο προγραμματισμό

Ενότητα 2 Στοίβες Ουρές - Λίστες. ΗΥ240 - Παναγιώτα Φατούρου 1

Transcript:

Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή Στοιβών 2: Ισοζυγισμός Παρενθέσεων Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ 9-1

ΑΤΔ Στοίβες - Πράξεις Θυμηθείτε τον ΑΤΔ στοίβα με τις πράξεις του: MakeEmptyStack() IsEmptyStack(S) δημιούργησε την κενή στοίβα. επέστρεψε τη λογική τιμή που εκφράζει το αν η S είναι κενή. Push(x,S) εισήγαγε τον κόμβο x στη στοίβα S. Pop(S) διέγραψε τον κόμβο κορυφής της S. Top(S) δώσε τον κόμβο κορυφής της S. Είχαμε πει ότι αυτές οι πράξεις μπορούν να υλοποιηθούν με την στατική δέσμευση μνήμης typedef struct Stack{ int list[size]; int length; } stack 9-2

Στοίβα με Δυναμική Δέσμευση Μνήμης Για την παράσταση μιας στοίβας με στοιχεία α 1, α 2,..., α n χρησιμοποιούμε μια συνδεδεμένη λίστα από κόμβους. Κάθε κόμβος αποτελείται από ένα στοιχείο (στοιχεία της στοίβας) και από ένα δείκτη (προς τον επόμενο κόμβο της στοίβας). Η κορυφή της στοίβας είναι ο πρώτος κόμβος της λίστας, Χρησιμοποιούμε μια μεταβλητή για να φυλάγουμε στοιχεία σχετικά με τη στοίβα π.χ. μέγεθος (size) και δείκτη προς την κορυφή της στοίβας (head). size=3 9-3

Στοίβα με Δυναμική Δέσμευση Μνήμης Συνεπώς απαιτούνται οι παρακάτω δηλώσεις κόμβων: typedef struct node { typedef struct stack { type data; NODE *head; struct node *next; int size; } NODE; } STACK; Υπολείπεται η υλοποίηση των βασικών πράξεων στοίβας για αναπαράσταση με συνδεδεμένες λίστες. Βασική προϋπόθεση: όλες οι πράξεις να εκτελούνται χωρίς αναζήτηση οποιοδήποτε στοιχείου. 9-4

Στοίβα με Δυναμική Δέσμευση Μνήμης Υλοποίηση πράξεων (ψευδοκώδικας): int MakeEmptyStack(STACK *S) S->size = 0; S->head = NULL; void Pop(STACK *S) if ((S->size) > 0) p = S->head; S->head = p->next; free(p); (S->size)--; void Push(STACK *S, type x) p = (NODE *) malloc(sizeof(node)); p->data = x; p->next = S->head; S->head = p; (S->size) ++; 9-5

Στοίβα με Δυναμική Δέσμευση Μνήμης int main() { STACK stack; MakeEmptyStack(&stack); // fill stack for(i=0; i<10; i++) { push(i, &stack); } // print stack for(i=0; i<10; i++) { top(&stack); pop(&stack); } } stack Size=10 head 9 8 0 Output: 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 9-6

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

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

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

Παράδειγμα Εκτέλεσης Ανά πάσα στιγμή, η στοίβα περιέχει όλες τις `αριστερές παρενθέσεις που δεν έχουν ακόμη `ταιριαστεί. ( ( [ { [ ( ( [ { } ( ] ) [ { } ( ] ) {} ( ] ) } ( ] ) [ ( ( [ ( ( ] ) ] ) 9-10

Ισοζυγισμός Παρενθέσεων Λύση (ψευδοκώδικας) βασισμένη σε στοίβες MakeEmpty (S); while (c = nextcharacter() and (c is not EOF)) if c!= (,[,{, }, ], ) continue; if c = (,[,{ Push(c,S); else // pop item from stack 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 9-11