Δομές Δεδομένων Εισαγωγή παράγωγους τύπους δομών δεδομένων Ορισμός και συζήτηση της έννοιας μέλη ετικέτα Τρόπος δήλωσης και ορισμού

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Δομές Δεδομένων Εισαγωγή παράγωγους τύπους δομών δεδομένων Ορισμός και συζήτηση της έννοιας μέλη ετικέτα Τρόπος δήλωσης και ορισμού"

Transcript

1 Δομές Δεδομένων Εισαγωγή Στη γλώσσα C μπορούμε, εκτός από τους τύπους που ήδη υπάρχουν, int, float, double, char, να επινοήσουμε και χρησιμοποιήσουμε καινούριους, δικούς μας τύπους δεδομένων με συνδυασμό των ήδη υπαρχόντων. Αυτούς τους λέμε παράγωγους τύπους (derived types) και τους ορίζουμε με τη βοήθεια των λεγόμενων δομών δεδομένων (data structures). Οι πίνακες που έχουμε ήδη εξετάσει μπορούν να θεωρηθούν και αυτοί δομές δεδομένων, μόνο που συνδυάζουν στοιχεία του ίδιου τύπου και έτσι δε χρειάστηκε να ορίσουμε ένα νέο τύπο. Όπως θα δούμε όμως, μπορούμε να συνδυάσουμε και στοιχεία διαφορετικού τύπου σε μία ενιαία οντότητα αρκεί να καθορίσουμε με σαφή και ακριβή τρόπο τη δομή της. Εκτός από την προφανή ευελιξία που επιτρέπει η ύπαρξη ενός τέτοιου προγραμματιστικού εργαλείου, η ύπαρξη των δομών δεδομένων έχει μεγάλη σημασία επειδή αποτελεί τη γέφυρα με τον αντικειμενοστρεφή προγραμματισμό. Πράγματι, ο αντικειμενοστρεφής προγραμματισμός βασίζεται στον ορισμό αντικειμένων με συγκεκριμένες ιδιότητες που άρα είναι καλό να μπορούμε να τις ομαδοποιήσουμε σε μία ενιαία οντότητα, ασχέτως τύπου αυτών. Οι δομές δεδομένων της C είναι παρόμοιες με τις κλάσεις της C++ και της java, αν και κάπως πιο περιορισμένων δυνατοτήτων. Ορισμός και συζήτηση της έννοιας Δομή δεδομένων ονομάζουμε ένα σύνολο από μεταβλητές διαφορετικών εν γένει τύπων τις οποίες ομαδοποιούμε έτσι ώστε να αναφερόμαστε σε αυτές με ένα κοινό όνομα. Συνήθως, οι δομές δεδομένων ορίζονται έτσι ώστε οι μεταβλητές που τις αποτελούν να συνδέονται μεταξύ τους με κάποια σχέση ή να έχουν κάποια κοινά σημεία που δικαιολογούν την ομαδοποίησή τους. Έτσι, αν ένα πρόγραμμα επεξεργάζεται τα στοιχεία διαφόρων προσώπων, τότε μπορούμε να ορίσουμε μεταβλητές όπως Ονοματεπώνυμο, διεύθυνση, ηλικία, τηλέφωνο, του κατάλληλου τύπου η κάθε μία, τις οποίες μπορούμε να ομαδοποιήσουμε σε μία δομή δεδομένων. Αυτές οι μεταβλητές είναι τα μέλη της δομής αυτής. Οι μεταβλητές αυτές έχουν όνομα, τύπο και μέγεθος, όπως και κάθε μεταβλητή που έχουμε δει μέχρι τώρα. Η δομή σαν σύνολο έχει ένα όνομα που λέγεται ετικέτα (label) της δομής και με το οποίο μπορούμε να αναφερόμαστε σε αυτήν όπως ακριβώς αναφερόμαστε και σε μία απλή μεταβλητή. Τρόπος δήλωσης και ορισμού Όπως είπαμε, μία δομή δεδομένων έχει όνομα και μέλη, το καθένα από τα οποία μπορεί να είναι απλή μεταβλητή ή και πίνακας, άρα έχει όνομα, τύπο και μέγεθος. Για να χρησιμοποιήσουμε μία δομή δεδομένων και να έχουμε πρόσβαση στα μέλη της πρέπει πρώτα να ορίσουμε με ακρίβεια την κατασκευή της. Αυτό το κάνουμε με τη δήλωση της δομής που γίνεται με τον εξής τρόπο: struct ετικέτα_δομής { ορισμός πρώτου μέλους; /* με ερωτηματικό σα να είναι δήλωση μεταβλητής! */ ορισμός δεύτερου μέλους;... ορισμός νυοστού μέλους; }; /* και εδώ ερωτηματικό στο τέλος! */ Στο παράδειγμα που προαναφέρθηκε, με τα στοιχεία προσώπων, μπορούμε να ορίσουμε μία δομή της μορφής: struct person { char address [40]; int age; } ;

