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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διαδικασιακός Προγραμματισμός

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

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό (με. τη C)

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

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

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

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

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

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

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

POINTERS, AGGREGATION, COMPOSITION

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο 5. Εαρινό Εξάμηνο

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

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

Εισαγωγή στον δομημένο προγραμματισμό

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

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

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

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

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

Δείκτες και Δομές. Info. Link. typedef struct NodeTag { InfoField Info; struct NodeTag *Link; } NodeType;

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

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

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

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

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

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

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

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

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

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

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

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

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

Περιεχόμενα. Πρόλογος... 17

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

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

Περιεχόμενα. Πρόλογος... 21

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Φροντιςτήριο. Linked-List

Δομημένος Προγραμματισμός

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

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

Να εκτυπωθούν οι πρώτες Ν σειρές του τριγώνου, χρησιµοποιώντας ένα πίνακα µεγέθους Ν στοιχείων (η Ν-οστή σειρά περιέχει Ν στοιχεία).

Transcript:

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

Δομές Δεδομένων Μια δομή δεδομένων είναι μια συλλογή δεδομένων με κάποιες ιδιότητες η οποία προσφέρει εύκολη πρόσβαση σε αυτά τα δεδομένα. Έχουμε δει ως τώρα μια στατική δομή δεδομένων, τον πίνακα. Τι κάνουμε όμως στην περίπτωση που θέλουμε να αποθηκεύουμε ένα συνεχώς μεταβαλλόμενο αριθμό από δεδομένα; Χαροκόπειο Πανεπιστήμιο 2/29

Δυναμικές Δομές Δεδομένων Είναι δομές δεδομένων που μπορούν να αυξομειώνουν το μέγεθος τους, δηλαδή να αναπτύσσονται και να συρρικνώνονται στον χρόνο εκτέλεσης. Η C ως γλώσσα προγραμματισμού δεν παρέχει τέτοιες δομές. Μας παρέχει όμως τα απαραίτητα εργαλεία για να φτιάξουμε τέτοιες δομές δεδομένων. Χαροκόπειο Πανεπιστήμιο 3/29

Απαραίτητα Εργαλεία.1. structs - δομές.2. δυναμική καταχώρηση μνήμης - malloc, free.3. δείκτες - pointers.4. μετονομασία τύπων - typedef Για να φτιάξουμε δυναμικές δομές δεδομένων χρειάζεται να χρησιμοποιήσουμε τα πιο σημαντικά και συχνά πιο δυσκολονόητα κομμάτια της γλώσσας. Χαροκόπειο Πανεπιστήμιο 4/29

Διάφορες Δομές Δεδομένων Θα δούμε δύο από τις πιο σημαντικές δομές δεδομένων.1. συνδεδεμένες λίστες.2. στοίβες Ανάλογα με τις ανάγκες της εφαρμογής χρησιμοποιούμε διαφορετική δομή. Χαροκόπειο Πανεπιστήμιο 5/29

Αυτοαναφερόμενες Δομές Η C μας παρέχει την δυνατότητα να φτιάξουμε δομές (structs) οι οποίες αυτοαναφέρονται: struct node { int data ; struct node * next ; } ; Η δομή node περιέχει έναν ακέραιο και ένα δείκτη τύπου node. Χαροκόπειο Πανεπιστήμιο 6/29

Αυτοαναφερόμενες Δομές Ουσιαστικά η C μας επιτρέπει να δηλώσουμε μια μεταβλητή δείκτη σε τύπο που δεν έχει οριστεί ακόμη. Για παράδειγμα το παρακάτω πρόγραμμα είναι απόλυτα σωστό. #include < s t d i o. h> int main ( ) { struct node * ptr ; } Προσέξτε πως στο παραπάνω πρόγραμμα δεν δηλώνουμε ποτέ την δομή node. Χαροκόπειο Πανεπιστήμιο 7/29

Συνδεδεμένη Λίστα Μια γραμμική συλλογή αυτοαναφερόμενων δομών, που ονομάζονται κόμβοι, και συνδέονται από συνδέσεις δεικτών. NULL Μια συνδεδεμένη λίστα προσπελαύνεται μέσω ενός δείκτη στον πρώτο κόμβο της λίστας. Κατά σύμβαση, ο δείκτης σύνδεσης στον τελευταίο κόμβο της λίστας τίθεται σε NULL για να σηματοδοτήσει το τέλος της λίστας. Χαροκόπειο Πανεπιστήμιο 8/29

Συνδεδεμένη Λίστα Η πληροφορία σε κάθε κόμβο μπορεί να είναι οποιαδήποτε τύπου, ακόμη και struct. NULL Χαροκόπειο Πανεπιστήμιο 9/29

