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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 2η: Στοίβες Ουρές - Λίστες Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

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

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

Δηάιεμε 8: Αθεξεκέλνη Τύπνη Δεδνκέλσλ

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

Ενότητα 2 Στοίβες Ουρές - Λίστες

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

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

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

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

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

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

Ενότητα 2 Στοίβες Ουρές - Λίστες

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

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

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

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

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

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

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

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

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

ΕΝΟΤΗΤΑ 3 ΓΡΑΜΜΙΚΕΣ ΛΙΣΤΕΣ

Διορθώσεις σελ

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

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

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

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

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

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

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι

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

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

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

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

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

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

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

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

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

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

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

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο

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

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

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

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

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Οι δομές δεδομένων στοίβα και ουρά

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

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

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

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

Δομές Δεδομένων Ενότητα 4

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

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

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

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

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

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

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

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

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

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

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

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

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

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

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

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

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

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

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

Transcript:

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

Αφηρημένοι Τύποι Δεδομένων Τύπος Δεδομένων:ένας τύποςμαζί με ένα σύνολο πράξεωνγια τη δημιουργίακαι επεξεργασίαδεδομένων του τύπου(int,char,float) Αφηρημένος Τύπος Δεδομένων (ΑΤΔ):μαθηματικό μοντέλο που αποτελείται από ένα ή περισσότερα πεδία ορισμού και ένα σύνολο πράξεων για επεξεργασία των πεδίων ορισμού. Όταν μιλούμε για ένα ΑΤΔ μας ενδιαφέρει η προδιαγραφή του καιπως θα τον χρησιμοποιήσουμε. Δεν μας ενδιαφέρει ο τρόπος υλοποίησής του μέσα στη μηχανή. (Η υλοποίηση ενός ΑΤΔ μπορεί να αλλάξει χωρίς να επηρεάσει την ορθότητα προγραμμάτωνπου τον χρησιμοποιούν.) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2

Αφηρημένοι Τύποι Δεδομένων (συν.) Παραδείγματα: 1.Ο τύποςintμαζί με τις πράξεις +, *, /, =, είναι ένας τύπος δεδομένων. Για να τον χρησιμοποιήσουμε πρέπει να γνωρίζουμε το σύνολο των πράξεων. Ο τρόπος αναπαράστασής του στον υπολογιστή δεν μας ενδιαφέρει 2. Ο τύπος double μαζί με τις πράξεις +, *, /, =, είναι ένας τύπος δεδομένων. 3. Ο τύπος float μαζί με τις πράξεις +, *, /, =, είναι ένας τύπος δεδομένων. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

Αφηρημένοι Τύποι Δεδομένων (συν.) 4. ΟΑφηρημένος Τύπος Δεδομένων(ΑΤΔ)Ουρά Προτεραιότητας, το οποίο είναι ένα σύνολο στοιχείων τύπου key(π.χ., key=intή key=charή key =(int,int) ), συνοδευόμενο από τις πιο κάτω πράξεις. δημιούργησε την άδεια ουρά προτεραιότητας, q, έλεγξε αν η ουρά qείναι άδεια, βάλε το στοιχείο kστην ουρά q, αφαίρεσε και επίστρεψε το μικρότερο στοιχείο της q (σύμφωνα με τη γραμμική διάταξη της ουράς). Ένας ΑΤΔ μπορεί να υλοποιηθεί με πολλούς τρόπους,π.χ. μια ουρά προτεραιότητας μπορεί να υλοποιηθεί από δομές λίστας, δενδρικές δομές κλπ. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4

Λίστες Λίστα:μια ακολουθία στοιχείων(π.χ., Queue ή Stack όπως θα δούμε στην συνέχεια) Λ=α 1, α 2,..., α n Αναφερόμαστε στα στοιχεία της λίστας ως κόμβους. Με Λ[i] θα αναφερόμαστε στο i-οστό στοιχείο της λίστας. Μήκος μιας λίστας Λονομάζεται ο αριθμός των στοιχείων της και συμβολίζεται ως Λ. Αν Λ = 0 τότε αναφερόμαστε στην κενή λίστατην οποία συμβολίζουμεως. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

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

