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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

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

Δομές Δεδομένων & Αλγόριθμοι. Στοίβες. Εργαστήριο Γνώσης & Ευφυούς Πληροφορικής 1

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

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

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

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

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

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

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

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

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

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

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

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

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

Στοίβες. ΟΑΤ της Στοίβας. Περιγραφή και Υλικό Ανάγνωσης. Αφηρηµένοι Τύποι εδοµένων (AΤ )

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

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

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

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

POINTERS, AGGREGATION, COMPOSITION

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

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

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

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

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

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

Σι θα δούμε σε αυτό το μάθημα;

Μάθημα 21: Ουρές (Queues)

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

public class ArrayQueue implements Queue {

Δομές Δεδομένων - Εργαστήριο 2. Λίστες

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

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

Το ισχυρό πλεονέκτηµα των απλών µη ταξινοµηµένων πινάκων που είναι η γρήγορη εισαγωγή, αναιρείται αν απαγορεύονται τα διπλότυπα.

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

Προγραμματισμός Υπολογιστών με C++

public class ArrayStack implements Stack {

Συνδεδεμένη Λίστα ΣΛ null VK 23

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

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

Ουρά Προτεραιότητας (priority queue)

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

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

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

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

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

4. Συνδεδεμένες Λίστες

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

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

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

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

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

4 ΔYNAMIKEΣ ΔOMEΣ ΔEΔOMENΩN

Week. 6: Java Collections

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

Transcript:

Ουρές

Ουρές

Περίληψη Η ΟυράΑΔΤ Υλοποίηση με κυκλικό πίνακα Αυξανόμενη Ουρά βασισμένη σε πίνακα Interface ουράς στην C++

Η Ουρά ADT Η ΑΔΤ Ουρά αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές ακολουθούν το first-in first-out μοντέλο Οι εισαγωγές είναι στο πίσω της ουράς και οι διαγραφές στην αρχή της ουράς Βασικές λειτουργίες της ουράς: enqueue(object o): εισαγωγή στοιχείου o στο τέλος της ουράς dequeue(): αφαίρεση και επιστροφή του στοιχείου στην αρχή της ουράς Βοηθητικές λειτουργίες της ουράς: front(): επιστρέφει το στοιχείο στην αρχή χωρίς να το αφαιρεί size(): επιστρέφει τον αριθμό των στοιχείων isempty(): επιστρέφει μια Boolean τιμή που δείχνει αν υπάρχουν στοιχεία Exceptions Η εκτέλεση μιας dequeue ή front λειτουργίας σε μια άδεια ουρά προκαλεί EmptyQueueException

Ουρά (queue) Δομή τύπου FIFO: First In - First Out (πρώτη εισαγωγή πρώτη εξαγωγή) Περιορισμένος τύπος γραμμικής λίστας: Εισαγωγή στο ένα άκρο (στο τέλος) και διαγραφή από το άλλο (την αρχή) AbstractDataType Queue { instances ordered list of elements; one end is called the front; the other is the rear; operations Create (): create an empty queue; IsEmpty (): return true if queue is empty, return false otherwise; First (): return first (front) element of queue; Last (): return last (rear) element of queue; Add (x): add element x to the queue; Delete (x): delete front element from queue and put it in x; }

Εφαρμογές των Ουρών Άμεσες εφαρμογές Σειρές αναμονής Πρόσβαση σε μοιραζόμενους πόρους (π.χ., εκτυπωτής) Πολυπρογραμματισμός Έμμεσες εφαρμογές Βοηθητική δομή δεδομένων για αλγόριθμους Συστατικό άλλων δομών δεδομένων

Ουρά βασισμένη σε πίνακα Χρήση πίνακα μεγέθους N με κυκλικό τρόπο Δύο μεταβλητές καταγράφουν το μπροστά και το πίσω f δείκτης του μπροστινού στοιχείου r δείκτης αμέσως μετά το πίσω στοιχείο Η θέση r του πίνακα διατηρείται άδεια Q normal configuration 0 12 f r Q wrapped-around configuration 012 r f

Υλοποίηση ουράς με πίνακα location(i)=front+i-1 Ερωτήσεις: Γιατί να μη ξεκινά η ουρά πάντα από την αρχή του πίνακα; Τι πρόβλημα δημιουργείται με την ολίσθηση της ουράς προς τα δεξιά;

Λειτουργίες Ουράς Χρησιμοποιούμε την εντολή modulo (υπόλοιπο διαίρεσης) Algorithm size() return (N f + r) mod N Algorithm isempty() return (f r) Q Q 012 f r 012 r f

Λειτουργίες Ουράς (συνέχεια) Η εντολή enqueue προκαλεί exception αν ο πίνακας είναι γεμάτος Αυτό το exception είναι ανεξάρτητο υλοποίησης Algorithm enqueue(o) if size() = N 1 then throw FullQueueException else Q[r] o r (r + 1) mod N Q Q 012 f r 012 r f

Λειτουργίες Ουράς (συνέχεια) Η εντολή dequeue προκαλεί exception αν ο πίνακας είναι άδειος Algorithm dequeue() if isempty() then throw EmptyQueueException else o Q[f] f (f + 1) mod N return o Q 012 f r Q 012 r f

Υλοποίηση κυκλικής ουράς (με πίνακα) location(i)=(front+i)%maxsize Ερωτήσεις: Πού δείχνουν οι δείκτες front και rear; Πώς διακρίνουμε μεταξύ μιας άδειας και μιας γεμάτης ουράς;

Επαυξανόμενη Ουρά Βασισμένη σε Πίνακα Σε μια enqueue εντολή, όταν ο πίνακας είναι γεμάτος, αντί για πρόκληση exception, μπορούμε να αντικαταστήσουμε τον πίνακα με έναν μεγαλύτερο Παρόμοιο με αυτό που κάναμε στην βασισμένη σε πίνακα στοίβα Η enqueue εντολή έχει χρόνο απόσβεσης O(n) με την αυξητική στρατηγική O(1) με την στρατηγική διπλασιασμού

Συνδεδεμένη ουρά class LinkedQueue { // FIFO objects public: LinkedQueue() {front = rear = 0;}; // constructor ~LinkedQueue(); // destructor int IsEmpty() {return ((front)? 0 : 1);} int IsFull(); int First(type& x); // return first element of queue int Last(type& x); // return last element of queue int operator +(type x); // add x to queue int operator -(type& x); // delete x from queue // First,+,- return 0 on failure, 1 on success private: Node<type> *front, *rear; }

Προσθήκη (ως τελευταίο στοιχείο) σε συνδεδεμένη ουρά int LinkedQueue<type>::operator+(type x) //add x to queue { Node<type> *i; i = new Node<type>; if (i) { i->data = x; i->link = 0; if (front) rear->link = i; else front = i; rear = i; return 1; }; return 0; // add fails }

Διαγραφή (του πρώτου στοιχείου) από συνδεδεμένη ουρά int LinkedQueue<type>::operator-(type& x) //delete first element and return in x { if (IsEmpty()) return 0; //delete fails x = front->data; Node<type> *i = front; front = front->link; delete i; return 1; }

Άτυπο C++ Interface Ουράς Άτυπο C++ interface για την ADT ουρά Απαιτεί τον ορισμό της κλάσης EmptyQueueExceptio n template <typename Object> class Queue { public: int size(); bool isempty(); Object& front() throw(emptyqueueexception); void enqueue(object o); Object dequeue() throw(emptyqueueexception); };