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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

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

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

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

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

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

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

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

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

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

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

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

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

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

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

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

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

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

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

Εργαστήριο 2: Πίνακες

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

Προγραμματισμός Η/Υ. Ενότητα 9: Ειδικά θέματα Δομών Δεδομένων

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

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

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

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

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

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

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

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

ΑΣΚΗΣΗ 4: ΟΜΕΣ ΒΑΣΙΚΩΝ ΒΡΟΧΩΝ

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

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

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

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

Μεθόδων Επίλυσης Προβλημάτων

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

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

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

Αναδρομικοί Αλγόριθμοι

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

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

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

Διάλεξη 22η: Επιπλέον στοιχεία της C

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

Στοιχειώδεις Δομές Δεδομένων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

POINTERS, AGGREGATION, COMPOSITION

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Transcript:

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ταξινοµηµένες Λίστες µε δυναµική δέσµευση µνήµης Αναδροµκές συναρτήσεις ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 1 Λίστες Στις δοµές δεδοµένων ουρά και στοίβα είδαµε πως η θέση των στοιχείων στη δοµή εξαρτάται από την σειρά εισδοχή τους. Για παράδειγµα, σε µια στοίβα το στοιχείο στην κορυφή είναι πάντα αυτό που εισάχθηκε τελευταία, ενώ σε µια ουρά, αυτό που εισάχθηκε πρώτο. Έτσι αν εφαρµόζαµε διαδοχικά τις εντολές: εισαγωγή του 5, εισαγωγή του 1 και εισαγωγή του θα είχαµε... ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 2 1

σε στοίβα Λίστες data next 1 top size 5 σε λίστα data next data next data next NULL 1 NULL data next data next 5 head tail length ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ Λίστες... και εφαρµόζοντας τρεις φορές τις διαδικασίες pop και dequeue στη στοίβα και την ουρά, αντίστοιχα, θα επιστρέφονταν από τη στοίβα τα στοιχεία, 1, 5 (µε αυτή τη σειρά), και από την ουρά τα στοιχεία 5, 1, (µε αυτή τη σειρά). ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 4 2

Ταξινοµηµένες Λίστες Έστω ότι µας ενδιαφέρει να διατηρούµε µια δοµή στην οποία να τοποθετούµε χρήσιµα στοιχεία (π.χ. ακέραιους) ταξινοµηµένα σε κάποια σειρά (π.χ. αύξουσα) και από την οποία να µπορούµε εύκολα να προσθέτουµε και να αφαιρούµε στοιχεία. Έτσι, για παράδειγµα αν εφαρµόζαµε διαδοχικά τις εντολές: εισαγωγή του 5, εισαγωγή του 1 και εισαγωγή του θα θέλαµε η λίστα µας να είχε τη µορφή size head data next data next data next 1 NULL 5 ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 5 Ταξινοµηµένες Λίστες Ποιες δοµές χρειάζονται για υλοποίηση της ταξινοµηµένης λίστας µας; Ένας κόµβος είναι δοµικά ίδιος µε αυτό µιας συνδεδεµένης λίστας! Ενώ ο κόµβος που ορίζει τη λίστα είναι ο ίδιος µε αυτό που ορίζει µια στοίβα: typedef struct node { typedef struct slist { int data; NODE *top; struct node *next; int size; NODE; SLIST; Οι ορισµοί λοιπόν και οι κλήσεις: SLIST list; list.top = NULL; list.size = 0; ορίζουν µία λίστα, τα στοιχεία της οποίας θα κρατούνται στη µεταβλητή list τύπου SLIST και αρχικοποιούν τα πεδία της ανάλογα. ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 6

Ταξινοµηµένες Λίστες Τώρα αποµένει να ορίσουµε τρείς διαδικασίες: insert, η οποία εισαγάγει ένα στοιχείο µέσα στη λίστα, delete, η οποία αφαιρεί κάποιο στοιχείο από τη λίστα (αν αυτό υπάρχει) και printlist, η οποιά τυπώνει όλα τα στοιχεία της λίστας. Για χρήση της λίστας θα ορίσουµε επίσης σε ένα δεύτερο αρχείο µια συνάρτηση main η οποία περιέχει ένα switch που µας επιτρέπει να καλέσουµε αυτές τις διαδικασίες ταξινοµηµένης λίστας. ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 7 Παραδείγµατα Εισαγωγή του 4 στη λίστα της διαφάνειας 5: 4 1 5 4 Εξαγωγή του από τη λίστα της διαφάνειας 5: 2 1 5 ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 8 4

Η συνάρτηση main int main(){ int x, y; SLIST list; list.top = NULL; list.size = 0; while (x!= 4){ printf("you have the following options:\n"); printf("\t 1\t: for inserting an item in the list\n"); printf("\t 2\t: for deleting an item from the list\n"); printf("\t \t: for printing the list elements\n"); printf("\t 4\t: for exiting the system\n"); scanf("%d", &x); ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 9 H συνάρτηση main switch (x){ case 1: printf("enter number to be inserted: "); scanf("%d", &y); insert(&list, y); case 2: printf("give me the number to be deleted: "); scanf("%d", &y); delete(&list, y); case : printlist(&list); case 4: printf("goodbye!\n"); default: printf("wrong entry to the system\n"); return 0; ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 10 5

Η συνάρτηση printlist void printlist(slist *l){ NODE *p; if (l->size == 0) printf("the list is empty\n"); else { p = l->top; printf("%d", p->data); while((p = p->next)!= NULL) printf(", %d", p->data); printf("\n"); ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 11 Αναδροµική συνάρτηση printlist void printlist(slist *l){ if (l->size == 0) printf("the list is empty\n"); else printnode(l->top); void printnode(node *p){ if (p!= NULL){ printf("%d", p->data); printnode(p->next); ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 12 6

Η συνάρτηση insert void insert(slist *l, int x){ ++(l->size); l->top = insertnode(l->top, x); ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 1 Η συνάρτηση insertnode NODE *insertnode(node *p, int x){ NODE *q; if (p == NULL){ q = (NODE *)malloc(sizeof(node)); q->data = x; q->next = NULL; else if ( p->data >= x ) { q = (NODE *)malloc(sizeof(node)); q->data = x; q->next = p; else { q = p; q->next = insertnode(q->next, x); return q; ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 14 7

Η συνάρτηση delete void delete(slist *l, int x){ int isdeleted; l->top = deletenode(l->top, x, &isdeleted); if (isdeleted) --(l->size); ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 15 Η συνάρτηση deletenode NODE *deletenode(node *p, int x, int *isdeleted){ NODE *q; if ( ( p == NULL) (p->data > x) ){ printf("item %d not found \n", x); q = p; *isdeleted = 0; else if ( p->data == x ){ printf("item %d has been deleted\n", x); q = p->next; free(p); *isdeleted = 1; else { q = p; q->next = deletenode(q->next, x, isdeleted); return q; ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 16 8