Συνδεδεμένη Λίστα Κόμβος typedef struct { int AM ; char student [ 5 0 ] ; } student_data ; struct node { student_data data ; struct node * next ; } ; Ένας κόμβος λίστας που περιέχει πληροφορίες για έναν φοιτητή. Χαροκόπειο Πανεπιστήμιο 10/29

Υλοποίηση Λίστας 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 #include < assert. h> 4 5 / / data type 6 typedef struct 7 { 8 int AM ; 9 } datat ; 10 11 / / node d e f i n i t i o n 12 typedef struct noder * node ; 13 14 struct noder 15 { 16 datat data ; 17 node next ; 18 } ; Χαροκόπειο Πανεπιστήμιο 11/29

Υλοποίηση Λίστας 19 20 / / l i s t d e f i n i t i o n 21 typedef struct listr * list ; 22 23 struct listr 24 { 25 node head ; 26 int size ; 27 } ; 28 29 / / create l i s t 30 list list_create ( ) 31 { 32 list l = ( list ) malloc ( sizeof ( struct listr ) ) ; 33 assert ( l ) ; 34 l >head = NULL ; 35 l >size = 0; 36 return l ; 37 } Χαροκόπειο Πανεπιστήμιο 12/29

Υλοποίηση Λίστας 38 / / create node 39 node list_newnode ( datat data ) 40 { 41 node n = ( node ) malloc ( sizeof ( struct noder ) ) ; 42 assert ( n ) ; 43 n >data = data ; 44 n >next = NULL ; 45 return n ; 46 } 47 48 / / f r e e node memory 49 void list_freenode ( node n ) 50 { 51 assert ( n ) ; 52 free ( n ) ; 53 } Χαροκόπειο Πανεπιστήμιο 13/29

Υλοποίηση Λίστας 54 / / get f i r s t l i s t node 55 node list_first ( list l ) 56 { 57 assert ( l ) ; 58 return l >head ; 59 } 60 61 / / get next l i s t node 62 node list_next ( node n ) 63 { 64 assert ( n ) ; 65 return n >next ; 66 } 67 68 / / get node data 69 datat list_data ( node n ) 70 { 71 assert ( n ) ; 72 return n >data ; 73 } Χαροκόπειο Πανεπιστήμιο 14/29

Υλοποίηση Λίστας 74 / / check i f l i s t i s empty 75 int list_empty ( list l ) 76 { 77 assert ( l ) ; 78 return l >head == NULL ; 79 } 80 81 / / get l i s t size 82 int list_size ( list l ) 83 { 84 assert ( l ) ; 85 return l >size ; 86 } Χαροκόπειο Πανεπιστήμιο 15/29

Υλοποίηση Λίστας 87 / / i n s e r t as f i r s t node i n l i s t 88 void list_insertfirst ( list l, node n ) 89 { 90 assert ( l && n ) ; 91 n >next = l >head ; 92 l >head = n ; 93 l >size++; 94 } 95 96 / / d e l e t e f i r s t node i n l i s t 97 node list_deletefirst ( list l ) 98 { 99 assert ( l && l >head ) ; 100 101 node ret = l >head ; 102 l >head = l >head >next ; 103 l >size ; 104 ret >next = NULL ; 105 return ret ; 106 } Χαροκόπειο Πανεπιστήμιο 16/29

Υλοποίηση Λίστας 107 / / i n s e r t a f t e r node i n l i s t 108 void list_insertafter ( list l, node after, node n ) 109 { 110 assert ( l && after && n ) ; 111 n >next = after >next ; 112 after >next = n ; 113 l >size++; 114 } 115 116 / / d e l e t e a node a f t e r a node 117 node list_deleteafter ( list l, node prev ) 118 { 119 assert ( l && prev && prev >next ) ; 120 node ret = prev >next ; 121 prev >next = ret >next ; 122 ret >next = NULL ; 123 return ret ; 124 } Χαροκόπειο Πανεπιστήμιο 17/29

Υλοποίηση Λίστας 125 / / destroy l i s t and f r e e memory 126 void list_destroy ( list l ) 127 { 128 while (! list_empty ( l ) ) 129 list_freenode ( list_deletefirst ( l ) ) ; 130 131 free ( l ) ; 132 } Χαροκόπειο Πανεπιστήμιο 18/29

Υλοποίηση Λίστας 133 int main ( ) 134 { 135 int am ; 136 datat data ; 137 node n ; 138 list l = list_create ( ) ; 139 140 do { 141 printf ( "Give a student AM (-1 to quit): " ) ; 142 scanf ( "%d", &am ) ; 143 144 if ( am >= 0 ) { 145 data. AM = am ; 146 list_insertfirst ( l, list_newnode ( data ) ) ; 147 } 148 } while ( am >= 0 ) ; 149 150 for ( n = list_first ( l ) ; n! = NULL ; n = list_next ( n ) ) 151 printf ( "%d ", list_data ( n ). AM ) ; 152 printf ( "\n" ) ; 153 154 list_destroy ( l ) ; 155 return 0; 156 } Χαροκόπειο Πανεπιστήμιο 19/29