2 Με το παραπάνω παράδειγμα, ουσιαστικά ορίσαμε ένα νέο τύπο δεδομένων με το όνομα person, αλλά δεν έχουμε ορίσει ακόμη μία νέα μεταβλητή αυτού του τύπου, δεσμεύοντας μνήμη για αυτήν ή και αποδίδοντας αρχικές τιμές στα μέλη της. Είναι σα να λέμε ότι εκτός από τους τύπους int, float, char κλπ που ξέραμε ήδη, προστέθηκε άλλος ένας, ειδικά για το συγκεκριμένο πρόγραμμα, που λέγεται person και περιμένει να τον χρησιμοποιήσουμε! Για να το κάνουμε αυτό πρέπει να δηλώσουμε και ορίσουμε επίσης και μεταβλητές αυτού του τύπου. Υπάρχουν διάφοροι τρόποι για να το κάνουμε: 1. Κατά την ίδια τη δήλωση της δομής, π.χ. struct person { char address[40]; int age; } Maria, Costas, Eleni, Andreas; Στην παραπάνω δήλωση της δομής person έχουμε συγχρόνως και δήλωση των μεταβλητών Maria, Costas, Eleni και Andreas. Αυτές είναι τύπου struct person, όπως ακριβώς άλλες μεταβλητές που είχαμε δει μέχρι τώρα ήταν τύπου int, float, char. Στη δήλωση μιας μεταβλητής με αυτό τον τρόπο μπορούμε ακόμη και να αποδώσουμε αρχική τιμή βάζοντας τις τιμές των μελών σε άγκιστρα, όπως κάνουμε και με τους πίνακες: struct person { char address[40]; int age; } Mitsos = { Mitsos Mitsopoulos, Stadiou 40, 35, }; Να σημειωθεί ότι δεν επιτρέπεται απ' ευθείας απόδοση τιμών στο κάθε μέλος. 2. Γράφοντας struct ετικέτα σαν ένα ακόμη όνομα τύπου. Ένας άλλος τρόπος είναι να χρησιμοποιήσουμε την ετικέτα της δομής όπως χρησιμοποιούμε και τα ονόματα τύπων που ξέραμε μέχρι τώρα, μόνο που τώρα πρέπει να βάλουμε μπροστά και τη λέξη κλειδί struct, π.χ πρώτα δηλώνουμε τη δομή person, struct person { char address [40]; int age; } ; και σε επόμενες γραμμές του προγράμματος ορίζουμε μεταβλητές τύπου person ως εξής: struct person Maria, Costas, Eleni, Andreas; Και πάλι, μπορούμε να αποδώσουμε αρχικές τιμές κατά τη δήλωση των μεταβλητών: struct person Mitsos = { Mitsos Mitsopoulos, Stadiou 40, 35, }; Προφανώς ο δεύτερος τρόπος για δήλωση μεταβλητών και απόδοση αρχικών τιμών είναι πιο ευέλικτος γιατί αρκεί να δηλώσουμε μια φορά τη δομή και μετά χρησιμοποιούμε μόνο την ετικέτα της.

3 3. Χρήση typedef. Υπάρχει και τρίτος τρόπος που συντομεύει ακόμη πιο πολύ την αναφορά σε μια δομή παραλείποντας τη λέξη struct. Αυτό μπορεί να γίνει δίνοντας ένα ψευδώνυμο στη δομή πράγμα που κάνουμε με τη βοήθεια της δεσμευμένης λέξης typedef. Συγκεκριμένα, μπορούμε να γράψουμε το εξής: typedef struct person someone; το οποίο σημαίνει ότι η λέξη someone αναφέρεται σε δομές δεδομένων τύπου person και μπορούμε κάλλιστα να γράψουμε someone Maria, Costas, Eleni, Andreas; και someone Mitsos = { Mitsos Mitsopoulos, Stadiou 40, 35, }; Αξίζει να σημειωθεί ότι την typedef μπορούμε να χρησιμοποιήσουμε ακόμη και για τους υπάρχοντες τύπους, π.χ. να γράψουμε typedef float real; και στο εξής μέσα στο πρόγραμμά μας θα μπορούμε να δηλώνουμε πραγματικές μεταβλητές απλής ακρίβειας με τη λέξη real αντί για τη float. Δηλαδή, γενικά μπορούμε να αποδώσουμε ένα νέο όνομα σε έναν ήδη υπάρχοντα τύπο με τον εξής τρόπο: typedef τύπος νέο_όνομα; Η δήλωση typedef δεν δημιουργεί νέο τύπο αλλά μόνο ένα νέο όνομα για έναν ήδη υπάρχοντα τύπο. Είναι πολύ χρήσιμη όχι μόνο γιατί επιτρέπει να χρησιμοποιούμε ευνόητα μνημονικά ονόματα για τις δομές, αλλά και επιτρέπει πιο εύκολη συντήρηση ενός προγράμματος. Π.χ. αν υπάρχει ενδεχόμενο να πρέπει αλλάζουμε από float σε double όταν μεταφέρουμε το πρόγραμμα σε άλλη πλατφόρμα μπορούμε να ορίσουμε typdef float real; σε ένα αρχείο επικεφαλίδας και να αλλάξουμε μόνο αυτό σε double στη νέα πλατφόρμα. Όσον αφορά τον πρώτο τρόπο δήλωσης και απόδοσης αρχικών τιμών, μπορεί κανείς να τον χρησιμοποιήσει και χωρίς ετικέτα δηλαδή να γράψει struct { char address[40]; int age; } Mitsos = { Mitsos Mitsopoulos, Stadiou 40, 35, }; αλλά τότε δε θα μπορεί να ξαναχρησιμοποιήσει τη δομή αφού δεν έχει τρόπο αναφοράς σε αυτή. Άρα, δεν είναι ιδιαίτερα χρήσιμη πρακτική. Συχνά, είναι πρακτικό οι δομές να δηλώνονται εξωτερικά σε σχέση με τις συναρτήσεις και γι' αυτό είναι καλό να δημιουργούμε ένα αρχείο επικεφαλίδας όπου συγκεντρώνουμε τις δηλώσεις των δομών δεδομένων και τους ορισμούς τύπων με την typedef και να περιλαμβάνουμε αυτό το αρχείο όπου χρειαστεί. Έτσι, μπορούμε να δηλώσουμε μια φορά κάποιες χρήσιμες δομές στο πρόγραμμά μας, που να μπορούν να χρησιμοποιηθούν σε όσες συναρτήσεις θέλουμε. Κλείνοντας σημειώνουμε ότι ένα μέλος μπορεί να έχει ίδιο όνομα με μια κανονική μεταβλητή (δηλαδή όχι μέλος) ή ακόμη και με το μέλος μιας άλλης δομής αφού τα ονόματα διακρίνονται μέσω του πλαισίου αναφοράς (context), αλλά για λόγους καλού στυλ το αποφεύγουμε αν δεν υπάρχει στενή σχέση ανάμεσα στα αναπαριστώμενα αντικείμενα.

