ΚΕΦΑΛΑΙΟ 5 ΔΕΙΚΤΕΣ ΚΑΙ ΛΙΣΤΕΣ º½ Δείκτες º½º½ Εισαγωγήστηνχρήσηδεικτών Κάθεμεταβλητήστηνγλώσσα βρίσκεταισεσυγκεκριμένηθέσηστηνμνήμητου υπολογιστήºαυτήηθέσηονομάζεταικαιδιεύθυνσηκαιυπάρχειδυνατότητανατην εντοπίσουμεμετηνχρήσητουτελεστή ²όπωςπαρουσιάζεταικαιστοπαράδειγμα º½º Οιδιευθύνσειςμνήμηςμπορούνναεκχωρηθούνσεειδικέςμεταβλητέςπου ονομάζονταιδείκτεςºοιμεταβλητέςαυτέςέχουνδηλώνονταισαν ÌÈ ÎÊÁ¹ Ä όπου ÌÈέναςοποιοσδήποτετύποςτηςγλώσσας πχº ÒØ ÓÙ κτλµστοπαράδειγμα º¾γίνεταιανάθεσητωνδιευθύνσεωναπλώνμεταβλητώνσε δείκτεςκαιστηνσυνέχειαγίνεταιεμφάνισηαυτώντωντιμώνºωστόσοοιδείκτες μπορούνναχρησιμοποιηθούνγιατηναπόδοσητιμώνστιςμεταβλητέςστιςοποίες δείχνουν δηλαδήκάποιοςμπορείέμμεσανααλλάξειτηντιμήμιαςμεταβλητήςμέσω τουδείκτηºαυτόπαρουσιάζεταιστοναλγόριθμο ºº Αλγόριθμος5.1Εμφάνισηδιεθύνσεωνμεταβλητώνº ½ ÒÙ Ó Ø Ö Ñ ¾ Ù Ò ÒÑ Ô Ø ÒØ ÑÒ µ ÒØ Ü ¼ ÓÙ Ý ¾¼¼ ÓÙØ Î Ö Ö ÜÝ Ò ÓÙØ Ö Ö ²Ü²Ý Ò ÖØÙÖÒ ¼ ¾
Αλγόριθμος5.2Ανάθεσηδιευθύνσεωνσεδείκτεςº ½ ÒÙ Ó Ø Ö Ñ ¾ Ù Ò ÒÑ Ô Ø ÒØ ÑÒ µ ÒØ Ü ¼ ÓÙ Ý ¾¼¼ ÒØ ÔÜ²Ü ÓÙ ÔÝ²Ý ÓÙØ Î Ö Ö ÜÝ Ò ÓÙØ Ö Ö ÔÜÔÝ Ò ½¾ ÖØÙÖÒ ¼ ½ Αλγόριθμος5.3Αλλαγήμεταβλητώνμετηνχρήσηδεικτώνº ½ ÒÙ Ó Ø Ö Ñ ¾ Ù Ò ÒÑ Ô Ø ÒØ ÑÒ µ ÒØ Ü ¼ ÓÙ Ý ¾¼¼ ÒØ ÔÜ²Ü ÓÙ ÔÝ²Ý ÓÙØ Î Ö Ö ÜÝ Ò ÔÜ ½¾ ÔÝ ¾¼ ½ ÓÙØ Î Ö ÒÓÛ Ö ÜÝ Ò ÖØÙÖÒ ¼
½ ÒÙ Ó Ø Ö Ñ ¾ Ù Ò ÒÑ Ô Ø ÚÓ ÑÝ ÛÔ ÒØ ÒØ µ ÒØ Ø Ø ½¾ ÒØ ÑÒ µ ½ ÒØ Ü ¼ ÒØ Ý ¾¼¼ ÓÙØ Ó Ö ÛÔÜÝ Ò ÑÝ ÛÔ Ü Ý µ ÓÙØ Ø Ö ÛÔÜÝ Ò ÖØÙÖÒ ¼ ¾¼ º½º¾ Χρήσηδεικτώνσεσυναρτήσεις Μετηνχρήσητωνδεικτώνκαιτηνδυνατότηταπουδίνουνγιαέμμεσηαναφορά σεμεταβλητέςείναιεφικτόκανείςναεπιστρέψειπαραπάνωαπόμιατίμεςαπόμια συνάρτησηºγιαπαράδειγμαέστωότιχρειάζεταιναυλοποιηθείμιασυνάρτησηπου νααντιμεταθέτειδύοακέραιεςμεταβλητέςº Μιαπρώτηπροσπάθειαναγίνειαυτό παρουσιάζεταιστοναλγόριθμο ººΠροφανώςαυτόςοαλγόριθμοςδενμπορείνα κάνειτηναντίστροφη καθώςοιμεταβλητέςπερνούνστηνσυνάρτησημετιμήκαι τομόνοπουκάνειησυνάρτησηείναινααντιμεταθέσειτιςτοπικέςμεταβλητέςκαι όχιταπραγματικάορίσματαºαυτόμπορείναεπιλυθείμετηνχρήσηδεικτώνόπως παρουσιάζεταικαιστοναλγόριθμο ºº º¾ Δυναμικήκατανομήμνήμης Αλγόριθμος 5.4Μιαπρώτηπροσπάθειαυλοποίησηςσυνάρτησηςαντιμετάθεσηςμεταβλητώνº º¾º½ Δυναμικέςμεταβλητές Μετηνχρήσητωνδεικτώνμπορείκανείςεύκολαναδημιουργήσεικαιναδιαγράψειμεταβλητέςόταναυτόχρειάζεταιº Γιαναεπιτευχθείαυτόγίνεταιχρήση τωντελεστών ÒÛκαι Øº Οτελεστής ÒÛχρησιμοποιείταιγιαναδώσει μνήμηκαιοτελεστής Øχρησιμοποιείταιγιαναδιαγράψει αποδεσμεύσειµτην
Αλγόριθμος5.5Αντιμετάθεσημεταβλητώνμετηνχρήσησυνάρτησηςº ½ ÒÙ Ó Ø Ö Ñ ¾ Ù Ò ÒÑ Ô Ø ÚÓ ÑÝ ÛÔ ÒØ ÒØ µ ÒØ Ø Ø ½¾ ÒØ ÑÒ µ ½ ÒØ Ü ¼ ÒØ Ý ¾¼¼ ÓÙØ Ó Ö ÛÔÜÝ Ò ÑÝ ÛÔ ²Ü ²Ý µ ÓÙØ Ø Ö ÛÔÜÝ Ò ÖØÙÖÒ ¼ ¾¼ μνήμηαυτήº Πρέπειπάντοτεναγίνεταιαποδέσμευσηαυτήςτηςμνήμηςκαιαυτό πρέπειναγίνεταιμετοντελεστή Øº Ηγλώσσα δενδιαγράφειποτέαυτόματατηνμνήμηπουέχειδεσμευθείºμιαενδεικτικήχρήσητωνπαραπάνωτελεστών παρουσιάζεταιστοναλγόριθμο ººΗσταθερά ÆÍÄÄείναιίδιαμετοναριθμό ¼ χρησιμοποιείταιαρκετάσυχνάπροκειμένουνααρχικοποποιήσειδείκτεςσεκενή θέσημνήμηςº º¾º¾ Δυναμικοίπίνακες Οιτελεστές ÒÛκαι Øσυνήθωςχρησιμοποιούνταιγιατηνδημιουργίαδυναμικών πινάκωνκαιδομώνκαιόχιτόσογιατηνδημιουργίαδυναμικώναπλώνμεταβλητώνº Στοπαράδειγματουαλγορίθμου ºοχρήστηςεισάγειτονεπιθυμητόαριθμόστοιχείωνενόςπίνακακαιστηνσυνέχειαδημιουργείταιέναςπίνακαςακεραίωνμε τονεπιθυμητόαριθμόστοιχείωνºηδημιουργίαδυναμικώνπινάκωνπρέπειναγίνεταιμετηνχρήσητουσχήματος ÒÛ ÌÈÒ όπου ÌÈοεπιθυμητόςτύπος δεδομένων του πίνακαº Η διαγραφή του δυναμικού πίνακα γίνεται πάντοτε με το σχήμα Ø ÖÖÝκαιόχιμετοσχήμα Ø ÖÖݺ Στηνπερίπτωσηπουοχρήστηςθέλειναδημιουργήσειδυναμικόπίνακαδύο διαστάσεων ακολουθείταιμιαδιαδικασίαπουείναιπιοπερίπλοκη καθώς ένας πίνακας δύο διαστάσεων θεωρείται και πίνακας από πίνακεςº Ενα παράδειγμα δημιουργίαςκαιεμφάνισηςπίνακαδύοδιαστάσεωνπαρουσιάζεαιστοναλγόριθμο
Αλγόριθμος 5.6 Δημιουργία δυναμικής μεταβλητήςº Ò Ù Ó Ø Ö Ñ Ù Ò ÒÑ Ô Ø Ò Ø ÑÒ µ ÓÙ Ü Ô Ó Ò Ø ÖÆÍÄÄ ÓÙØ Ë Ø Ö Ø ÛØ Ö Ü Ô Ó Ò Ø Ö Ò Ü Ô Ó Ò Ø ÖÒÛ ÓÙ ÓÙØ ÆÓÛ Ø Ö Ü Ô Ó Ò Ø Ö Ò Ü Ô Ó Ò Ø Ö ¼ ÓÙØ Ì Ú Ù Ó Ø ÑÑÓÖÝ Ü Ô Ó Ò Ø Ö Ò Ü Ô Ó Ò Ø Ö Ü Ô Ó Ò Ø Ö ¼ ÓÙØ ÆÓÛ Ø Ú Ù Ó Ø ÑÑÓÖÝ Ü Ô Ó Ò Ø Ö Ò Ø Ü Ô Ó Ò Ø Ö Ö Ø Ù Ö Ò ¼ ºº º Λίστες Μετιςλίστεςκανείςμπορείναδημιουργήσειδυναμικέςδομές οιοποίεςμπορούν νααλλάξουνδυναμικάσεμέγεθοςανάλογαμετιςαπαιτήσειςτηςεφαρμογήςº ºº½ Εισαγωγήκόμβου Στοπαράδειγματουαλγορίθμου ºδημιουργείταιμιαδομήγιατηναποθήκευση τηςλίστας γίνεταιεισαγωγήδύοστοιχείωνκαιστηνσυνέχειαεμφανίζεταιτο μήκοςτηςλίσταςº ºº¾ Εμφάνισηλίστας Στοπαράδειγματουαλγορίθμου ºηλίστααπότοπροηγούμενοπαράδειγμα εμφανίζεταιμετηνχρήσημιαςσυνάρτησηςπουεκτελείμιαεπανάληψημέχρινα βρεθείκενόστοιχείοστηνλίσταº ºº Προσθήκηστοιχείουστηναρχήτηςλίστας Στοπαράδειγματουαλγορίθμου ºπαρουσιάζεταιμιασυνάρτησηγιατηνεισ- αγωγήδεδομένωνστηναρχήτηςλίσταςº
Αλγόριθμος5.7Δημιουργίαμονοδιάστατουπίνακαακεραίωναριθμώνº ½ ÒÙ Ó Ø Ö Ñ ¾ Ù Ò ÒÑ Ô Ø ÒØ ÑÒ µ ÒØ Ò ÒØ ÜÆÍÄÄ ÒØ ÓÙØ È Ô Ö Ó Ú Ö Ö Ý ³ ÑÒ ÓÒ Ò Ò ÜÒÛ ÒØ Ò ½¾ ÓÖ ¼ Ò µ Ü ½ ÓÖ ¼ Ò µ ÓÙØ Ü Ò Ø Ü ÖØÙÖÒ ¼ ºº Διαγραφήκόμβου Στοπαράδειγματουαλγορίθμου º½¾παρουσιάζεταιμιασυνάρτησηδιαγραφής στοιχείωναπόλίσταº
Αλγόριθμος5.8Δημιουργίαπίνακαδύοδιαστάσεωνº ½ ÒÙ Ó Ø Ö Ñ ¾ Ù Ò ÒÑ Ô Ø ÒØ ÑÒ µ ÒØ ÖÓÛ Ó ÒØ ÓÙ Ø ÓÙØ È Ö Ó Ú ÖÓÛ Ó Ö Ø Ø Ò ÖÓÛ ÓÙØ È Ö Ó Ú ÓÙÑÒ Ó Ö Ø Ø Ò Ó ½¾ Ø ÒÛ ÓÙ ÖÓÛ ½ ÓÖ ¼ ÖÓÛ µ Ø ÒÛ ÓÙ Ó ÓÖ ¼ ÖÓÛ µ ÓÖ ¼ Ó µ Ø ½µ ½µ ¾¼ ¾½ ¾¾ ÓÖ ¼ ÖÓÛ µ ¾ ÓÖ ¼ Ó µ ÓÙØØ Ø ÓÙØ Ò ¼ ÓÖ ¼ ÖÓÛ µ Ø Ø ½ ÖØÙÖÒ ¼ ¾
Αλγόριθμος5.9Εισαγωγήκόμβωνσελίστακαιεμφάνισημήκουςº ½ ÒÙ Ó Ø Ö Ñ ¾ ÒÙ Ø º Ù Ò ÒÑ Ô Ø ØÝÔ ØÖÙØ ÆÓ ÒØ Ú Ù ØÖÙØ ÆÓ ÒÜØ Ä Ø ÒØ Ø Ë Þ Ä Ø Ø µ ½¾ ½ ÒØ ÓÙÒØ ¼ Û Ø ÆÍÄĵ ØØ ÒÜØ ÓÙÒØ ÖØÙÖÒ ÓÙÒØ ¾¼ ¾½ ¾¾ ÒØ ÑÒ µ ¾ Ä Ø ÆÍÄÄ Ä Ø µ Ñ Ó ÞÓ Ä Ø µ µ Ú Ù ¼ ÒÜØ ÆÓ µ Ñ Ó ÞÓ Ä Ø µ µ ÒÜØ Ú Ù ¾¼¼ ÒÜØ ÒÜØÆÍÄÄ ¼ ÓÙØ Ä Ø Þ Ø Ë Þ µ Ò ½ ÖØÙÖÒ ¼ ¾
¼ Αλγόριθμος5.10Εμφάνισηστοιχείωνλίσταςº ½ ÒÙ Ó Ø Ö Ñ ¾ ÒÙ Ø º Ù Ò ÒÑ Ô Ø ØÝÔ ØÖÙØ ÆÓ ÒØ Ú Ù ØÖÙØ ÆÓ ÒÜØ Ä Ø ½¾ ÚÓ Ô Ö Ò Ø Ä Ø Ä Ø Ø µ ½ Û Ø ÆÍÄĵ ÓÙØ ÑÒØ Ø ÚÙ Ò ØØ ÒÜØ ¾¼ ¾½ ÒØ ÑÒ µ ¾¾ ¾ Ä Ø ÆÍÄÄ Ä Ø µ Ñ Ó ÞÓ Ä Ø µ µ Ú Ù ¼ ÒÜØ ÆÓ µ Ñ Ó ÞÓ Ä Ø µ µ ÒÜØ Ú Ù ¾¼¼ ÒÜØ ÒÜØÆÍÄÄ Ô Ö Ò Ø Ä Ø µ ¼ ÖØÙÖÒ ¼ ½
½ Αλγόριθμος5.11Εισαγωγήστοιχείωνστηναρχήτηςλίσταςº ½ ÒÙ Ó Ø Ö Ñ ¾ ÒÙ Ø º Ù Ò ÒÑ Ô Ø ØÝÔ ØÖÙØ ÆÓ ÒØ Ú Ù ØÖÙØ ÆÓ ÒÜØ Ä Ø ÚÓ ÑÒØ Ä Ø ÒØ Ü µ ½¾ ½ Ä Ø ÒÛÒÓ ÒÛÒÓ Ä Ø µ Ñ Ó ÞÓ Ä Ø µ µ ÒÛÒÓ Ú Ù Ü ÒÛÒÓ ÒÜØ ÒÛÒÓ ¾¼ ¾½ ÚÓ Ô Ö Ò Ø Ä Ø Ä Ø Ø µ ¾¾ ¾ Û Ø ÆÍÄĵ ÓÙØ ÑÒØ Ø ÚÙ Ò ØØ ÒÜØ ¼ ÒØ ÑÒ µ ½ ¾ Ä Ø ÆÍÄÄ ÒØ Ü Ó ÓÙØ ÒØÖ Ô Ó Ø Ú Ü Ò Ü ÑÒØ ² Ü µ Û Ü ¼µ ¼ Ô Ö Ò Ø Ä Ø µ ½ ÖØÙÖÒ ¼ ¾
¾ Αλγόριθμος5.12Διαγραφήκόμβουαπόλίσταº ½ ÒÙ Ó Ø Ö Ñ ¾ ÒÙ Ø º Ù Ò ÒÑ Ô Ø ØÝÔ ØÖÙØ ÆÓ ÒØ Ú Ù ØÖÙØ ÆÓ ÒÜØ Ä Ø ÚÓ ÑÒØ Ä Ø ÒØ Ü µ ½¾ ½ Ä Ø ÒÛÒÓ ÒÛÒÓ Ä Ø µ Ñ Ó ÞÓ Ä Ø µ µ ÒÛÒÓ Ú Ù Ü ÒÛÒÓ ÒÜØ ÒÛÒÓ ¾¼ ¾½ ÒØ ÖÑÓÚÑÒØ Ä Ø µ ¾¾ ¾ ÒØ Ö Ø Ú Ä Ø ÒÜØÒÓ ÆÍÄÄ ÆÍÄĵ ÖØÙÖÒ ÒÜØÒÓ µ ÒÜØ ¼ Ö Ø Ú µ Ú Ù ½ Ö µ ¾ ÒÜØÒÓ ÖØÙÖÒ Ö Ø Ú ÚÓ Ô Ö Ò Ø Ä Ø Ä Ø Ø µ Û Ø ÆÍÄĵ ¼ ÓÙØ ÑÒØ Ø ÚÙ Ò ½ ØØ ÒÜØ ¾