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

Σχετικά έγγραφα
Βασικές Δομές Δεδομένων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 3 : εδοµένα. Πίνακες Στοίβα Ουρά Αναζήτηση Ταξινόµηση. Προγράµµατα

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

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

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

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

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

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

Ενότητα 7 Ουρές Προτεραιότητας

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

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

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

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

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

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

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

Κεφάλαιο 2. Η δοµή δεδοµένων Σωρός και η Ταξινόµηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.1, 12/05/2010

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

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

Transcript:

Βασικές οµές εδοµένων Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αφηρηµένοι Τύποι εδοµένων Οι ΑΤ Στοίβα και Ουρά Υλοποίηση των ΑΤ Στοίβα και Ουρά µε ιαδοχική και υναµική Χορήγηση Μνήµης ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-1

Αφηρηµένοι Τύποι εδοµένων Τύπος εδοµένων: µια συλλογή αντικειµένων µε µια κοινή σχέση µαζί µε ένα σύνολο πράξεων για τη δηµιουργία και επεξεργασία των αντικειµένων. Αφηρηµένος Τύπος εδοµένων (ΑΤ ): µαθηµατικό µοντέλο που αποτελείται από ένα ή περισσότερα πεδία ορισµού και ένα σύνολο πράξεων για επεξεργασία των πεδίων ορισµού. Όταν µιλούµε γιαέναατ µας ενδιαφέρει η προδιαγραφή του και πως θα τον χρησιµοποιήσουµε. εν µας ενδιαφέρει ο τρόπος υλοποίησής του µέσα στη µηχανή. (Η υλοποίησηενόςατ µπορεί να αλλάξει χωρίς να επηρεάσει την ορθότητα προγραµµάτων που τον χρησιµοποιούν.) ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-2

Αφηρηµένοι Τύποι εδοµένων Παραδείγµατα: 1. Οτύποςint µαζί µε τις πράξεις +, *, /, =, είναι ένας τύπος δεδοµένων. Γιανατονχρησιµοποιήσουµε χρειάζεται να γνωρίζουµετοσύνολο των σχετικών πράξεων. Ο τρόπος αναπαράστασής του στον υπολογιστή δεν µας ενδιαφέρει. 2. Ουρά Προτεραιότητας: ένα σύνολο στοιχείων τύπου key (π.χ. key = (int,int) ) πάνω στο οποίο έχει ορισθεί µια γραµµική διάταξη, συνοδευόµενο από τις πιο κάτω πράξεις. δηµιούργησε την άδεια ουρά προτεραιότητας, q, έλεγξε αν η ουρά q είναι άδεια βάλε το στοιχείο k στην ουρά q, αφαίρεσε και επίστρεψε το µικρότερο στοιχείο της q(σύµφωνα µε τη γραµµική διάταξη της ουράς). Ένας ΑΤ µπορεί να υλοποιηθεί µε πολλούς τρόπους, π.χ. µια ουρά προτεραιότητας µπορεί να υλοποιηθεί από δοµές λίστας, δενδρικές δοµές κλπ. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-3

Λίστες Λίστα: µια ακολουθία στοιχείων Λ = α 1, α 2,..., α n Αναφερόµαστεσταστοιχείατηςλίσταςωςκόµβους. Με Λ[i] θα αναφερόµαστε στο i-οστό στοιχείο της λίστας. Μήκος µιας λίστας Λ ονοµάζεται ο αριθµός των στοιχείων της και συµβολίζεται ως Λ. Αν Λ = 0 τότε αναφερόµαστε στην κενή λίστα την οποία συµβολίζουµε ως. Συνοδεύοντας λίστες µεένασύνολοπράξεωνµπορούµε να ορίσουµε αφηρηµένους τύπους δεδοµένων. Χρήσιµες πράξεις περιλαµβάνουν τις πιο κάτω: ηµιουργία λίστας Εισαγωγή νέου κόµβου στη λίστα Εξαγωγή κόµβου από τη λίστα Εύρεση κόµβου µε ορισµένη ιδιότητα ιάταξη της λίστας σύµφωνα µε κάποιασχέση ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-4

Λίστες Οι πιο σηµαντικές πράξεις στον ορισµό ενόςατ -λίστας είναι η εισαγωγή και η εξαγωγή κόµβων στα άκρα της λίστας. Με βάση την προδιαγραφή αυτών των πράξεων, διακρίνουµεδύο βασικούς τύπους λίστας που έχουν πολλές και σηµαντικές εφαρµογές σε κλάδους επιστηµών που χρησιµοποιούν υπολογιστικές µεθόδους. Είναιοιακόλουθες: Η στοίβα (stack) που έχει µόνο ένα άκρο προσιτό για εισαγωγές και εξαγωγές κόµβων. Η ουρά (queue) όπου γίνονται εισαγωγές στο ένα άκρο και εξαγωγές από το άλλο. Υπάρχουν και άλλοι ΑΤ -λίστας µικρότερης πρακτικής σηµασίας, όπως ουρά µε δύο άκρα, πολλαπλή στοίβα, κλπ ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-5