4 Στις δομές επιτρέπεται να γίνουν οι εξής πράξεις: απόδοση τιμής στα μέλη τους, αντιγραφή σαν σύνολο, λήψη διεύθυνσης και προσπέλαση ενός μέλους. Αυτά παρουσιάζονται στη συνέχεια. Επεξεργασία αντιτύπων των δομών Αφού δηλώσαμε μία δομή και ορίσαμε διάφορα αντίτυπα αυτής (δηλαδή μεταβλητές αυτού του τύπου) θέλουμε να επεξεργαστούμε και πρώτα απ' όλα να αποδίδουμε διάφορες τιμές στα μέλη των μεταβλητών αυτών. Την αναφορά στα μέλη την επιτυγχάνουμε με τους τελεστές μέλους, και συγκεκριμένα με τον τελεστή τελείας και με τον τελεστή βέλους, αναλόγως αν χρησιμοποιούμε την ίδια τη μεταβλητή-αντίτυπο δομής ή ένα δείκτη που αναφέρεται σε αυτή. Αν αναφερόμαστε στην ίδια τη μεταβλητή μπορούμε να γράψουμε: όνομα_αντίτυπου.όνομα_μέλους Έτσι για το αντίτυπο Mitsos της δομής person, μπορούμε να αναφερθούμε στην ηλικία γράφοντας Mitsos.age και μάλιστα μπορούμε να αποδώσουμε τιμή γράφοντας Mitsos.age = 35; όπως θα κάναμε και με απλές μεταβλητές που γνωρίσαμε ως εδώ. Αλλά όπως και με τους άλλους τύπους μεταβλητών έτσι και με τις δομές δεδομένων μπορούμε να ορίσουμε δείκτες σε αυτές. Π.χ. γράφοντας struct person *mitsakos; ορίσαμε ένα δείκτη με το όνομα mitsakos που δείχνει σε μία μεταβλητή τύπου person ή, με άλλα λόγια, ένα αντίτυπο της δομής δεδομένων τύπου person. Μπορούμε κάλλιστα να πούμε mitsakos = &Mitsos; δηλαδή να αποδώσουμε τη διεύθυνση της μεταβλητής Mitsos στο δείκτη mitsakos. Μετά μπορούμε να αναφερθούμε στα μέλη του, π.χ. στην ηλικία με τον τελεστή τελείας ως εξής: (*mitsakos).age = 35; Χρησιμοποιήσαμε παρενθέσεις επειδή ο τελεστής τελείας έχει πιο υψηλή προτεραιότητα από τον τελεστή περιεχομένου. Οι τελεστές μέλους μαζί με τις παρενθέσεις των συναρτήσεων και τις αγκύλες των πινάκων έχουν την πιο υψηλή προτεραιότητα από όλους τους τελεστές. Π.χ. ++p.x αυξάνει το x και όχι το p! Αν θέλουμε να αλλάξουμε προτεραιότητα χρησιμοποιούμε παρενθέσεις. Οι δείκτες σε δομές χρησιμοποιούνται πολύ συχνά και έτσι επινοήθηκε και ένας ειδικός τελεστής μέλους για αυτή την περίπτωση, ώστε να απαλλαγούμε από τις παρενθέσεις. Αυτός είναι ο τελεστής βέλους και, στο συγκεκριμένο παράδειγμα, χρησιμοποιείται ως εξής: mitsakos->age = 35; Το σύμβολο του τελεστή βέλους είναι ένα πλην ακολουθούμενο από ένα σύμβολο ανισότητας μεγαλύτερο από. Οι δομές, εκτός από αρχικές τιμές με τους τρόπους που είδαμε, μπορούν να πάρουν διάφορες τιμές κατά την εκτέλεση του προγράμματος με τους εξής τρόπους: αποδίδοντας τιμή σε κάποιο από τα μέλη τους με τη βοήθεια των τελεστών μελών, όπως είδαμε στα τελευταία παραδείγματα.

5 αντιγράφοντας μια δομή σε μια άλλη. Είναι επιτρεπτό να χρησιμοποιήσουμε τον τελεστή αντικατάστασης = όπως κάνουμε και με τις απλές μεταβλητές. Έτσι, μπορούμε να γράψουμε struct person Kitsos; και πιο κάτω να γράψουμε: Kitsos = Mitsos; οπότε όλα τα μέλη θα αντιγραφούν ένα-ένα από το δεξί στο αριστερό μέλος σα να είχαμε γράψει Kitsos.name = Mitsos.name; Kitsos.address = Mitsos.address; Kitsos.age = Mitsos.age; Kitsos.phone = Mitsos.phone; Μέσω συναρτήσεων. Αυτό σημαίνει ότι μπορούμε να ορίσουμε συναρτήσεις που επιιστρέφουν δομές, συναρτήσεις που επιστρέφουν δείκτες σε δομές, συναρτήσεις με παραμέτρους μέλη δομών, ολόκληρες δομές ή δείκτες σε δομές και οποιονδήποτε συνδυασμό των παραπάνω. Ειδικά για το θέμα των παραμέτρων πρέπει να πούμε ότι αντίθετα από τους πίνακες, οι δομές περνάνε μέσω τιμής και όχι μέσω διεύθυνσης. Αν θέλουμε να περάσουμε ένα αντίτυπο δομής μέσω διεύθυνσης πρέπει να το δηλώσουμε αναλόγως στη δήλωση και τον ορισμό της συνάρτησης, όπως κάνουμε και με τις απλές μεταβλητές. Αν μια μεγάλη δομή πρόκειται να περαστεί σε μια συνάρτηση είναι πιο αποτελεσματικό να περαστεί με δείκτη γιατί το πέρασμα μέσω τιμής απαιτεί την αντιγραφή ολόκληρης της δομής. Αν η συνάρτηση καλείται συχνά αυτό θα έχει επιπτώσεις στην ταχύτητα εκτέλεσης. Τα μέλη των δομών χρησιμοποιούνται όπως και τα ονόματα των απλών μεταβλητών. Έτσι, αν σε μια συνάρτηση περνάει ο δείκτης mitsakos και μέσα σε αυτή τη συνάρτηση καλείται η scanf για να διαβάσει τα μέλη του, τότε θα γράψουμε scanf( %s, mitsakos->name); scanf( %s, mitsakos->address); scanf( %d, &mitsakos->age); scanf( %s, mitsakos->phone); Στις παραπάνω εντολές, προσέξτε πού μπαίνει και πού δεν μπαίνει ο τελεστής διεύθυνσης (&)! Η συνάρτηση scanf παίρνει διευθύνσεις μεταβλητών, γι' αυτό μπροστά από το όρισμα μπαίνει ο τελεστής διεύθυνσης &. Οι μεταβλητές mitsakos->name, mitsakos->address και mitsakos->phone είναι πίνακες χαρακτήρων και έτσι είναι συνώνυμα της διεύθυνσης του πρώτου στοιχείου τους. Γι' αυτό δεν γράψαμε το & στις παραπάνω εντολές. Η μεταβλητή mitsakos->age είναι ακέραια και θέλει το & όπως θα το ήθελε κάθε άλλη ακέραια μεταβλητή. Δε χρειάζονται παρενθέσεις επειδή ο τελεστής βέλους, ->, έχει μεγαλύτερη προτεραιότητα από το & οπότε είναι το ίδιο σα να γράφαμε &(mitsakos->age). Περαιτέρω χρήση των δομών Οι δομές μπορούν να χρησιμοποιηθούν ως εξής: Για να ορίσουμε αντίτυπά τους που λειτουργούν ακριβώς όπως οι απλές μεταβλητές, δηλαδή να τους αποδίδουμε τιμές, να τα αντιγράφουμε, να τα περνάμε ως παραμέτρους σε συναρτήσεις ή να ορίζουμε δείκτες που να αποθηκεύουν τις διευθύνσεις τους. Ως τύποι συναρτήσεων, δηλαδή να ορίσουμε συναρτήσεις που επιστρέφουν αντίτυπα δομών

