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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ουρές (Queues) FIFO A B C. Διαγραφή. Εισαγωγή. εµπρός. πίσω. πίσω. πίσω

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

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

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

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

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

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

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

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

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

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

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

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

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

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

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

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

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

ΣΥΜΒΟΛΟΣΕΙΡΕΣ (Strings) Ο ΑΤΔ Συµβολοσειρά Μία συµβολοσειρά είναι µία ακολουθία χαρακτήρων. Bασικές πράξεις : 1. Δηµιουργία. 2. Μήκος. 3.

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

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

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

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

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

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

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

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

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

Γραμμικές Δομές Δεδομένων

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

Επισκόπηση Μαθήματος. Γραμμικές Δομές Δεδομένων. ΑΤΔ Ουρά Εναλλακτικοί Σχεδιασμοί Προγραμματισμός με Ενότητες Interface.h Implementation.

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

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

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

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

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

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

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

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

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

Δρ. Πέτρος Παναγή B123

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

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

Ιδιοκτησία Αντικειµένου

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

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις

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

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

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

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

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 3: ΑΤΔ Ουρά. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών

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

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

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

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

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

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

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

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

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

Γραμμικές λίστες. Γκόγκος Χρήστος ΤΕΙ Ηπείρου

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

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

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

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

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

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

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

Εισαγωγή στον Προγραμματισμό

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

Transcript:

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

Ανασκόπηση Αφηρηµένος Τύπος εδοµένων Ουρά Υλοποίηση µε Κυκλικό Πίνακα Υλοποίηση µε Συνδεδεµένη Λίστα Εφαρµογές Ανοιξη 5 Στέργιος Β. Αναστασιάδης

Αφηρηµένος Τύπος εδοµένων Ουρά Γραµµική συλλογή στοιχείων Η εισαγωγή γίνεται στο ένα άκρο (rear, ) και η διαγραφή στο άλλο άκρο (front, ) FIFO (First In First Out) Παράδειγµα: ουρά αναµονής σε εµπορικά, υπηρεσίες dequeue enqueue Ανοιξη 5 Στέργιος Β. Αναστασιάδης 3

Βασικές Πράξεις Ουράς create() : δηµιουργεί κενή ουρά empty() : ελέγχει αν µια ουρά είναι κενή () : επιστρέφει το πρώτο στοιχείο της ουράς enqueue() : εισάγει στοιχείο στην ουρά () dequeue() : αποµακρύνει στοιχείο από την ουρά () Γ Β Α Ανοιξη 5 Στέργιος Β. Αναστασιάδης 4

Χρησιµοποιούµε Υλοποίηση Ουράς µε Πίνακα Κυκλικό πίνακα είκτες στην αρχή και το τέλος της ουράς Συνθήκη διάκρισης µεταξύ άδειας και γεµάτης ουράς N- Ανοιξη 5 Στέργιος Β. Αναστασιάδης 5

Ορισµός Κυκλικού Πίνακα #define N /* µέγεθος πίνακα */ typedef struct { int queue[n]; int, ; queue_t, *queueptr_t; queue_t queue; N- void create(queueptr_t q) { q-> = q-> = ; Ανοιξη 5 Στέργιος Β. Αναστασιάδης 6