Στοίβες Ορίζουµε µια στοίβα ως µια λίστα συνοδευόµενη από τις πιο κάτω πράξεις: MakeEmptyStack() IsEmptyStack(S) Push(x,S) δηµιούργησε την κενή στοίβα. επέστρεψε τη λογική τιµή που εκφράζει το αν η S είναι κενή. εισήγαγε τον κόµβο x στην κορυφή της στοίβας S Pop(S) διέγραψε τον κόµβο κορυφής της S. Top(S) δώσε τον κόµβο κορυφής της S. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-6

Στοίβες Οι πράξεις αυτές προδιαγράφονται από τους εξής κανόνες: IsEmptyStack (MakeEmptyStack) = true IsEmptyStack(Push(x,S)) = false Pop(MakeEmptyStack()) = error Pop(Push(x,S)) = S πολιτική LIFO last in, first out Top(MakeEmptyStack()) = error Top(Push(x,S)) = x ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-7

Ουρές Από µια ουρά Q πρώτο διαγράφεται το στοιχείο που εισήχθηκε πρώτο στην ουρά. Νέες εισαγωγές γίνονται στο πίσω άκρο. Ορίζουµε µια ουρά ως µια λίστα συνοδευόµενη από τις πιο κάτω πράξεις: MakeEmptyQueue() δηµιούργησε την κενή ουρά <>. IsEmptyQueue(Q) EnQueue (x,q) DeQueue(Q) Top(Q) επέστρεψε τη λογική τιµή που εκφράζει το αν η Q είναι κενή εισήγαγε τον κόµβο x στην ουρά Q διέγραψε τον κόµβο εξόδου της Q δώσε τον κόµβο εξόδου της Q. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-8

Ουρές Οι πράξεις αυτές προδιαγράφονται από τους εξής κανόνες IsEmptyQueue(MakeEmptyQueue()) = true IsEmptyQueue (EnQueue(x,Q)) = false DeQueue(MakeEmptyQueue()) = error πολιτική FIFO first in, first out DeQueue (EnQueue(x,Q)) = if IsEmptyQueue( Q ) then Q else EnQueue(x, DeQueue(Q)) Top (MakeEmptyQueue ()) = error Top(EnQueue (x,q)) = if IsEmptyQueue( Q ) then x else Top(Q) ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-9

Ουρές µε ύο Άκρα ΟΑΤ ουρά µε δύο άκρα είναι παρόµοιος µε το ΑΤ ουρά, µε τη διαφορά ότι έχει δύο άκρα και επιτρέπει εισαγωγές και εξαγωγές και στα δύο. Μιαουράδύο άκρων ορίζεται ως µια λίστα συνοδευόµενη από τις πιο κάτω πράξεις: MakeEmptyDeQue(), IsEmptyDeQue(Q) Insert(x, Q) Eject(Q) EnQueue (x,q) DeQueue(Q) Front(Q) Rear(Q) εισήγαγε το στοιχείο x στο µπροστινό άκρο της Q διέγραψε τον κόµβο στο πίσω άκρο της Q εισήγαγε τον στοιχείο x στο πίσω µέρος της Q διέγραψε τον κόµβο στο µπροστινό άκρο της Q δώσε τον κόµβο στο µπροστινό άκρο της Q δώσε τον κόµβο στο πίσω άκρο της Q ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-10

Αναπαράσταση Βασικών ΑΤ Οι πιο πάνω ΑΤ µπορούν να υλοποιηθούν µε διάφορες δοµές δεδοµένων χρησιµοποιώντας είτε στατική είτε δυναµική χορήγηση µνήµης. 1. Αναπαράσταση Στοίβας µε ιαδοχική Χορήγηση Μνήµης Ο πιο απλός τρόπος είναι η χρήση µονοδιάστατου πίνακα. Χρειάζεται να γνωρίζουµεαπότηναρχήτοµήκος της λίστας. Για την παράσταση στοίβας µεστοιχείαα 1, α 2,..., α n χρειαζόµαστε ένα πίνακα Α στον οποίο θα αποθηκεύσουµεταστοιχείατηςστοίβας, Α[i-1] = α i. Πρέπει να γνωρίζουµε ανά πάσα στιγµή που βρίσκεται η κορυφή της στοίβας. Έτσι χρησιµοποιούµε µια εγγραφή µεδύοπεδία 1. ένα πίνακα Α[0..n-1], και 2. µια µεταβλητή Length τύπου ακέραιος (που συγκρατεί τη θέση κορυφής). 0 1 2 3 4 5 Length ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-11

Αναπαράσταση ΒασικώνAΤ Οτύπος δεδοµένων που χρειάζεται για τη δοµή είναι: typedef struct Stack{ type list[size]; int Length; } stack Yλοποίηση πράξεων: MakeEmpty(stack *S){ (*S).Length = 0; } Push(type x, stack *S){ if (*S).Length <size (*S).list[(*S).Length]= x; (*S).Length++; } int IsEmpty(stack *S){ return ((*S).Length == 0); } Pop(stack *S){ if!isempty(s) (*S).Length--; } type Top(stack *S){ if!isempty(s) return (*S).list[(*S).Length-1]; } ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-12