6 ή δείκτες σε αυτά. Για τον ορισμό πινάκων δομών. Μπορούμε να ορίσουμε πίνακες των οποίων τα στοιχεία είναι αντίτυπα δομών ή δεικτών σε αυτά. Π.χ. μπορούμε να ορίσουμε έναν πίνακα struct person myfriends[] = {Costas, Maria, Eleni, Andreas, Mitsos}; Σε αυτό το παράδειγμα myfriends[0].name υποδηλώνει το μέλος name του πρώτου στοιχείου του πίνακα myfriends, ενώ αν γράφαμε myfriends.name[0] θα σήμαινε ένα αντίτυπο δομής που θα λεγόταν myfriends και θα είχε ως μέλος έναν πίνακα name από τον οποίο και ανακτούμε το πρώτο στοιχείο. Για τον ορισμό μελών άλλων δομών ορίζοντας ένθετες δομές (nested structures). Για παράδειγμα μπορώ να ορίσω μια δομή για ημερομηνίες με μέλη μέρα, μήνα και έτος struct date { int day; int month; int year; }; και μετά να ορίσω μια βελτιωμένη έκδοση της δομής person ως εξής: struct person { char address [40]; struct date birthday; }; Τότε μπορώ να αναφερθώ στο έτος γέννησης ενός αντίτυπου της δομής ως εξής: Mitsos.birthday.year Το μέλος μιας δομής μπορεί να είναι και δείκτης σε μια άλλη δομή. Για τον ορισμό αυτοαναφορικών δομών. Δηλαδή, μπορούμε να ορίσουμε μία δομή που περιλαμβάνει ένα ή περισσότερα μέλη-δείκτες του ιδίου τύπου με τον εαυτό της. Ένα αντίτυπο μιας δομής δε μπορεί να περιέχει ένα άλλο αντίτυπο της ίδιας, αλλά δεν υπάρχει κανένα πρόβλημα αν απλώς δείχνει σε ένα άλλο αντίτυπο. Αυτό επιτρέπει ένα πλήθος από ενδιαφέρουσες κατασκευές ώστε αξίζει να εξεταστούν ιδιαίτερα. Αυτοαναφορικές δομές Οι αυτοαναφερόμενες ή αυτοαναφορικές δομές, δηλαδή οι δομές που δείχνουν στον εαυτό τους λέγονται και δυναμικές δομές επειδή η μνήμη που καταλαμβάνουν τα αντίτυπά τους δεν είναι στατικά ορισμένη αλλά μπορεί να μεταβάλλεται δυναμικά στη διάρκεια εκτέλεσης του προγράμματος, δηλαδή υφίσταται δυναμική κατανομή (dynamic allocation) ανάλογα με τις ανάγκες της στιγμής. Οι εφαρμογές των αυτοαναφορικών δομών είναι ενδιαφέρουσες επειδή δείχνουν τη χρησιμότητα των δεικτών και των δομών δεδομένων μέσα από τη συνδυασμένη χρήση τους. Παράδειγμα αυτοαναφορικής δομής [Σεφερίδης 1995] struct element { int value; struct element *link; };