Στοίβα Η στοίβα είναι μια δυναμική δομή δεδομένων όπου μπορούμε να έχουμε πρόσβαση μόνο στο τελευταίο στοιχείο που εισήχθει (την λεγόμενη κορυφή της στοίβας). Push Pop Χαροκόπειο Πανεπιστήμιο 20/29

Λειτουργίες Στοίβας Push Pop Μια στοίβα παρέχει τις λειτουργίες PUSH( S, x ) Προσθέτει ένα στοιχείο x στην στοίβα S. POP( S ) Διαγράφει το νεότερο στοιχείο που βρίσκεται στην στοίβα S. TOP( S ) Επιστρέφει το νεότερο στοιχείο που βρίσκεται στην στοίβα S. Χαροκόπειο Πανεπιστήμιο 21/29

Υλοποίηση Στοίβας Μπορούμε να υλοποιήσουμε μια στοίβα με την ίδια τεχνική που χρησιμοποιήσαμε για την λίστα. Χαροκόπειο Πανεπιστήμιο 22/29

Υλοποίηση Στοίβας 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 #include < assert. h> 4 5 / / data type 6 typedef struct 7 { 8 char c ; 9 } datat ; 10 11 / / node d e f i n i t i o n 12 typedef struct noder * node ; 13 14 struct noder 15 { 16 datat data ; 17 node next ; 18 } ; Χαροκόπειο Πανεπιστήμιο 23/29

Υλοποίηση Στοίβας 19 20 / / stack d e f i n i t i o n 21 typedef struct stackr * stack ; 22 23 struct stackr 24 { 25 node head ; 26 int size ; 27 } ; 28 29 / / create stack 30 stack stack_create ( ) 31 { 32 stack s = ( stack ) malloc ( sizeof ( struct stackr ) ) ; 33 assert ( s ) ; 34 s >head = NULL ; 35 s >size = 0; 36 return s ; 37 } Χαροκόπειο Πανεπιστήμιο 24/29

Υλοποίηση Στοίβας 38 / / check i f stack i s empty 39 int stack_empty ( stack s ) 40 { 41 assert ( s ) ; 42 return s >head == NULL ; 43 } 44 45 / / get stack size 46 int stack_size ( stack s ) 47 { 48 assert ( s ) ; 49 return s >size ; 50 } 51 52 / / get newest stack element 53 datat stack_top ( stack s ) 54 { 55 assert ( s && s >head ) ; 56 return s >head >data ; 57 } Χαροκόπειο Πανεπιστήμιο 25/29

Υλοποίηση Στοίβας 58 void stack_push ( stack s, datat data ) 59 { 60 assert ( s ) ; 61 node n = ( node ) malloc ( sizeof ( struct noder ) ) ; 62 assert ( n ) ; 63 n >data = data ; 64 n >next = s >head ; 65 s >head = n ; 66 s >size++; 67 } 68 69 void stack_pop ( stack s ) 70 { 71 assert ( s && s >head ) ; 72 73 node ret = s >head ; 74 s >head = s >head >next ; 75 s >size ; 76 77 free ( ret ) ; 78 } Χαροκόπειο Πανεπιστήμιο 26/29

Υλοποίηση Στοίβας 79 / / destroy stack and f r e e memory 80 void stack_destroy ( stack s ) 81 { 82 while (! stack_empty ( s ) ) 83 stack_pop ( s ) ; 84 85 free ( s ) ; 86 } Χαροκόπειο Πανεπιστήμιο 27/29

Υλοποίηση Στοίβας 87 int main ( ) 88 { 89 int am ; 90 datat data ; 91 node n ; 92 stack s = stack_create ( ) ; 93 94 while ( ( data. c=getchar ( ) )!= EOF ) 95 stack_push ( s, data ) ; 96 97 while (! stack_empty ( s ) ) { 98 printf ( "%c", stack_top ( s ). c ) ; 99 stack_pop ( s ) ; 100 } 101 stack_destroy ( s ) ; 102 return 0; 103 } Χαροκόπειο Πανεπιστήμιο 28/29

Άλλες Δομές Δεδομένων Στα επόμενα έτη θα συναντήσετε μια πληθώρα δομών δεδομένων όπως δέντρα γραφήματα λεξικά κ.τ.λ Κάθε δομή δεδομένων έχει τα πλεονεκτήματα και μειονεκτήματα της. Χαροκόπειο Πανεπιστήμιο 29/29