Αναπαράσταση Βασικών ΑΤ 2. Παράσταση Oυράς σε ιαδοχική Μνήµη Για την παράσταση µιας ουράς µε στοιχεία α 0, α 1,..., α n-1 χρειαζόµαστε ένα πίνακα Α στον οποίο θα αποθηκεύσουµε τα στοιχεία της ουράς, Α[i-1] = α i, και δύο δείκτες που προσδιορίζουν τα δύο προσιτά άκρα της ουράς. Έτσι χρησιµοποιούµε µια εγγραφή µε τρίαπεδία 1. ένα πίνακα Α[n], 2. µια µεταβλητή front, τύπου ακέραιος, που συγκρατεί τη θέση που βρίσκεται αµέσως πριν τη θέση εξόδου, και 3. µια µεταβλητή Length, τύπου ακέραιος, που συγκρατεί τo µέγεθος της ουράς. Length ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-13

Αναπαράσταση Βασικών ΑΤ Για λόγους χώρου µνήµης θα πραγµατοποιήσουµετηνουράµε µια κυκλική διάταξη των λέξεων της µνήµης. ηλαδή θα θεωρούµεότιη περιοχή µνήµης δεν αρχίζει µε τηλέξηα[0] και τελειώνει µε τηλέξη Α[n-1], αλλά ότι µετά την Α[n-1] ακολουθεί η Α[0]. A[n-2] A[n-1] A[0] A[1]... Έτσι µετά από µια ακολουθία εισαγωγών και εξαγωγών η ουρά µας πιθανόν να έχει την πιο κάτω µορφή όπου θεωρούµε ότι η αρχή της ουράς βρίσκεται στη θέση k και το τέλος της ουράς στη θέση 4. k ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-14

Αναπαράσταση Βασικών ΑΤ Οτύπος δεδοµένων που χρειάζεται για τη δοµή είναι: typedef struct Queue{ type list[size]; int front; int Length; } queue Yλοποίηση πράξεων: MakeEmpty(queue *Q){ (*Q).Length = (*Q).front = 0; } int IsEmpty(queue *Q){ return ((*Q).Length == 0); } ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-15

Αναπαράσταση Βασικών ΑΤ Enqueue(type x, queue *Q){ if ((*Q).Length < size) (*Q).list[(*Q).front (*Q).Length] = x; (*Q).Length++; } Dequeue(queue *Q){ if (!IsEmpty (Q)) (*Q).Length--; (*Q).front = (*Q).front 1; } type Top(queue *Q){ if (!IsEmpty(Q) return (*Q).list[(*Q).front]; } Γράφουµε a b για (a + b)mod size και a b για (a b)mod size ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-16

Αναπαράσταση Βασικών AT 3. Παράσταση Στοίβας σε Συνδετική Μνήµη Για την παράσταση µιας στοίβας µεστοιχείαα 1, α 2,..., α n χρησιµοποιούµε µια συνδεδεµένη λίστα από κόµβους. Κάθε κόµβος αποτελείται από ένα στοιχείο (στοιχεία της στοίβας) και από ένα δείκτη (προς τον επόµενο κόµβο της στοίβας). Η κορυφήτης στοίβας είναι ο πρώτος κόµβος της λίστας, Χρησιµοποιούµε µια µεταβλητή για να φυλάγουµε στοιχεία σχετικά µε τη στοίβα π.χ. µέγεθος και δείκτη προς την κορυφή της στοίβας. 3 ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-17

Αναπαράσταση Βασικών AT Συνεπώς απαιτούνται οι παρακάτω δηλώσεις κόµβων: typedef struct node { typedef struct stack { type data; NODE *top; struct node *next; int size; } NODE; } STACK; Υπολείπεται η υλοποίηση των βασικών πράξεων στοίβας για αναπαράσταση µε συνδεδεµένες λίστες. Βασικό ζητούµενο: όλες οι πράξεις να εκτελούνται σε χρόνο Ο(1). ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-18

Υλοποίηση πράξεων: Αναπαράσταση Βασικών AT int IsEmptyStack(STACK *S) return ((*S).size == 0) Pop(STACK *S) if ((*S).size) > 0) p = (*S).top; (*S).top = (*p).next; free(p); (*S).size--; Push(STACK *S, type x) p = (NODE *)malloc(sizeof(node)); (*p).data = x; (*p).next =(*S).top; (*S).top = p; (*S).size ++; ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-19

Αναπαράσταση ΒασικώνAT 4. Παράσταση Ουράς σε Συνδετική Μνήµη Όπως και στην περίπτωση της στοίβας, κάθε κόµβος αποτελείται από ένα στοιχείο και ένα δείκτη (που δείχνει προς τον επόµενο κόµβο). Σε αυτή την περίπτωση χρησιµοποιούµε δύο δείκτες για υλοποίηση µιας ουράς, ο κάθε ένας από τους οποίους δείχνει στο κάθε ένα από τα προσιτά άκρα της ουράς. struct queue { int size node *front; node *back; } size front back ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 3-20