7 Στην παραπάνω δομή διακρίνουμε το ωφέλιμο φορτίο (payload) που εν προκειμένω είναι το μέλος value και το δείκτη (εδώ, το μέλος link) που χρησιμεύει στη διασύνδεση με ένα άλλο αντίτυπο της δομής. Ο δείκτης αυτός μπορεί να μη δείχνει πουθενά αλλά να είναι ίσος με μηδέν, οπότε λέμε ότι έχει την τιμή NULL που είναι μια συμβολική σταθερά ορισμένη ίση με 0 στο stdio.h (το μηδέν δε θεωρείται έγκυρη διεύθυνση δεδομένων και γι' αυτό χρησιμοποιείται όταν δε θέλουμε ένας δείκτης να δείχνει κάπου συγκεκριμένα). Με την αυτοαναφορά μπορούμε να συνδέσουμε πολλά αντίτυπα της ίδιας δομής το ένα με το άλλο κάνοντας πολύπλοκες κατασκευές που μας παρέχουν μεγάλη ευελιξία στο χειρισμό μαζικών δεδομένων. Η τιμή NULL χρησιμεύει ιδιαίτερα στο να δείχνει το τέλος μιας αυτοαναφερόμενης δομής, δηλαδή ότι δεν υπάρχει άλλο στοιχείο. Η πιο απλή περίπτωση κατασκευών αυτού του είδους είναι αυτή της γραμμικής συνδεδεμένης λίστας (linear linked list). Βάσει του παραπάνω παραδείγματος μπορούμε να ορίσουμε [Σεφερίδης 1995] struct element one, two, three; και μετά one.link = &two; two.link = &three; three.link = NULL; φτιάχνοντας μία αλυσίδα από στοιχεία που καθένα συνδέεται με ένα άλλο, έτσι ώστε προκύπτει μια διάταξη με αρχή ή κεφαλή (head) και τέλος ή ουρά (tail). Η λίστα του παραδείγματος απεικονίζεται στο παρακάτω σχήμα. Παρατηρείστε ότι κατά τη γραφική απεικόνιση τέτοιων δομών, συνηθίζεται για τους δείκτες με τιμή NULL να χρησιμοποιείται το σύμβολο της γείωσης. value link Μία λίστα μπορούμε να τη χειριστούμε ως εξής: δημιουργία της λίστας εισαγωγή στοιχείων διαγραφή στοιχείων εμφάνιση στοιχείων απαρίθμηση στοιχείων συγχώνευση στοιχείων από δύο λίστες. Πριν μιλήσουμε αναλυτικά για αυτά, μία παρένθεση για τη δυναμική διαχείριση μνήμης. Έχουμε αναφέρει και στο κεφάλαιο για τους πίνακες τις συναρτήσεις malloc και free και τον τελεστή sizeof. Ο τελεστής sizeof μπορεί να πάρει ως όρισμα είτε έναν τύπο (π.χ. int, float) ή ακόμη και μία μεταβλητή, ένα στοιχείο πίνακα κλπ και μας επιτρέπει το μέγεθος της μνήμης που του αντιστοιχεί σε bytes. Η συνάρτηση malloc μπορεί να δεσμεύσει μία περιοχή μνήμης με το μέγεθος που θα της πούμε και να επιστρέψει ένα δείκτη που να δείχνει στην αρχή αυτής της περιοχής. Η συνάρτηση free παίρνει σαν όρισμα το δείκτη μιας δεσμευμένης περιοχής μνήμης και την αποδεσμεύει. Δημιουργία Για να κατασκευάσουμε μία γ. σ. λ. ορίζουμε την κεφαλή και την ουρά της. Με τη συνάρτηση malloc και τον τελεστή sizeof δεσμεύουμε μνήμη για την κεφαλή και την ουρά και βάζουμε την κεφαλή να δείχνει στην ουρά και την ουρά στο NULL. Π.χ. struct element *header;

8 header = malloc( sizeof( element ) ); header->link = malloc( sizeof( element ) ); header->link->link = NULL; Εισαγωγή στοιχείων Για να εισάγουμε ένα στοιχείο σε μία λίστα το παρεμβάλλουμε ανάμεσα στην κεφαλή και το αμέσως επόμενο, ακολουθώντας τα εξής βήματα: α) δεσμεύουμε μνήμη για ένα ακόμη αντίτυπο της δομής, έστω Χ β) το βάζουμε να δείχνει εκεί όπου δείχνει και η κεφαλή γ) βάζουμε την κεφαλή να δείχνει στο Χ, π.χ. struct element *new_element new_element = malloc( sizeof( element ) ); new_element->link = header->link; header->link = new_element; Διαγραφή στοιχείων Για να διαγράψουμε ένα στοιχείο Χ από μία λίστα γνωρίζοντας το προηγούμενο αυτού, ακολουθούμε τα εξής βήματα: α) βάζουμε το προηγούμενο να δείχνει εκεί όπου δείχνει το Χ(δηλαδή το παρακάμπτουμε) β) με τη συνάρτηση free αποδεσμεύουμε τη μνήμη που κατείχε το Χ, π.χ. if(current->link!= NULL) { previous->link = current->link; free(current); } Εμφάνιση και απαρίθμηση στοιχείων Ξεκινώντας από ένα στοιχείο της λίστας ελέγχουμε αν δείχνει στο 0 και όσο δεν ισχύει αυτό μπορούμε να εμφανίζουμε και απαριθμούμε τα μέλη του, π.χ. kount = 0; while(current->link!= NULL) { printf( \nvalue number %d = %d, kount++, current->value); current = current->link; } Συγχώνευση στοιχείων από δύο λίστες Η πιο απλή περίπτωση είναι να κάνουμε το τελευταίο στοιχείο πριν την ουρά της μίας να δείχνει στο πρώτο στοιχείο μετά την κεφαλή της άλλης και να απελευθερώσουμε το χώρο από την ουρά και την κεφαλή που περίσσεψαν, π.χ. while(current->link->link!= NULL) ; struct *element tail1 = current->link; current->link = head2->link; free(tail1); free(head2); Αυτό είναι ένα άλλο ένα είδος παράκαμψης όπως εκείνο στην περίπτωση διαγραφής στοιχείου από λίστα.

9 Αυτή η κατασκευή μπορεί, όπως και οι πίνακες, να αποθηκεύσει πολλά στοιχεία αλλά πλεονεκτεί σε όρους ταχύτητας, ευελιξίας και οικονομίας μνήμης. Η διαδικασία για την ένθεση ή διαγραφή στοιχείων απαιτεί την εναλλαγή δεικτών και διαρκεί τον ίδιο (μικρό) χρόνο ανεξάρτητα από το μέγεθος της λίστας. Έτσι, το μέγεθος της λίστας μπορεί να αυξομειωθεί ανάλογα με τις ανάγκες του χρόνου εκτέλεσης, ενώ δε χρειάζεται αποθήκευση των δεδομένων σε συνεχόμενες θέσεις της μνήμης όπως γίνεται με τους πίνακες και άρα δε χρειάζεται να σπαταληθεί υπολογιστικός χρόνος σε αντιγραφή στοιχείων ενώ η καταναλισκόμενη μνήμη περιορίζεται κάθε φορά στην απολύτως αναγκαία. Μειονέκτημα της γραμμικής λίστας είναι ότι για να εμφανίσουμε ή χειριστούμε ένα στοιχείο που βρίσκεται οπουδήποτε μέσα στη λίστα, πρέπει να τη διατρέξουμε και να αναγνωρίσουμε αυτοό το στοιχείο, π.χ. από την τιμή ενός μέλους του που είναι το κλειδί αναζήτησης, ενώ στους πίνακες μπορούμε να ανακτήσουμε απευθείας κάθε στοιχείο τους με τη βοήθεια του αριθμοδείκτη τους. Γι' αυτό επιδιώκουμε να χρησιμοποιούμε συνδυασμούς πινάκων και δυναμικών δομών που συνδυάζουν, ανάλογα και με τη φύση του προβλήματος, τα πλεονεκτήματα και των δύο τρόπων αποθήκευσης δεδομένων. Το παραπάνω είδος λίστας υλοποιεί μία στοίβα που υπακούει στην αρχή LIFO γιατί αν θέλουμε να προσπελάσουμε τα στοιχεία της το πρώτο στο οποίο έχουμε πρόσβαση είναι αυτό που βρίσκεται στην κορυφή (head->link) δηλαδή αυτό που μπήκε τελευταίο. Άλλες κατασκευές παρόμοιου είδους είναι οι ουρές (αρχή FIFO), οι διπλές λίστες και τα δέντρα. Ενώσεις και απαριθμητές Εκτός από δομές δεδομένων μπορούμε να ορίσουμε και άλλες δύο κατηγορίες τύπων. Ο τρόπος δήλωσης που εφαρμόσαμε για τις δομές χρησιμοποιείται με παρόμοιο τρόπο και για τη δήλωση μιας οντότητας που λέγεται ένωση δεδομένων: union ετικέτα { τύπος όνομα_μέλους; τύπος όνομα_μέλους;... } Η ένωση δεν πρέπει να συγχέεται με τη δομή γιατί περιέχει ένα μόνο δεδομένο κάθε φορά που χρησιμοποιείται, μόνο που αυτό μπορεί να έχει διαφορετικό τύπο κάθε φορά, ανάλογα με τους τύπους που έχουμε προσδιορίσει στις δηλώσεις των μελών του. Π.χ. union example { int i; float f; double d; char c; }; union example var; var.i = 1; var.f = 1.1; var.d = 3.141; var.c = 'a'; Μία μεταβλητή τύπου που έχει οριστεί μέσω ένωσης καταλαμβάνει μία διεύθυνση μνήμης και χώρο τόσο όσος απαιτείται για να αποθηκεύσει το μεγαλύτερο από τους τύπους των μελών της. Έτσι, η ίδια διεύθυνση μνήμης επιτρέπεται να έχει πολλαπλή ερμηνεία, κάτι χρήσιμο για συσκευές με περιορισμένη μνήμη. Μπορούν να οριστούν ένθετες ενώσεις, δείκτες σε ενώσεις και να μεταβιβαστούν δείκτες ενώσεων σε συναρτήσεις. Οι ενώσεις μπορούν να εμφανίζονται μέσα σε δομές και πίνακες και το αντίστροφο.

