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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο 2: Πίνακες

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

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

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

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

Διάλεξη 15η: Αναδρομή, μέρος 1ο

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

Στοίβες Ουρές - Λίστες

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

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

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

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

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

Σημειώσεις όγδοης εβδομάδας

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Σημειώσεις έκτης και έβδομης εβδομάδας

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

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

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

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

Προγραμματισμό για ΗΜΥ

Transcript:

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

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

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

Στοίβα με Δυναμική Δέσμευση Μνήμης (συν.) Υλοποίηση δομής (χρησιμοποιείται int αντί για type): typedef struct node { int data; struct node *next; NODE; typedef struct stack { NODE *head; int size; STACK; Υλοποίηση πράξεων (χρησιμοποιείται int αντί για type): void MakeEmptyStack(STACK *S) { S->size = 0; S->head = NULL; int IsEmpty(STACK *S) { return (S->size == 0); void Pop(STACK *S) { NODE *p = NULL; if ((S->size) > 0){ p = S->head; S->head = p->next; free(p); (S->size)--; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4

Στοίβα με Δυναμική Δέσμευση Μνήμης (συν.) void Push(STACK *S, int x){ NODE *p = NULL; p = (NODE *) malloc(sizeof(node)); p->data = x; p->next = S->head; S->head = p; (S->size) ++; ΒΟΗΘΗΤΙΚΗ ΣΥΝΑΡΤΗΣΗ ΓΙΑ ΕΚΤΥΠΩΣΗ void PrintStack(STACK *S){ NODE *tmp = S->head; for(int i=0; i<(s->size); i++){ printf("%d ", tmp->data); tmp = tmp->next; printf("\n"); int Top(STACK *S){ if ((S->size) > 0){ return S->head->data; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

Στοίβα με Δυναμική Δέσμευση Μνήμης (συν.) Παράδειγμα εκτέλεσης: int main(int argc, char* argv[]) { STACK stack; MakeEmptyStack(&stack); // fill stack for(int i=0; i<10; i++) { Push(&stack, i); PrintStack(&stack); // print stack for(int i=0; i<10; i++) { Top(&stack); Pop(&stack); PrintStack(&stack); Εκτυπώνει 0 1 0 2 1 0 3 2 1 0 4 3 2 1 0 5 4 3 2 1 0 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 8 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 6 5 4 3 2 1 0 5 4 3 2 1 0 4 3 2 1 0 3 2 1 0 2 1 0 1 0 0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6

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

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

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

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

Εφαρμογή Στοίβας 2: Ισοζυγισμός Παρενθέσεων Λύση (ψευδοκώδικας) βασισμένη σε στοίβες 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 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11