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

Σχετικά έγγραφα
ιαφάνειες παρουσίασης #5 (β)

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

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

DRAFT ιαφάνειες παρουσιάσεων

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

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

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

Βασικές Εξειδικεύσεις σε Θεωρία και Λογισµικό

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

Χαρακτηριστικά της C

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

Η ιστορία της C. Χαρακτηριστικά της C. Εκτέλεση προγραµµάτων. Hello world!

Ηιστορία της C. ιαφάνειες παρουσιάσεων. Χαρακτηριστικά της C. Εκτέλεση προγραµµάτων. Hello world!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

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

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

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

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

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

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

POINTERS, AGGREGATION, COMPOSITION

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

Προχωρημένες έννοιες προγραμματισμού σε C

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

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

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

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

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

Προγραμματισμός Αναδρομή

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

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

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

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

Transcript:

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης #6 (α)!ουρές (επανάληψη και συνέχεια)!στοίβες! ιπλά συνδεδεµένες λίστες!κυκλικές λίστες 1

Ουρές (i) " First In First Out (FIFO) ό,τι µπαίνει πρώτο, βγαίνει πρώτο " Ουρά ακεραίων # ΑΤ : queue # const queue queueempty; # void queueinsert (queue * qp, int t); # int queueremove (queue * qp); # int queuehead (queue q); 2

Ουρές (ii) " Υλοποίηση µε απλά συνδεδεµένη λίστα first last 3

Υλοποίηση ουράς σε C (i) " Υλοποίηση µε απλά συνδεδεµένη λίστα typedef struct list_tag { int data; struct list_tag * next; ListNode; " Τύπος queue typedef struct { ListNode * first; ListNode * last; queue; 4

Υλοποίηση ουράς σε C (ii) " Άδεια ουρά const queue queueempty = { NULL, NULL ; " Εισαγωγή στοιχείου void queueinsert (queue * qp, int t) { ListNode * n = (ListNode *) malloc(sizeof(listnode)); if (n == NULL) { printf("out of memory\n"); exit(1); 5

Υλοποίηση ουράς σε C (iii) " Εισαγωγή στοιχείου (συνέχεια) n->data = t; n->next = NULL; if (qp->last == NULL) qp->first = qp->last = n; else { qp->last->next = n; qp->last = n; 6

Υλοποίηση ουράς (iv) " Αφαίρεση στοιχείου int queueremove (queue * qp) { ListNode * n; int result; if (qp->first == NULL) { printf("nothing to remove" " from an empty queue\n"); exit(1); 7

Υλοποίηση ουράς (v) " Αφαίρεση στοιχείου (συνέχεια) n = qp->first; result = qp->first->data; qp->first = qp->first->next; free(n); if (qp->first == NULL) qp->last = NULL; return result; 8

Υλοποίηση ουράς (vi) " Εξέταση στοιχείου int queuehead (queue q) { if (q.first == NULL) { fprintf(stderr, "Nothing to see" " in an empty queue\n"); exit(1); return q.first->data; 9

Στοίβες (i) " Last In First Out (LIFO) ό,τι µπαίνει τελευταίο, βγαίνει πρώτο " Στοίβα ακεραίων # ΑΤ : stack # const stack stackempty; # void stackpush (stack * sp, int t); # int stackpop (stack * sp); # int stacktop (stack s); 10

Στοίβες (ii) " Υλοποίηση µε απλά συνδεδεµένη λίστα top 11

Υλοποίηση στοίβας σε C (i) " Τύπος stack typedef ListNode * stack; " Άδεια στοίβα const stack stackempty = NULL; " Εισαγωγή στοιχείου void stackpush (stack * sp, int t) { ListNode * n = (ListNode *) malloc(sizeof(listnode)); if (n == NULL) { printf("out of memory\n"); exit(1); 12

Υλοποίηση στοίβας σε C (ii) " Εισαγωγή στοιχείου (συνέχεια) n->data = t; n->next = *sp; *sp = n; " Αφαίρεση στοιχείου int stackpop (stack * sp) { ListNode * n; int result; if (*sp == NULL) { printf("nothing to remove" " from an empty stack\n"); exit(1); 13

Υλοποίηση στοίβας σε C (iii) " Αφαίρεση στοιχείου (συνέχεια) n = *sp; result = (*sp)->data; *sp = (*sp)->next; free(n); return result; 14

Υλοποίηση στοίβας σε C (iv) " Εξέταση στοιχείου int stacktop (stack s) { if (s == NULL) { printf("nothing to see" " in an empty stack\n"); exit(1); return s->data; 15

ιπλά συνδεδεµένες λίστες (i) " Επίσης γραµµικές διατάξεις " υο σύνδεσµοι σε κάθε κόµβο, προς τον επόµενο και προς τον προηγούµενο " Γενική µορφή, π.χ. για υλοποίηση ουράς: first last 16

ιπλά συνδεδεµένες λίστες (ii) " Τύπος κόµβου DListNode typedef struct DListNode_tag { int data; struct DListNode_tag * next; struct DListNode_tag * prev; DListNode; " Τύπος dlist typedef struct { DListNode * first; DListNode * last; dlist; " Άδεια λίστα const dlist dlistempty = { NULL, NULL ; 17

ιπλά συνδεδεµένες λίστες (iii) " Εισαγωγή στοιχείου στην αρχή void dlistinsert (dlist * lp, int t) { DListNode * n = (DListNode *) malloc(sizeof(dlistnode)); if (n == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); n->data = t; 18

ιπλά συνδεδεµένες λίστες (iv) " Εισαγωγή στοιχείου στην αρχή (συνέχεια) if (lp->first == NULL) { n->prev = n->next = NULL; lp->first = lp->last = n; else { n->prev = NULL; n->next = lp->first; lp->first->prev = n; lp->first = n; 19

Κυκλικές λίστες (i) first last " Τύπος clist typedef struct { ListNode * first; ListNode * last; clist; " Άδεια λίστα const clist clistempty = { NULL, NULL ; 20

Κυκλικές λίστες (ii) " Εισαγωγή στοιχείου void clistinsert (clist * lp, int t) { ListNode * n = (ListNode *) malloc(sizeof(listnode)); if (n == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); n->data = t; 21

Κυκλικές λίστες (iii) " Εισαγωγή στοιχείου (συνέχεια) if (lp->first == NULL) { lp->first = lp->last = n; n->next = n; else { n->next = lp->first; lp->last->next = n; lp->last = n; 22

Κυκλικές λίστες (iv) " Αφαίρεση στοιχείου int clistremove (clist * lp) { int result; if (lp->first == NULL) { fprintf(stderr, "Nothing to remove" " from empty list\n"); exit(1); result = lp->first->data; 23

Κυκλικές λίστες (v) " Αφαίρεση στοιχείου (συνέχεια) if (lp->first == lp->last) { free(lp->first); lp->first = lp->last = NULL; else { lp->first = lp->first->next; free(lp->last->next); lp->last->next = lp->first; return result; 24

Κυκλικές λίστες (vi) " Εκτύπωση στοιχείων void clistprint (clist l) { ListNode * n; for (n = l.first; n!= NULL; n = n->next) { printf("%d\n", n->data); if (n->next == l.first) break; 25