Λίστες (συν.) Οι πιο σημαντικές πράξεις στον ορισμό ενός ΑΤΔ-λίστας είναιη εισαγωγήκαι η εξαγωγήκόμβων στα άκρα της λίστας. Με βάση την προδιαγραφή αυτών των πράξεων, διακρίνουμε δύο βασικούςτύπους λίσταςπου έχουν πολλές και σημαντικές εφαρμογές σε κλάδους επιστημών που χρησιμοποιούν υπολογιστικές μεθόδους. Είναι οι ακόλουθες: Η στοίβα(stack)που έχει μόνο ένα άκρο προσιτό για εισαγωγές και εξαγωγές κόμβων.(lifo Last In First Out) Η ουρά(queue)όπου γίνονται εισαγωγές στο ένα άκρο και εξαγωγές από το άλλο. (FIFO First In First Out) Υπάρχουν και άλλοι ΑΤΔ-λίστας μικρότερης πρακτικής σημασίας, όπως: ουρά με δύο άκρα, πολλαπλή στοίβα, κλπ. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7

ΑΤΔ Στοίβα (stack) Ορίζουμε μια στοίβα ως μια λίστα συνοδευόμενη από τις πιο κάτω πράξεις: MakeEmptyStack() δημιούργησε την κενή στοίβα. IsEmptyStack(S) επέστρεψε τη λογική τιμή που εκφράζει το αν η Sείναι κενή. Push(x,S) εισήγαγε τον κόμβο x στη στοίβα S. Pop(S) διέγραψε τον κόμβο κορυφής της S. Top(S) δώσε τον κόμβο κορυφής της S. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8

ΑΤΔ Στοίβα (stack)(συν.) Οι πράξεις αυτές προδιαγράφονται από τους εξής κανόνες: IsEmptyStack(MakeEmptyStack()) = true IsEmptyStack(Push(x,S)) = false Pop(MakeEmptyStack()) = error πολιτική LIFO last in, first out Pop(Push(x,S)) = S Top(MakeEmptyStack()) = error Top(Push(x,S)) = x ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9

Υλοποίηση ΑΤΔ Οι προαναφερθείς ΑΤΔ μπορούν να υλοποιηθούν με διάφορες δομές δεδομένων χρησιμοποιώντας είτε στατική είτε δυναμική χορήγηση μνήμης. Στατική: Δέσμευση μνήμης πριν την εκκίνηση προγράμματος (πχ struct node student;) Δυναμική: Δέσμευση μνήμης κατά την διάρκεια της εκτέλεσης( struct node *student με malloc() και free()) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10

Στοίβα με Στατική Δέσμευση Μνήμης Ο πιο απλός τρόποςείναι η χρήση μονοδιάστατου πίνακα. Χρειάζεται να γνωρίζουμε από την αρχή το μήκος της λίστας. Για την παράσταση στοίβας με στοιχεία α 1, α 2,..., α n χρειαζόμαστε ένα πίνακα Α στον οποίο θα αποθηκεύσουμε τα στοιχεία της στοίβας, Α[i-1] = α i. Πρέπει να γνωρίζουμε ανά πάσα στιγμή που βρίσκεται η κορυφή της στοίβας. Έτσι χρησιμοποιούμε μια εγγραφή με δύο πεδία 1. ένα πίνακα Α[0..n-1], και 2.μια μεταβλητή Lengthτύπου ακέραιος(που συγκρατεί τη θέση κορυφής). 0 1 2 3 4 5 6 7 8 9 Length ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11