Ακραίες Συνθήκες /* έλεγχος άδειας ουράς */ N- int empty(queueptr_t q) { return (q-> == q->); /* έλεγχος γεµάτης ουράς */ int full(queueptr_t q) { N- return ((q-> + ) % N == q->); unused slot! Ανοιξη 5 Στέργιος Β. Αναστασιάδης 7

Προσθήκη/Αποµάκρυνση Στοιχείου void enqueue(queueptr_t q, data_t d) { if (full(q)) printf( full queue ); else { /* προσθήκη στοιχείου */ q->queue[q->] = d; q-> = (q-> + ) % N; void dequeue(queueptr_t q, data_t *d) { if (empty(q)) printf( empty queue ); else { /* αποµάκρυνση στοιχείου */ *d = q->queue[q->]; q-> = (q-> + ) % N; N- N- Ανοιξη 5 Στέργιος Β. Αναστασιάδης 8

Υλοποίηση µε Λογική Μεταβλητή Για να µη µένει αχρησιµοποίητο ένα στοιχείο στη διάκριση κενής και γεµάτης ουράς εισάγουµε µια λογική µεταβλητή empty µε αρχική τιµή στη δοµή queue_t N- int empty(queueptr_t q) { return(q->empty); int full(queueptr_t q) { return((q-> == q->) && (!q->empty)); N- Ανοιξη 5 Στέργιος Β. Αναστασιάδης 9

Προσθήκη/Αποµάκρυνση Στοιχείου void enqueue(queueptr_t q, data_t d) { if (full(q)) printf( full queue ); else { /* προσθήκη στοιχείου */ q->queue[q->] = d; q-> = (q-> + ) % N; q->empty = ; void dequeue(queueptr_t q, data_t *d) { if (empty(q)) printf( empty queue ); else { /* αποµάκρυνση στοιχείου */ *d = q->queue[q->]; q-> = (q-> + ) % N; q->empty = (q-> == q->); N- N- Ανοιξη 5 Στέργιος Β. Αναστασιάδης

Υλοποίηση µε Μετρητή Για να µη µένει αχρησιµοποίητο ένα στοιχείο στη διάκριση κενής και γεµάτης ουράς εισάγουµε µετρητή στοιχείων count µε αρχική τιµή στη δοµή queue_t N- count == int empty(queueptr_t q) { return (q->count == ); N- int full(queueptr_t q) { return (q->count == N); count == N Ανοιξη 5 Στέργιος Β. Αναστασιάδης

Υλοποίηση Ουράς µε Λίστα typedef struct node { data_t data; struct node *next; node_t, *nodeptr_t; typedef struct { nodeptr_t, ; queue_t, *queueptr_t; queue_t queue; void create(queueptr_t q) { q-> = q-> = NULL; Ανοιξη 5 Στέργιος Β. Αναστασιάδης

Προσθήκη Κόµβου σε Ουρά int empty(queueptr_t q) { return (q-> == NULL); void enqueue(queueptr_t q, data_t d) { nodeptr_t newnode = (nodeptr_t) malloc(sizeof(node_t)); if (newnode == NULL) return; /* ουρά γεµάτη */ newnode->data = d; newnode->next = NULL; if (empty(q)) q-> = q-> = newnode; else {q->->next = newnode; q-> = newnode; newnode Ανοιξη 5 Στέργιος Β. Αναστασιάδης 3

Αποµάκρυνση Κόµβου από Ουρά void dequeue(queueptr_t q, data_t *d) { if (empty(q)) return; /* άδεια ουρά */ else { nodeptr_t oldnode = q->; *d = oldnode->data; q-> = oldnode->next; if (q-> == NULL) q-> = NULL; free(oldnode); oldnode Ανοιξη 5 Στέργιος Β. Αναστασιάδης 4

Εφαρµογή: Αποθήκευση Συµβολοσειράς ιαβάζουµε από αρχείο µια ακολουθία από χαρακτήρες Αποθηκεύουµε τµήµατα της ακολουθίας σε διαδοχικούς κόµβους ουράς ιατηρούµε τη διάταξη των χαρακτήρων σε δυναµική δοµή string chunk string chunk string chunk Ανοιξη 5 Στέργιος Β. Αναστασιάδης 5

Υλοποίηση Εφαρµογής typedef struct node { typedef struct { char data[chunk+]; nodeptr_t, ; struct node *next; queue_t, *queueptr_t; node_t, *nodeptr_t; do { if (fgets(buf, CHUNK+, stdin) /* + για \ */ break; /* enqueue chunk */ newnode = (nodeptr_t) malloc(sizeof(node_t)); strcpy(newnode->data, buf); newnode->next = NULL; if (q->) { q->->next = newnode; q-> = newnode; else /* άδεια ουρά */ q-> = q-> = newnode; while (buf[strlen(buf)-]!= \n ); Ανοιξη 5 Στέργιος Β. Αναστασιάδης 6