10 Όπως και με τις δομές, μπορούμε να αποδώσουμε τιμή, να αντιγράψουμε σε άλλη ένωση, να πάρουμε τη διεύθυνση και να προσπελάσουμε ένα μέλος. Αρχική τιμή μιας ένωσης μπορεί να είναι μόνο του τύπου που είναι και το πρώτο κατά σειρά μέλος της. Προσοχή χρειάζεται στο εξής: ο τύπος που ανακτάται πρέπει να είναι ο τελευταίος που αποθηκεύτηκε. Είναι ευθύνη του προγραμματιστή να παρακολουθεί ποιος τύπος είναι αποθηκευμένος σε μία ένωση σε κάθε στάδιο του προγράμματος. Οι τύποι απαρίθμησης ορίζονται αντιστοιχώντας ένα διακριτό σύνολο σταθερών με συμβολικά ονόματα σε μεταβλητές που παίρνουν τιμές μέσα από το σύνολο αυτό. Ορισμός: enum ετικέτα {μέλος1, μέλος2,... μέλοςν }; Τα μέλη είναι οι απαριθμητές και η ετικέτα υποδηλώνει συλλογικά τον τύπο δεδομένων που απαρτίζουν οι απαριθμητές. Κάθε απαριθμητής αντιστοιχεί σε μία ακέραια τιμή από το 0 μέχρι το Ν-1 που αποτελεί την εσωτερική αναπαράσταση των απαριθμητών ενώ τα ονόματά τους είναι συμβολικά για τη διευκόλυνση του προγραμματιστή. Π.χ. enum days {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; enum days today, tomorrow; today = Sunday; tomorrow = today+1; Μπορούν να αποδοθούν και διαφορετικές ακέραιες τιμές από αυτές που αποδίδονται αυτόματα, π.χ. enum days {Sunday=1, Monday=2, Tuesday=3, Wednesday=4, Thursday=5, Friday=6, Saturday=7}; Μια ματιά στον αντικειμενοστρεφή προγραμματισμό: κλάσεις Μια έννοια εντελώς ανάλογη με τις δομές δεδομένων στη C είναι αυτή της κλάσης (class) που χρησιμοποιείται στη C++. Μια κλάση μπορεί να περιέχει δηλώσεις μεταβλητών και πρότυπα συναρτήσεων που χειρίζονται αυτές τις μεταβλητές και λέγονται μέθοδοι. Επιπλέον, τα μέλη μιας κλάσης χωρίζονται σε ιδιωτικά (private), δημόσια (public) και προστατευμένα (protected). Τα ιδιωτικά μέλη είναι ορατά μόνο από τα άλλα μέλη της κλάσης όπου ανήκουν. Τα δημόσια είναι προσπελάσιμα από οπουδήποτε εντός και εκτός κλάσης. Τα προστατευμένα είναι ορατά από τα μέλη της κλάσης τους και όλων των κλάσεων που παράγονται από αυτή. Μία κλάση μπορεί να παράγεται από άλλη είτε με σύνθεση (να έχει ως μέλος την άλλη κλάση) είτε με κληρονομικότητα (να έχει όλα τα μέλη μιας γενικότερης και πιο αφηρημένης κλάσης, καθώς και άλλα καινούρια που την καθιστούν πιο συγκεκριμένη). Παράδειγμα δήλωσης κλάσης [Loudon 2003]: class Account { public: Account (double b); /* κατασκευαστής για τη δέσμευση απαραίτητης μνήμης */ void deposit(double amt); void withdraw(double amt); void getbalance( ) const; private: double balance; };

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Εγγραφές Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η Ανάγκη Ομαδοποίησης Πολλές φορές έχουμε πληροφορίες διαφορετικού τύπου οι οποίες όμως έχουν μεγάλη

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure

Διαβάστε περισσότερα

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων (union) τι και γιατί Συσκευές με μικρή μνήμη => ανάγκη εξοικονόμησης πόρων Παρατήρηση: αχρησιμοποίητη μνήμη. Έστω

Διαβάστε περισσότερα

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

Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων (Data Structures) Καινούργιοι τύποι δεδομένων που αποτελούνται από την ομαδοποίηση υπαρχόντων τύπων δεδομένων Ομαδοποίηση πληροφορίας που

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 13 η Δομές & Ενώσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 5: Απαριθμητές (enums) Δομές (structures)και Ενώσεις (unions) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Απαριθμητές - Δομές, φωλιασμένες δομές, τρόποι δήλωσης

Διαβάστε περισσότερα

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

Δομές δεδομένων (2) Αλγόριθμοι Δομές δεδομένων (2) Αλγόριθμοι Παράγωγοι τύποι (struct) σύνοψη προηγουμένων Πίνακες: πολλές μεταβλητές ίδιου τύπου Παράγωγοι τύποι ή Δομές (struct): ομαδοποίηση μεταβλητών διαφορετικού τύπου struct Student

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δομές Δεδομένων και Κυρίως Πρόγραμμα Δομές δεδομένων εκτός από πίνακες: Structs Unions Enums Κυρίως πρόγραμμα Παράμετροι που

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( ) Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Δεύτερη Διάλεξη Βασικά στοιχεία της γλώσσας προγραμματισμού C Μία γλώσσα προγραμματισμού όπως και μια ανθρώπινη γλώσσα μπορεί να μελετηθεί ως προς το αλφάβητό της,

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Διαβάστε περισσότερα

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές

Διαβάστε περισσότερα

οµές (structures) και Eνώσεις (unions)

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

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Δομές & Ενώσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι 1 Δομές (Structures) Δομή (structure) στη C είναι μία συλλογή από μεταβλητές οποιουδήποτε

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Κεφάλαιο 9.1-9.2 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Ένα string είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης κτλ. Π.χ. Hello How are you? 121212 *Apple#123*%

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 5: Δείκτες και Δυναμική Δέσμευση- Αποδέσμευση Μνήμης στη C/ Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με δείκτες /Ένα πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6.1 Η Έννοια του Πίνακα Συχνά είναι προτιμότερο να αντιμετωπίζουμε ένα σύνολο μεταβλητών σαν ενότητα για να απλοποιούμε το χειρισμό τους. Έτσι οργανώνουμε σύνθετα δεδομένα σε

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 7: Διαχείριση Μνήμης,Δυναμικές Δομές Δεδομένων, Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Δυναμικές Δομές Δεδομένων Γενικά - Δυναμική Δέσμευση/Αποδέσμευση

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 14 Δυναμική διαχείριση μνήμης Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Στατική δέσμευση μνήμης Με τη δήλωση απλών μεταβλητών

Διαβάστε περισσότερα

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΚΕΦΑΛΑΙΑ 3 και 9 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΕΣ Δεδομένα αφαιρετική αναπαράσταση της πραγματικότητας και συνεπώς μία απλοποιημένη όψη της δηλαδή.

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

Διαβάστε περισσότερα

5ο σετ σημειώσεων - Δείκτες

5ο σετ σημειώσεων - Δείκτες 5ο σετ σημειώσεων - Δείκτες 11 Ιουνίου 01 1 Γενικά Σύμφωνα με το γενικό μοντέλο υπολογιστή, ένας υπολογιστής είναι μία μηχανή που διαθέτει μία κεντρική μονάδα επεξεργασίας η οποία μπορεί μεταξύ άλλων να

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

Διαβάστε περισσότερα

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Εισαγωγικές Έννοιες σε Strings - Πίνακες από Strings - Συναρτήσεις

Διαβάστε περισσότερα

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C# Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct

Διαβάστε περισσότερα

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

Στοίβες με Δυναμική Δέσμευση Μνήμης ΕΠΛ 231 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ 10/02/10 Παύλος Αντωνίου Στοίβες με Δυναμική Δέσμευση Μνήμης Στοίβα: Στοίβα είναι μια λίστα που έχει ένα επιπλέον περιορισμό. Ο περιορισμός είναι ότι οι εισαγωγές

Διαβάστε περισσότερα

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι δείκτες στη C Η έννοια του δείκτη Την έννοια του δείκτη τη συναντήσαμε σε προηγούμενα μαθήματα. Η συνάρτηση scanf(), καταχωρίζει τιμές σε μεταβλητές χρησιμοποιώντας τον τελεστή

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Αντικειμενοστραφής Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός Κλάσεις Αντικειμενοστραφής Προγραμματισμός Κλάσεις-Αντικείμενα Ένα παράδειγμα Συναρτήσεις κατασκευής (Constructors) Συνάρτηση καταστροφής (Destructor) Συναρτήσεις πρόσβασης (Access Functions) Συνάρτηση

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Pascal. 15 Νοεμβρίου 2011

Pascal. 15 Νοεμβρίου 2011 Pascal 15 Νοεμβρίου 011 1 Procedures σε Pascal Στην Pascal μπορούμε να ορίσουμε διαδικασίες (procedures). Αυτές είναι ομάδες εντολών οι οποίες έχουν ένα όνομα. Γράφοντας το όνομα μιας διαδικασίας μπορούμε

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 11: Δομές Δεδομένων και Αλγόριθμοι Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται

Διαβάστε περισσότερα

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 4η σειρά ασκήσεων. Κοζάνη, 1 Νοεμβρίου 2007. Πρόγραμμα p4-1 (μεταγλώττιση και εκτέλεση) Πολύ απλό το πρώτο, για προθέρμανση! Πριν πατήσετε enter

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

Διαβάστε περισσότερα

Κλάσεις και αντικείμενα #include <iostream.h<

Κλάσεις και αντικείμενα #include <iostream.h< Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 2:Αλφαριθμητικές Σειρές Χαρακτήρων (Strings)- Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγικές Έννοιες σε Strings(Αρχικοποίηση, Ανάγνωση & Εκτύπωση) Πίνακες από Strings

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 8 η Δείκτες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

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

Περιεχόμενα. Πρόλογος... 21 Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 12 Δομές (Structures) Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Αφαιρετικότητα Με τις συναρτήσεις επιτυγχάνουμε αφαιρετικότητα

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής

Διαβάστε περισσότερα

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

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες Δομές δεδομένων Πίνακες Οι πίνακες είναι το πιο απλό «μέσο» αποθήκευσης ομοειδούς πληροφορίας. Χρησιμοποιούν ακριβώς όση μνήμη χρειάζεται για την αποθήκευση της πληροφορίας Επιτρέπουν την προσπέλαση άμεσα

Διαβάστε περισσότερα

Ενδεικτική περιγραφή μαθήματος

Ενδεικτική περιγραφή μαθήματος ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Προγραμματισμός Η/Υ Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή: Εισαγωγή στον προγραμματισμό, γλώσσες προγραμματισμού, μεταγλωτιστές.

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ. Ενότητα 9: Ειδικά θέματα Δομών Δεδομένων Προγραμματισμός Η/Υ Ενότητα 9: Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Κατανόηση της έννοιας της Δομής

Διαβάστε περισσότερα

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

Διαβάστε περισσότερα

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 8: Αρχεία και Δομές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Πρόλογος... 11. 1. Εισαγωγικά Στοιχεία... 13

Πρόλογος... 11. 1. Εισαγωγικά Στοιχεία... 13 ΠΕΡΙΕΧΟΜΕΝΑ Πρόλογος... 11 1. Εισαγωγικά Στοιχεία... 13 Το πρώτο πρόγραμμα... 15 Οι βασικοί τύποι δεδομένων και ο χειρισμός τους... 19 Σταθερές και Μεταβλητές... 19 Σταθερές τύπου ακεραίου... 19 Μεταβλητές

Διαβάστε περισσότερα

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ 00497 -Δεν ελέγχετε αν η createlist εκτελλέστικε σωστά και δεν τερµατίζετε το πρόγραµµα σε διαφορετική -Σωστά βρίσκετε το σηµείο στο οποίο πρέπει να προστεθεί ο κόµβος. -Σωστά τερµατίζετε

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό (με. τη C) Υποχρεωτικό Μάθημα 3 ου Εξαμήνου Χειμερινό Εξάμηνο Ακ. Έτους 20 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Εισαγωγή στον Προγραμματισμό (με τη C) Διδάσκουσα: Φατούρου Παναγιώτα faturu [at] csd.uoc.gr

Διαβάστε περισσότερα

Διάλεξη 19η: Δομές δεδομένων

Διάλεξη 19η: Δομές δεδομένων Διάλεξη 19η: Δομές δεδομένων Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Δομές CS100, 2016-2017 1 / 13 Δομές Δεδομένων (Data Structures) Καινούργιοι

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 3ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΕΚΤΥΠΩΣΗ ΚΕΙΜΕΝΟΥ Ένα κείμενο μπορεί να εκχωρηθεί ως τιμή μιας μεταβλητής

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή

Διαβάστε περισσότερα

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ 2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ Προκειμένου να επιτευχθεί η «ακριβής περιγραφή» ενός αλγορίθμου, χρησιμοποιείται κάποια γλώσσα που μπορεί να περιγράφει σειρές ενεργειών με τρόπο αυστηρό,

Διαβάστε περισσότερα

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

Διαδικαστικός Προγραμματισμός ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Διαδικαστικός Προγραμματισμός Α Εξάμηνο Μάθημα 7 ο : Δείκτες Στόχοι μαθήματος Να κατανοήσετε τη δυνατότητα χρήσης διευθύνσεων ως τιμών δεδομένων. Να μπορείτε να χρησιμοποιείτε

Διαβάστε περισσότερα

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ «ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ 1 4.1. Οριςμόσ φνθετων τφπων κλάςεων 2 Με εξαίρεςη τουσ βαςικούσ τύπουσ τησ Java (int, float, boolean, κλπ) τα

Διαβάστε περισσότερα

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες. Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες. Η C, όπως έχουμε αναφέρει, είναι μια γλώσσα προγραμματισμού υψηλού επιπέδου η οποία αναπτύχθηκε για πρώτη φορά το 1972 από τον Dennis Ritchie στα AT&T Bell

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο. Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο. Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΙΝΑΤΚΑΣ Ι ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων Εισαγωγή Οι βασικοί τύποι δεδομένων στην C είναι char, int, float και double Το επόμενο βήμα δεδομένων

Διαβάστε περισσότερα

Κεφάλαιο V: Δομές και ενώσεις. 5.1 Δομές.

Κεφάλαιο V: Δομές και ενώσεις. 5.1 Δομές. Κεφάλαιο V: Δομές και ενώσεις. 5.1 Δομές. Όπως αναφέραμε στο προηγούμενο κεφάλαιο η ομαδοποίηση της πληροφορίας στον προγραμματισμό είναι ιδιαίτερα σημαντική. Ένα παράδειγμα ομαδοποίησης της πληροφορίας

Διαβάστε περισσότερα

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014 .. Μεθοδολογία Προγραμματισμού Abstract Κλάσεις και Interfaces Νικόλαος Πεταλίδης Τμήμα Μηχανικών Η/Υ ΤΕΙ Κεντρικής Μακεδονίας Εισαγωγή Εαρινό Εξάμηνο 2014 Ν. Πεταλίδης (ΤΕΙ Κεντρικής Μακεδονίας) Μεθοδολογία

Διαβάστε περισσότερα

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

Συλλογές, Στοίβες και Ουρές Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση οποιουδήποτε στοιχείου. Συλλογή (bag) : Επιστρέφει

Διαβάστε περισσότερα

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014 Πίνακες 0 Μαρτίου 014 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα του συγκεκριμένου τύπου. Στην περίπτωση που θέλουμε

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Δομές Δεδομένων

Διαβάστε περισσότερα

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

Εισαγωγή στον δομημένο προγραμματισμό Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Εισαγωγή στον δομημένο προγραμματισμό Ενότητα 12 η : Δυναμική Ανάθεση Θέσης Αν. καθηγητής Στεργίου Κώστας e-mail: kstergiou@uowm.gr Τμήμα Μηχανικών Πληροφορικής

Διαβάστε περισσότερα

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις. 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ 10 η Διάλεξη C++ - Πίνακες Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Ανακεφαλαίωση Κατά την κλήση μιας συνάρτησης κατ αξία οι τιμές των ορισμάτων αντιγράφονται στις αντίστοιχες τυπικές παραμέτρους

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ Τα δεδομένα (data) είναι η αφαιρετική αναπαράσταση της πραγματικότητας και συνεπώς μία απλοποιημένη όψη της. Η συλλογή των ακατέργαστων δεδομένων και ο συσχετισμός

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Υπερφόρτωση τελεστών

Υπερφόρτωση τελεστών Υπερφόρτωση τελεστών 19 Νοεμβρίου 2012 1 Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας

Διαβάστε περισσότερα

B. Ενσωμάτωση Ιθαγενών Μεθόδων

B. Ενσωμάτωση Ιθαγενών Μεθόδων B. Ενσωμάτωση Ιθαγενών Μεθόδων Στο τέλος αυτού του κεφαλαίου θα μπορείτε: Να δημιουργείτε κώδικα Java που θα φορτώνει βιβλιοθήκες και θα καλεί ιθαγενείς μεθόδους (native methods). Να χρησιμοποιείτε τη

Διαβάστε περισσότερα

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2 Οικονόμου Βαγγέλησ Διάλεξη Νο 2 Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2 1 Η έννοια τησ μεταβλητήσ έδωςε λύςη ςτο πρόβλημα τησ αναφοράσ ςτην κύρια μνήμη του υπολογιςτή. Οι γλώςςεσ προγραμματιςμού υποςτηρίζουν

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 6: Πίνακες και Δείκτες Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αφηρημένοι Τύποι Δεδομένων (ΑΤΔ) Οι ΑΤΔ Στοίβα και Ουρά Υλοποίηση των ΑΤΔ Στοίβα και Ουρά ΕΠΛ231 Δομές Δεδομένων

Διαβάστε περισσότερα