Στοίβας με Στατική Δέσμευση Μνήμης: Υλοποίηση Ο τύπος δεδομένωνγια τη Στοίβαμε ΣτατικήΔέσμευση Μνήμης είναι: typedef struct { type list[ size ]; //π.χ., size=10 int Length; STACK; Στατική Δέσμευση size θέσεων μνήμης Υλοποίηση πράξεων: void MakeEmpty(STACK *S){ S->Length = 0; int IsEmpty(STACK *S){ return (S->Length == 0); type Top(STACK *S){ if (!IsEmpty(S) ) return S->list[(S->Length)-1]; void Push(type x, STACK *S){ if ((S->Length) < size) { S->list[S->Length]= x; (S->Length)++; void Pop(STACK *S){ if (!IsEmpty(S) ) (S->Length)--; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 12

ΑΤΔ Λίστα 2 : Ουρές(queues) Νέες εισαγωγές γίνονται στο πίσω άκρο. Εξαγωγές από το μπροστινό άκρο Ορίζουμε μια ουρά ως μια λίστα συνοδευόμενη από τις πιο κάτω πράξεις: MakeEmptyQueue() δημιούργησε την κενή ουρά <>. IsEmptyQueue(Q) επέστρεψε τη λογική τιμή που εκφράζει το ανη Q είναι κενή. EnQueue(x,Q) εισήγαγε τον κόμβο x στην ουρά Q. DeQueue(Q) διέγραψε τον κόμβο εξόδου της Q Top(Q) δώσε τον κόμβο εξόδου της Q. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 13

ΑΤΔ Λίστα 2 : Ουρές(queues) (συν.) Οι πράξεις αυτές προδιαγράφονται από τους εξής κανόνες IsEmptyQueue( MakeEmptyQueue()) = true IsEmptyQueue(EnQueue(x,Q)) = false DeQueue( MakeEmptyQueue()) = error πολιτική FIFO first in, first out Top (MakeEmptyQueue()) = error Προτού να εισάγουμε το x Top(EnQueue(x,Q)) = if IsEmptyQueue( Q ) then x else Top(Q) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 14

Ουρά(απλή) με Στατική Δέσμευση Μνήμης: Υλοποίηση Ο τύπος δεδομένωνγια τη Ουράμε ΣτατικήΔέσμευση Μνήμης είναι: typedef struct { type list[ size ]; int front; int rear; QUEUE; Υλοποίηση πράξεων: void MakeEmpty(QUEUE *Q){ Q->front = Q->rear = 0; int IsEmpty(QUEUE *Q){ return (Q->front == Q->rear); type Top( QUEUE *Q ){ if (!IsEmpty(Q) ) return Q->list[Q->front]; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 15

Ουρά(απλή) με Στατική Δέσμευση Μνήμης: Υλοποίηση Υλοποίηση πράξεων(συν.): void Enqueue(type x, QUEUE *Q){ if ((Q->rear) < size) { Q->list[Q->rear] = x; Q->rear++; void Dequeue(QUEUE *Q){ if (!IsEmpty(Q) && (Q->front)<(Q->rear) ) Q->front += 1; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 16

ΑΤΔ Λίστα 3: Ουρές με Δύο Άκρα Ο ΑΤΔ ουρά με δύο άκρα είναι παρόμοιος με το ΑΤΔ ουρά, με τη διαφορά ότι έχει δύο άκρα και επιτρέπει εισαγωγές και εξαγωγές και στα δύο. Μια ουρά δύο άκρων ορίζεται ως μια λίστα συνοδευόμενη από τις πιο κάτω πράξεις: MakeEmptyQueue(), IsEmptyQueue(Q) Insert(x, Q) εισήγαγε το στοιχείο x στο μπροστινό άκρο της Q Eject(Q) διέγραψε τον κόμβο στο πίσω άκρο της Q EnQueue(x,Q) εισήγαγε τον στοιχείο x στο πίσω μέρος της Q. DeQueue(Q) διέγραψε τον κόμβο στο μπροστινό άκρο της Q Front(Q) δώσε τον κόμβο στο μπροστινό άκρο της Q Rear(Q) δώσε τον κόμβο στο πίσω άκρο της Q ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 17

Ουρές με Δύο Άκρα με Στατική Δέσμευση Μνήμης Για την παράσταση μιας ουράςμε στοιχεία α 0, α 1,..., α n-1 χρειαζόμαστε ένα πίνακα Α στον οποίο θα αποθηκεύσουμε τα στοιχεία της ουράς, Θα αναφερόμαστε στο στοιχείο Α[i-1] σαν α i, δύο δείκτες που προσδιορίζουν τα δύο προσιτά άκρα της ουράς. Έτσι χρησιμοποιούμε μια εγγραφή με τρία πεδία 1. ένα πίνακα Α[n], 2. μια μεταβλητή front,τύπου ακέραιος, που συγκρατεί τη θέση που βρίσκεται αμέσως πριν τη θέση εξόδου, και 3. μια μεταβλητή rear, τύπου ακέραιος, που συγκρατεί τη θέση του τελευταίου στοιχείου της ουράς. Μέγεθος ουράς: rear-front+1 (πχ rear=2, front=0 => length=3) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 18

ΑΤΔ Λίστα 4 : Κυκλική Ουρά Για λόγους χώρου μνήμης μπορούμε να πραγματοποιήσουμε την ουρά με μια κυκλικήδιάταξη των λέξεων της μνήμης. Δηλαδή θα θεωρούμε ότι η περιοχή μνήμης δεν αρχίζει με τη λέξη Α[0]και τελειώνει με τη λέξη Α[n-1],αλλά ότι μετά την Α[n-1]ακολουθεί η Α[0]. A[n-2] A[n-1] A[0] A[1]... Έτσι μετά από μια ακολουθία εισαγωγών και εξαγωγών η ουρά μας πιθανόν να έχει την πιο κάτω μορφή όπου θεωρούμε ότι η αρχή της ουράς βρίσκεται στη θέση kκαι το τέλος της ουράς στη θέση 4. k ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 19