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

Save this PDF as:
 WORD  PNG  TXT  JPG

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

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

Transcript

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

2 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

3 Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Μακεδονίας» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

4 Σκοποί ενότητας Κατανόηση του ΑΤΔ Λίστα. Σειριακή αποθήκευση λίστας Υλοποίηση των βασικών λειτουργιών Να μελετηθεί ο ΑΤΔ λίστα, η υλοποίηση της με πίνακα και δομή καθώς και η υλοποίηση των πράξεων που περιέχει η λίστα. Να μελετηθεί η Συνδεδεμένη Λίστα και να δοθεί η υλοποίηση της με πίνακα και δομή καθώς και η υλοποίηση των πράξεων που περιέχει η Συνδεδεμένη λίστα. 4

5 Περιεχόμενα ενότητας[1] Εισαγωγή στον ΑΤΔ Λίστα Διαφορά λίστας, στοίβας, ουράς Ορισμός ΑΤΔ λίστα Αποθηκευτική δομή ΑΤΔ λίστα Παράδειγμα Εισαγωγής, διαγραφής Ένα πακέτο για τον ΤΔ λίστα (σειριακή αποθήκευση) 5

6 Περιεχόμενα ενότητας[2] Εισαγωγή ΑΤΔ Συνδεδεμένη Λίστα Βασικές λειτουργίες συνδεδεμένων λιστών Δημιουργία κενής Σ.Λ. Έλεγχος κενής ΣΛ Εισαγωγή Διαγραφή Διάσχιση 6

7 Περιεχόμενα ενότητας[3] Εισαγωγή Συνδεδεμένη Λίστα με πίνακα Δηλώσεις Παράδειγμα Δεξαμενή διαθέσιμων κόμβων Αρχικοποίηση δεξαμενής Πακέτο για τη Συνδεδεμένη λίστα με πίνακα 7

8 Εισαγωγή Ως δομή δεδομένων, μια λίστα (list) είναι μια πεπερασμένη αλληλουχία στοιχείων. Αν και οι βασικές λειτουργίες που συνδέονται με τις λίστες διαφέρουν ανάλογα με την εφαρμογή, συνήθως περιλαμβάνουν τα ακόλουθα: Δημιουργία κενής λίστας Έλεγχος αν μια λίστα είναι κενή Διάσχιση της λίστας ή τμήματός της για προσπέλαση και επεξεργασία των στοιχείων με τη σειρά Εισαγωγή ενός νέου στοιχείου στη λίστα Διαγραφή κάποιου στοιχείου από τη λίστα. 8

9 Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση 9

10 Διαφορά λίστας, στοίβας και ουράς Βασική διαφορά της λίστας από την στοίβα και την ουρά: η λίστα είναι προσπελάσιμη σε οποιαδήποτε θέση της, η στοίβα είναι προσπελάσιμη μόνο στο ένα άκρο της, η ουρά είναι προσπελάσιμη στα δύο άκρα της. Έτσι, λοιπόν, η εισαγωγή ενός στοιχείου σε μια λίστα μπορεί να γίνει σε οποιαδήποτε θέση της (ανάλογα με το πρόβλημα) και η διαγραφή ενός στοιχείου μπορεί να γίνει από οποιαδήποτε θέση της. 10

11 Ορισμός του ΑΤΔ Λίστα -1- Συλλογή στοιχείων δεδομένων: Μια ακολουθία στοιχείων δεδομένων σε γραμμική διάταξη. Βασικές λειτουργίες: Δημιουργία κενής λίστας (CreateList) Λειτουργία: Δημιουργεί μια κενή λίστα. Επιστρέφει: Μια κενή λίστα. 11

12 Ορισμός του ΑΤΔ Λίστα -2- Έλεγχος κενής λίστας(emptylist) Δέχεται: Μια λίστα. Λειτουργία: Ελέγχει αν η λίστα είναι κενή. Επιστρέφει: TRUE, αν η λίστα είναι κενή, FALSE διαφορετικά. 12

13 Ορισμός του ΑΤΔ Λίστα -3- Διάσχιση (Traverse) Δέχεται: Μια λίστα. Λειτουργία: Διασχίζει τη λίστα (ή τμήμα της) για προσπέλαση και επεξεργασία των στοιχείων με τη σειρά. Επιστρέφει: Εξαρτάται από το είδος της επεξεργασίας. 13

14 Ορισμός του ΑΤΔ Λίστα -4- Διάσχιση (Traverse) Δέχεται: Μια λίστα. Λειτουργία: Διασχίζει τη λίστα (ή τμήμα της) για προσπέλαση και επεξεργασία των στοιχείων με τη σειρά. Επιστρέφει: Εξαρτάται από το είδος της επεξεργασίας. 14

15 Ορισμός του ΑΤΔ Λίστα -5- Διαγραφή στοιχείου (Delete) Δέχεται: Μια λίστα και μια θέση μέσα στη λίστα. Λειτουργία: Διαγράφει το στοιχείο από την συγκεκριμένη θέση της λίστας. Επιστρέφει: Την τροποποιημένη λίστα. 15

16 Αποθηκευτική Δομή -1- Καθότι οι λίστες, όμοια με τις στοίβες και τις ουρές, είναι ακολουθίες στοιχείων δεδομένων, θα ήταν φυσικό να χρησιμοποιήσουμε και πάλι έναν πίνακα για τη βασική αποθηκευτική δομή. Με την μέθοδο αυτή τα διαδοχικά στοιχεία της λίστας αποθηκεύονται σε μία σειρά διαδοχικών θέσεων πίνακα, με το πρώτο στοιχείο της λίστας στην θέση 1 του πίνακα, το δεύτερο στην θέση 2, κ.ο.κ. 16

17 Αποθηκευτική Δομή -2- Καθότι οι λίστες, όμοια με τις στοίβες και τις ουρές, είναι ακολουθίες στοιχείων δεδομένων, θα ήταν φυσικό να χρησιμοποιήσουμε και πάλι έναν πίνακα για τη βασική αποθηκευτική δομή. Με την μέθοδο αυτή τα διαδοχικά στοιχεία της λίστας αποθηκεύονται σε μία σειρά διαδοχικών θέσεων πίνακα, με το πρώτο στοιχείο της λίστας στην θέση 1 του πίνακα, το δεύτερο στην θέση 2, κ.ο.κ. 17

18 Αποθηκευτική Δομή -3- Θα αναφερόμαστε σε αυτήν την υλοποίηση λίστας ως την υλοποίηση λίστας με σειριακή αποθήκευση (sequential storage implemention of lists). 18

19 Αποθηκευτική Δομή -4- Μια λίστα και τα στοιχεία της μπορούν να αποθηκευτούν με τη χρήση μιας εγγραφής, όπως φαίνεται παρακάτω: #define ListLimit 50 typedef struct { int Size; ListElementType Element[ListLimit]; } ListType; 19

20 Κενή λίστα Οι τρεις πρώτες βασικές λειτουργίες της λίστας είναι εύκολο να υλοποιηθούν. Αν η List είναι τύπου ListType τότε: Δημιουργία κενής λίστας (CreateList): Μια κενή λίστα δημιουργείται θέτοντας List.Size = 0. Έλεγχος κενής λίστας (EmptyList): Αν θεωρήσουμε ότι υπάρχει μια boolean συνάρτηση EmptyList, τότε μπορεί να πάρει τιμή TRUE ή FALSE αν η συνθήκη EmptyList == (List.Size=0) είναι αληθής ή ψευδής αντίστοιχα 20

21 Διάσχιση λίστας Traverse: Η διάσχιση της λίστας για π.χ. εμφάνιση των στοιχείων της μπορεί να γίνει με τον ακόλουθο βρόχο: Για i από 0 μέχρι List.Size - 1 Γράψε List.Element[i] Τέλος_επανάληψης 21

22 Παράδειγμα Για να δούμε πώς λειτουργούν οι διαδικασίες εισαγωγής και διαγραφής στοιχείων από την ή στην λίστα, ας θεωρήσουμε μια λίστα ταξινομημένων ακεραίων αριθμών με αύξουσα διάταξη όπως η ακόλουθη: 4, 12, 37, 40, 49, 63, 71 Η λίστα αυτή μπορεί να αποθηκευτεί με την μορφή πίνακα ως εξής: List θέση αριθμός

23 Παράδειγμα: Εισαγωγή Έστω ότι θέλουμε να προσθέσουμε ένα νέο αριθμό στην λίστα, π.χ. τον 28. Επειδή θέλουμε τα στοιχεία της λίστας να είναι ταξινομημένα κατά αύξουσα σειρά, θα πρέπει να μετατοπίσουμε κατά μία θέση δεξιά τα στοιχεία που βρίσκονται δεξιά του 12, ώστε να δημιουργηθεί μια ελεύθερη θέση μεταξύ του 12 και του 37 και να τοποθετηθεί εκεί ο αριθμός 28, όπως φαίνεται παρακάτω: List θέση αριθμός

24 Παράδειγμα: λίστα γεμάτη; Πριν προχωρήσουμε στην εισαγωγή του νέου στοιχείου στη λίστα, θα πρέπει να εξετάσουμε αν υπάρχει χώρος για αυτό το νέο στοιχείο, δηλαδή αν η λίστα δεν είναι γεμάτη. Ενώ, λοιπόν, θεωρητικά μια λίστα είναι απεριόριστη και μπορούμε να εισάγουμε όσα στοιχεία θέλουμε σ' αυτήν, εδώ περιοριζόμαστε από το μέγεθος του πίνακα με τον οποίο υλοποιούμε την λίστα. 24

25 Συνάρτηση για λίστα γεμάτη; Επομένως, είναι απαραίτητο να συμπεριληφθεί και μια συνάρτηση FullList στο πακέτο για τον ΑΤΔ Λίστα, η οποία να εξετάζει αν προκλήθηκε κάποιο σφάλμα στην προσπάθεια εισαγωγής ενός νέου στοιχείου στη λίστα. 25

26 Παράδειγμα: Διαγραφή Έστω τώρα ότι θέλουμε να διαγράψουμε τον αριθμό 12 από τη λίστα που είχαμε προηγουμένως. Η διαγραφή αυτή συνεπάγεται και μετατόπιση κατά μία θέση προς τα αριστερά των αριθμών που βρίσκονταν δεξιά του 12. List θέση αριθμός

27 // Filename ListADT.h #define ListLimit 50 typedef int ListElementType; typedef struct { } ListType; int Size; ListElementType Element[ListLimit]; typedef enum { } boolean; Ένα πακέτο για τη Λίστα με FALSE, TRUE πίνακα -1-27

28 Ένα πακέτο για τη Λίστα με πίνακα -2- void CreateList(ListType *List); boolean EmptyList(ListType List); boolean FullList(ListType List); void Insert(ListType *List, ListElementType Item, int Pos); void Delete(ListType *List, int Pos); void TraverseList(ListType List); 28

29 Ένα πακέτο για τη Λίστα με // Filename ListADT.c πίνακα -3- void CreateList(ListType *List) /*Λειτουργία: Δημιουργεί μια κενή λίστα. Επιστρέφει: Μια κενή λίστα*/ { (*List).Size = 0; } 29

30 Ένα πακέτο για τη Λίστα με πίνακα -4- boolean EmptyList(ListType List) /*Δέχεται: Μια λίστα List. Λειτουργία: Ελέγχει αν η λίστα List είναι κενή. Επιστρέφει: TRUE αν η λίστα List είναι άδεια, FALSE διαφορετικά.*/ { return (List.Size == 0); } 30

31 Ένα πακέτο για τη Λίστα με πίνακα -5- boolean FullList(ListType List) /*Δέχεται: Μια λίστα List. Λειτουργία: Ελέγχει αν η λίστα List είναι γεμάτη. Επιστρέφει: TRUE αν η λίστα List είναι γεμάτη, FALSE διαφορετικά.*/ { return (List.Size == (ListLimit)); } 31

32 Ένα πακέτο για τη Λίστα με void πίνακα -6- Insert(ListType *List, ListElementType Item, int Pos) /*Δέχεται: Μια λίστα List, ένα στοιχείο Item και μια θέση Pos μέσα στη λίστα. Λειτουργία: Εισάγει το στοιχείο Item στη λίστα List μετά από το στοιχείο που βρίσκεται στη θέση Pos (αν η λίστα είναι κενή τότε Pos=0). Επιστρέφει: Την τροποποιημένη λίστα. Έξοδος: Μήνυμα λάθους στην περίπτωση που η εισαγωγή αποτύχει.*/. 32

33 Ένα πακέτο για τη Λίστα με πίνακα -7- { } int i; if (FullList(*List)) printf("full list...\n"); else { for (i= (*List).Size-1; i>=pos+1;i- -) (*List).Element[i+1] = (*List).Element[i]; (*List).Element[Pos+1] = Item; (*List).Size++; } 33

34 Ένα πακέτο για τη Λίστα με πίνακα -8- void Delete(ListType *List, int Pos) /*Δέχεται: Μια λίστα List και μια θέση Pos μέσα στη λίστα. Λειτουργία: Διαγράφει το στοιχείο από τη θέση Pos της λίστας List. Επιστρέφει: Την τροποποιημένη λίστα. Έξοδος: Μήνυμα λάθους στην περίπτωση που η διαγραφή αποτύχει.*/ 34

35 Ένα πακέτο για τη Λίστα με πίνακα -9- { } int i; if (EmptyList(*List)) printf("empty list...\n"); else { for (i = Pos; i< (*List).Size-1; i++) (*List).Element[i] = (*List).Element[i+1]; } (*List).Size--; 35

36 Αποδοτικότητα της διαδικασίας Insert -1- Η αποδοτικότητα της διαδικασίας Insert εξαρτάται από το πλήθος των στοιχείων του πίνακα που πρέπει να μετακινηθούν προκειμένου να δημιουργηθεί κενή θέση για το νέο στοιχείο. 36

37 Αποδοτικότητα της διαδικασίας Insert -2- Στην καλύτερη περίπτωση το νέο στοιχείο πρέπει να εισαχθεί στο τέλος της λίστας, οπότε δεν χρειάζεται να μετακινηθεί κανένα από τα στοιχεία του πίνακα. Στην χειρότερη περίπτωση το νέο στοιχείο πρέπει να εισαχθεί στην αρχή της λίστας, πράγμα το οποίο συνεπάγεται μετατόπιση όλων των στοιχείων της λίστας. Επομένως, αν το μέγεθος της λίστας είναι n τότε κατά μέσο όρο πρέπει να μετακινηθούν n/2 στοιχεία του πίνακα για την εισαγωγή ενός νέου στοιχείου. 37

38 Αποδοτικότητα της διαδικασίας Insert -3- Βέβαια, όλα τα παραπάνω ισχύουν εφόσον μας ενδιαφέρει η σειρά των στοιχείων στη λίστα. Αν η σειρά δεν μας ενδιαφέρει, τότε η εισαγωγή νέων στοιχείων μπορεί να γίνει σε οποιαδήποτε θέση της λίστας και μάλιστα βολεύει να γίνεται στο τέλος της. Για μια τέτοια λίστα η εισαγωγή στοιχείου είναι ίδια με την ώθηση ενός στοιχείου σε μια στοίβα. 38

39 Αποδοτικότητα της διαδικασίας Delete Η αποδοτικότητα της διαδικασίας Delete εξαρτάται και αυτή από το πλήθος των στοιχείων του πίνακα που πρέπει να μετακινηθούν μετά τη διαγραφή του στοιχείου: Στη καλύτερη περίπτωση το στοιχείο διαγράφεται από το τέλος της λίστας, οπότε δεν χρειάζεται να μετακινηθεί κανένα από τα στοιχεία του πίνακα. Στην χειρότερη περίπτωση το στοιχείο διαγράφεται από την αρχή της λίστας, πράγμα το οποίο συνεπάγεται μετατόπιση όλων των στοιχείων της λίστας. Επομένως, και πάλι ο μέσος όρος μετακινήσεων που πρέπει να γίνουν είναι n/2. 39

40 Ο ΑΤΔ Συνδεδεμένη Λίστα 40

41 Εισαγωγή -1- Μια λίστα είναι μια ακολουθία στοιχείων δεδομένων, πράγμα το οποίο σημαίνει ότι υπάρχει μία διάταξη όσον αφορά τα στοιχεία της λίστας: κάποιο στοιχείο είναι πρώτο, κάποιο δεύτερο, κ.ο.κ. Γι' αυτό, οποιαδήποτε υλοποίηση αυτής της δομής δεδομένων πρέπει να έχει ενσωματωμένη μια μέθοδο που να καθορίζει αυτήν την διάταξη. 41

42 Εισαγωγή -2- Στην υλοποίηση με σειριακή αποθήκευση, η διάταξη των στοιχείων της λίστας δινόταν σιωπηρά από την φυσική διάταξη των στοιχείων του πίνακα, αφού το πρώτο στοιχείο ήταν αποθηκευμένο στην πρώτη θέση του πίνακα, το δεύτερο στοιχείο στην δεύτερη θέση, κ.ο.κ. Αυτός ο σιωπηρός προσδιορισμός της διάταξης των στοιχείων της λίστας ήταν που έκανε απαραίτητη την μετατόπισή τους στον πίνακα σε κάθε εισαγωγή ή διαγραφή στοιχείου. 42

43 Εισαγωγή -3- Στην ενότητα αυτή, θεωρούμε μια εναλλακτική υλοποίηση λίστας, στην οποία η διάταξη των στοιχείων δίνεται ρητά. 43

44 Εισαγωγή -4- Στην ενότητα αυτή, θεωρούμε μια εναλλακτική υλοποίηση λίστας, στην οποία η διάταξη των στοιχείων δίνεται ρητά. Σε οποιαδήποτε δομή, που χρησιμοποιείται για την αποθήκευση στοιχείων λίστας, πρέπει να υπάρχει η δυνατότητα εκτέλεσης τουλάχιστον των παρακάτω λειτουργιών, αν πρέπει να διατηρηθεί η διάταξη των στοιχείων της λίστας: Εντοπισμός του πρώτου στοιχείου Δοσμένης της θέσης οποιουδήποτε στοιχείου, προσδιορισμός της θέσης του στοιχείου που ακολουθεί 44

45 Εισαγωγή -5- Στην υλοποίηση με σειριακή αποθήκευση η διάταξη δίνεται σιωπηρά από τους δείκτες του πίνακα, δηλαδή το πρώτο στοιχείο της λίστας αποθηκεύεται στην θέση 1 του πίνακα, το δεύτερο στοιχείο στην θέση 2, κλπ, και το επόμενο του στοιχείου της θέσης i βρίσκεται στην θέση i+1 του πίνακα. 45

46 Εισαγωγή -6- Μια δομή αποθήκευσης στοιχείων λίστας στην οποία η διάταξη δίνεται ρητά ονομάζεται συνδεδεμένη λίστα (linked lists). Μια συνδεδεμένη λίστα είναι μια συλλογή στοιχείων, που ονομάζονται κόμβοι (nodes), και σε κάθε κόμβο αποθηκεύονται δύο είδη πληροφορίας: Ένα στοιχείο της λίστας Ένας δεσμός (link) ή δείκτης (pointer) που δείχνει ρητά τη θέση του κόμβου που περιέχει το επόμενο στοιχείο της λίστας Επίσης, πρέπει να διατηρείται πρόσβαση στον κόμβο όπου είναι αποθηκευμένο το πρώτο στοιχείο της λίστας. 46

47 Παράδειγμα -1- Έστω ότι έχουμε μια συνδεδεμένη λίστα όπου αποθηκεύουμε τα ονόματα Ελένη, Μαρία και Φωτεινή, όπως φαίνεται στο παρακάτω σχήμα. Στο σχήμα αυτό, τα βέλη παριστάνουν τους δεσμούς και ο δείκτης List δείχνει στον πρώτο κόμβο της λίστας. 47

48 Παράδειγμα -2- Στο σχήμα αυτό, τα βέλη παριστάνουν τους δεσμούς και ο δείκτης List δείχνει στον πρώτο κόμβο της λίστας. Στο τμήμα δεδομένων (Data) του κάθε κόμβου αποθηκεύεται ένα από τα ονόματα της λίστας και η κουκίδα στον τελευταίο κόμβο που δεν έχει βέλος να ξεκινάει από αυτήν αντιπροσωπεύει έναν μηδενικό δείκτη (nil pointer) και δηλώνει ότι δεν υπάρχει επόμενο γι' αυτό το στοιχείο. 48

49 Παράδειγμα -3- Αν με p συμβολίσουμε το δείκτη προς κάποιο κόμβο αυτής της λίστας, τότε θα δηλώνουμε το τμήμα δεδομένου του κόμβου ως Data(p) και το τμήμα δεσμού ως Next(p). Επίσης, θα θεωρούμε ότι NilValue είναι μια ειδική τιμή που μπορεί να δοθεί στο p για να δείξει ότι είναι μηδενικός δείκτης, δηλαδή δε δείχνει σε κανένα κόμβο. 49

50 Βασικές λειτουργίες -1- Δημιουργία κενής λίστας CreateList Για να δημιουργήσουμε μια κενή λίστα αρκεί να θέσουμε την τιμή NilValue στον δείκτη List για να δείξουμε ότι δεν δείχνει σε κανένα κόμβο,δηλαδή: List Έλεγχος κενής λίστας - EmptyList Για να καθορίσουμε αν η λίστα είναι κενή μπορούμε απλά να εξετάσουμε αν ο δείκτης List έχει την τιμή NilValue. 50

51 Βασικές λειτουργίες -2- Διάσχιση λίστας Traverse Έστω ότι θέλουμε να διασχίσουμε μια λίστα όπως η παραπάνω λίστα ονομάτων. Χρησιμοποιούμε έναν βοηθητικό δείκτη CurrP, ο οποίος δείχνει αρχικά στον πρώτο κόμβο, και επεξεργαζόμαστε το στοιχείο Ελένη που είναι αποθηκευμένο στον κόμβο αυτό. Για να μετακινηθούμε στον επόμενο κόμβο και να επεξεργαστούμε το στοιχείο Μαρία, ακολουθούμε τον δεσμό του τρέχοντος κόμβου (Next(CurrP)) θέτοντας CurrP=Next(CurrP). Ομοίως, για να επεξεργαστούμε το επόμενο στοιχείο, Φωτεινή, θέτουμε πάλι CurrP=Next(CurrP), οπότε ο CurrP δείχνει τώρα στον τρίτο κόμβο της λίστας. Το στοιχείο Φωτεινή είναι το τελευταίο της λίστας, οπότε αν θέσουμε πάλι CurrP=Next(CurrP), ο CurrP γίνεται μηδενικός και καταλαβαίνουμε ότι φτάσαμε στο τέλος της λίστας. 51

52 Βασικές λειτουργίες -3- Εισαγωγή στοιχείου Insert Για να εισαγάγουμε ένα νέο στοιχείο στη λίστα, χρειάζεται πρώτα να αποκτήσουμε ένα νέο κόμβο, ώστε να αποθηκεύσουμε την τιμή του στοιχείου στο τμήμα δεδομένου του κόμβου αυτού. Υποθέτουμε ότι υπάρχει μια δεξαμενή (storage pool) διαθέσιμων κόμβων καθώς και ένας μηχανισμός απόκτησης τέτοιων κόμβων από τη δεξαμενή. 52

53 Βασικές λειτουργίες -4- Υποθέτουμε, δηλαδή, ότι υπάρχει μια διαδικασία GetNode η οποία, αν κληθεί με μια πρόταση της μορφής GetNode(TempP), θα επιστρέψει έναν προσωρινό δείκτη TempP προς έναν διαθέσιμο κόμβο. Το επόμενο βήμα είναι να συνδεθεί αυτός ο κόμβος με την υπάρχουσα λίστα. Διακρίνουμε δύο περιπτώσεις: α) η εισαγωγή να γίνει στην αρχή της λίστας β) η εισαγωγή να γίνει μετά από κάποιο στοιχείο της λίστας 53

54 Βασικές λειτουργίες -5- Α) Εισαγωγή στοιχείου στην αρχή της λίστας Έστω ότι θέλουμε να εισαγάγουμε το όνομα Δήμητρα στην αρχή της λίστας. Κατ' αρχήν 1. παίρνουμε έναν νέο κόμβο με την εντολή GetNode(TempP), στον οποίο δείχνει προσωρινά ο δείκτης TempP, και 2. αποθηκεύουμε την τιμή Δήμητρα στο τμήμα δεδομένου του θέτοντας Data(TempP)='Δήμητρα'. Στη συνέχεια, 3. εισάγουμε τον κόμβο αυτό στην αρχή της λίστας κάνοντας το τμήμα δεσμού του να δείχνει στον πρώτο κόμβο της λίστας, δηλαδή θέτουμε Next(TempP)=List, και, τέλος, 4. θέτουμε List=TempP ώστε ο List να δείχνει στον νέο κόμβο. 54

55 Βασικές λειτουργίες -6- Συνολικά, δηλαδή, εκτελούμε τις ακόλουθες εντολές: 1. GetNode(TempP) 2. Data(TempP)='Δήμητρα' 3. Next(TempP)=List 4. List=TempP 55

56 Βασικές λειτουργίες -7- Εισαγωγή στοιχείου στην αρχή της λίστας ( συνέχεια) 1. GetNode(TempP) 2. Data(TempP)='Δήμητρα' 3. Next(TempP)=List 4. List=TempP 56

57 Βασικές λειτουργίες -8- Β) Εισαγωγή μετά από κάποιο στοιχείο της λίστας Έστω ότι θέλουμε να εισαγάγουμε το όνομα Βάσω μετά από τον κόμβο που περιέχει το όνομα Μαρία και ότι ο δείκτης PredP δείχνει σ' αυτόν τον κόμβο: 1. Παίρνουμε πάλι έναν νέο κόμβο με την εντολή GetNode(TempP), στον οποίο δείχνει προσωρινά ο δείκτης TempP, και 2. αποθηκεύουμε την τιμή Στέλλα στο τμήμα δεδομένου του θέτοντας Data(TempP)='Βάσω'. Εισάγουμε τον κόμβο αυτό στη λίστα και 3. θέτουμε το τμήμα δεσμού του ίσο με Next(PredP) ώστε να δείχνει στον επόμενο του κόμβου που περιέχει το όνομα Μαρία με την εντολή Next(TempP)=Next(PredP) και 4. αλλάζουμε το τμήμα δεσμού τού προηγούμενου κόμβου ώστε να δείχνει στον νέο κόμβο, δηλαδή θέτουμε Next(PredP)=TempP.. 57

58 Βασικές λειτουργίες -9- Συνολικά, δηλαδή, εκτελούμε τις ακόλουθες εντολές: 1. GetNode(TempP) 2. Data(TempP)='Βάσω 3. Next(TempP)=Next(PredP) 4. Next(PredP)=TempP 58

59 Βασικές λειτουργίες -10- Εισαγωγή στοιχείου στην αρχή της λίστας ( συνέχεια) 1. GetNode(TempP) 2. Data(TempP)='Βάσω 3. Next(TempP)=Next(PredP) 4. Next(PredP)=TempP 59

60 Βασικές λειτουργίες -11- Διαγραφή στοιχείου Delete Στην διαγραφή ενός στοιχείου από μια λίστα έχουμε πάλι δύο περιπτώσεις: α) διαγραφή του πρώτου στοιχείου της λίστας β) διαγραφή ενός στοιχείου από κόμβο για τον οποίο υπάρχει κάποιος προηγούμενος κόμβος 60

61 Βασικές λειτουργίες -12- Α) Διαγραφή του πρώτου στοιχείου της λίστας Έστω ότι θέλουμε να διαγράψουμε το στοιχείο Ελένη που βρίσκεται στην αρχή της λίστας του Σχήματος 61

62 Βασικές λειτουργίες -13- Α) Διαγραφή του πρώτου στοιχείου της λίστας Αυτό είναι πολύ εύκολο να γίνει αν αλλάξουμε τον δείκτη List ώστε να δείχνει στον δεύτερο κόμβο της λίστας, θέτοντας TempP=List και μετά List=Next(List), και να επιστρέψουμε τον διαγραμμένο κόμβο στην δεξαμενή με τους διαθέσιμους κόμβους καλώντας μια διαδικασία ReleaseNode, δηλαδή ReleaseNode(TempP). 62

63 Βασικές λειτουργίες -14- Α) Διαγραφή του πρώτου στοιχείου της λίστας Συνολικά,δηλαδή, εκτελούμε τις ακόλουθες εντολές: TempP=List List=Next(List) ReleaseNode(TempP) 63

64 Βασικές λειτουργίες -15- Β) Διαγραφή στοιχείου από κόμβο για τον οποίο υπάρχει κάποιος προηγούμενος κόμβος Έστω ότι θέλουμε να διαγράψουμε τον κόμβο με το όνομα Μαρία της λίστας του Σχήματος 64

65 Βασικές λειτουργίες -16- Β) Διαγραφή στοιχείου από κόμβο για τον οποίο υπάρχει κάποιος προηγούμενος κόμβος Το μόνο που χρειάζεται να κάνουμε είναι να δείχνει ο προηγούμενος κόμβος αυτού που θέλουμε να διαγραφεί στον επόμενό του, δηλαδή TempP=Next(PredP) και μετά Next(PredP)=Next(TempP), και, τέλος, να καλέσουμε την ReleaseNode για να επιστρέψουμε τον διαγραμμένο κόμβο στη δεξαμενή των διαθέσιμων κόμβων, ReleaseNode(TempP). 65

66 Βασικές λειτουργίες -17- Β) Διαγραφή στοιχείου από κόμβο για τον οποίο υπάρχει κάποιος προηγούμενος κόμβος Συνολικά, δηλαδή, εκτελούμε τις ακόλουθες εντολές: TempP=Next(PredP) Next(PredP)=Next(TempP) ReleaseNode(TempP) 66

67 Πλεονέκτημα των συνδεδεμένων λιστών Οι εισαγωγές και διαγραφές στοιχείων μπορούν να γίνουν σε οποιαδήποτε θέση της λίστας ανεξάρτητα από το πλήθος των στοιχείων της και χωρίς μετατοπίσεις στοιχείων.. 67

68 Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα 68

69 Εισαγωγή -1- Επειδή οι περισσότερες γλώσσες προγραμματισμού δεν περιλαμβάνουν κάποιο προκαθορισμένο τύπο δεδομένων για τις συνδεδεμένες λίστες, η υλοποίησή τους μπορεί να γίνει με χρήση άλλων τύπων δεδομένων. Εδώ θα ασχοληθούμε με την υλοποίηση των συνδεδεμένων λιστών με χρήση πινάκων και εγγραφών. 69

70 Εισαγωγή -2- Οι κόμβοι μιας συνδεδεμένης λίστας περιλαμβάνουν: το τμήμα δεδομένου (Data), όπου αποθηκεύεται ένα στοιχείο της λίστας, και το τμήμα δεσμού (Link), όπου αποθηκεύεται ένας δείκτης, ο οποίος είτε δείχνει στον επόμενο κόμβο της λίστας είτε είναι μηδενικός, στην περίπτωση που είναι ο δείκτης του τελευταίου κόμβου. 70

71 Εισαγωγή -3- Κάθε κόμβος μπορεί να παρασταθεί με μια εγγραφή και η συνδεδεμένη λίστα με έναν πίνακα τέτοιων εγγραφών. Κάθε εγγραφή θα αποτελείται: από ένα πεδίο Data, για την αποθήκευση του στοιχείου, και ένα πεδίο Link, για την αποθήκευση του δείκτη που δείχνει τη θέση του επόμενου κόμβου μέσα στον πίνακα. 71

72 Δηλώσεις -1- #define NumberOfNodes 50 /*μέγεθος της δεξαμενής κόμβων (λίστας*/ #define NilValue 0 /*ειδική μηδενική τιμή, δείχνει το τέλος της Σ.Λ*/ typedef int ListElementType; /*ο τύπος των στοιχείων της λίστας*/ typedef int ListPointer; typedef struct { ListElementType Data; ListPointer Next; } NodeType; /*ο τύπος των δεικτών*/ 72

73 Δηλώσεις -2- /*δήλωση μεταβλητών */ NodeType Node[NumberOfNodes+1]; /*η δεξαμενή των διαθέσιμων κόμβων*/ ListPointer FreePtr; /*δείκτης για τον πρώτο διαθέσιμο κόμβο*/ 73

74 Παράδειγμα -1- Ας πάρουμε πάλι τη λίστα ονομάτων: List είναι μια μεταβλητή τύπου LinkedListType και δείχνει στον πρώτο κόμβο, γιατί σ' αυτήν αποθηκεύεται η θέση του στον πίνακα Node. Αν υποθέσουμε ότι NumberOfNodes=10, τότε ο πίνακας Node αποτελείται από 10 εγγραφές τύπου NodeType. Οι κόμβοι της ΣΛ μπορούν να είναι αποθηκευμένοι σε οποιεσδήποτε θέσεις του πίνακα αυτού αρκεί οι δεσμοί τους να έχουν τις σωστές τιμές και η List να δείχνει πάντα στον πρώτο κόμβο. 74

75 Παράδειγμα -2- Για παράδειγμα, ο πρώτος κόμβος μπορεί να βρίσκεται στη θέση 7, ο δεύτερος στη θέση 3 και ο τρίτος στη θέση 6, όπως φαίνεται στο παρακάτω σχήμα. List=7. Στη θέση Node[7].Data βρίσκεται το αλφαριθμητικό Ελένη και στη θέση Node[7].Next βρίσκεται η τιμή 3. Δεύτερος κόμβος στη θέση Node[3].Data βρίσκεται το αλφαριθμητικό Μαρία και στη θέση Node[3].Next η τιμή 6. Τρίτο κόμβος Node[6].Data=Φωτεινή και Node[6].Next=0, πρόκειται για τον τελευταίο κόμβο που δεν έχει επόμενο και γι' αυτό έχει μηδενικό δείκτη. 75

76 Διάσχιση της λίστας Για να διασχίσουμε τη λίστα και να εμφανίσουμε όλα τα ονόματα με τη σειρά, βρίσκουμε τη θέση του πρώτου κόμβου χρησιμοποιώντας το δείκτη List: List=7, το πρώτο στοιχείο της λίστας είναι το Node[7].Data και εμφανίζεται το όνομα Ελένη. Ακολουθώντας το δεσμό του κόμβου αυτού βρίσκουμε ότι το επόμενο στοιχείο βρίσκεται στη θέση Node[7].Next=3, δηλαδή είναι το στοιχείο Node[3].Data=Μαρία. Το επόμενο στοιχείο της λίστας βρίσκεται στη θέση Node[3].Next=6 και είναι το όνομα Node[6].Data=Φωτεινή. Η τιμή 0 για το Node[6].Next δείχνει ότι αυτό το στοιχείο είναι το τελευταίο της λίστας. 76

77 Παράδειγμα ( συνέχεια) Έστω ότι θέλουμε να εισαγάγουμε το όνομα Στέλλα μετά από το όνομα Μαρία. Πρώτα πρέπει να αποκτήσουμε ένα νέο κόμβο από τους 7 που είναι διαθέσιμοι. Υποθέτουμε ότι έχουμε διαθέσιμη μια συνάρτηση GetNode η οποία μας επιστρέφει την τιμή 9 ως κενή θέση για το νέο στοιχείο. Σύμφωνα, λοιπόν, με τη διαδικασία εισαγωγής έχουμε: Node[9].Data='Στέλλα Node[9].Next=6 Node[3].Next=9 και ο πίνακας Node είναι τώρα ο διπλανός: 77

78 Δεξαμενή διαθέσιμων κόμβων -1- Τα στοιχεία του πίνακα Node είναι δύο ειδών: σε κάποιες θέσεις υπάρχουν αποθηκευμένα στοιχεία της λίστας, ενώ οι υπόλοιπες είναι κενές και αποτελούν τις ελεύθερες θέσεις για εισαγωγή νέων στοιχείων. Η οργάνωση των κόμβων που περιέχουν στοιχεία έχει περιγραφεί παραπάνω, μένει, λοιπόν, να περιγράψουμε τον τρόπο οργάνωσης της δεξαμενής των διαθέσιμων κόμβων. 78

79 Δεξαμενή διαθέσιμων κόμβων -2- Η δεξαμενή μπορεί να οργανωθεί σαν μια ΣΛ. Αρχικά όλοι οι κόμβοι είναι διαθέσιμοι, οπότε πρέπει να συνδεθούν μεταξύ τους για να σχηματίσουν τη δεξαμενή. Για να γίνει αυτό μπορούμε να θέσουμε ως πρώτο κόμβο αυτόν που βρίσκεται στην πρώτη θέση, ως δεύτερο κόμβο αυτόν που βρίσκεται στη δεύτερη θέση, κ.ο.κ., κι επομένως, ο πρώτος κόμβος δείχνει στο δεύτερο, ο δεύτερος στον τρίτο, κ.ο.κ. και ο τελευταίος θα έχει μηδενικό δείκτη. Τέλος, ένας δείκτης FreePtr θα έχει τιμή 1 για να δείχνει στον πρώτο κόμβο. 79

80 Αρχικοποίηση της δεξαμενής Ο πίνακας Node θα είναι αρχικά: Η κλήση GetNode(TempPtr) επιστρέφει τη θέση ενός διαθέσιμου κόμβου θέτοντας TempPtr=FreePtr και διαγράφει αυτόν από τη λίστα των διαθέσιμων κόμβων θέτοντας FreePtr=Node[FreePtr].Next. 80

81 Εισαγωγή στοιχείου -1- Αν το πρώτο στοιχείο που πρόκειται να εισαχθεί είναι το όνομα Κατερίνα θα αποθηκευτεί στην πρώτη θέση του πίνακα Node, αφού FreePtr=1. Η μεταβλητή List θα έχει τιμή 1 και η FreePtr θα πάρει τώρα την τιμή 2, όπως φαίνεται παρακάτω: 81

82 Εισαγωγή στοιχείου -2- Αν το επόμενο όνομα που θα εισαχθεί είναι το Ειρήνη, τότε θα τοποθετηθεί στην δεύτερη θέση, γιατί η τιμή της FreePtr είναι τώρα 2. Στη συνέχεια η FreePtr θα γίνει ίση με 3 και, αν μας ενδιαφέρει τα ονόματα να είναι με αλφαβητική σειρά, τότε η List θα πάρει την τιμή 2, η Node[2].Next την τιμή 1 και η Node[1].Next την τιμή 0: 82

83 Εισαγωγή στοιχείου -3- Αν τώρα θέλουμε να εισαγάγουμε το όνομα Μαρία, τότε θα τοποθετηθεί στη θέση FreePtr=3, η FreePtr θα γίνει ίση με 4, η Node[1].Next θα πάρει την τιμή 3 και η Node[3].Next θα είναι μηδενική: 83

84 Διαγραφή κόμβου Όταν διαγράφουμε έναν κόμβο, τότε αυτός πρέπει να επιστρέψει στη δεξαμενή των διαθέσιμων κόμβων με μια διαδικασία ReleaseNode. Η κλήση ReleaseNode(TempPtr) εισάγει τον κόμβο στον οποίο δείχνει η TempPtr στην αρχή της λίστας των διαθέσιμων κόμβων θέτοντας FreePtr=TempPtr. 84

85 Διαγραφή κόμβου -1- Όταν διαγράφουμε έναν κόμβο, τότε αυτός πρέπει να επιστρέψει στη δεξαμενή των διαθέσιμων κόμβων με μια διαδικασία ReleaseNode. Η κλήση ReleaseNode(TempPtr) εισάγει τον κόμβο στον οποίο δείχνει η TempPtr στην αρχή της λίστας των διαθέσιμων κόμβων θέτοντας FreePtr=TempPtr. 85

86 Διαγραφή κόμβου -2- Αν, για παράδειγμα, θέλουμε να διαγράψουμε το στοιχείο Κατερίνα, τότε θέτουμε Node[1].Next=FreePtr και FreePtr=1. Ο πίνακας Node είναι τώρα όπως φαίνεται δεξιά: 86

87 Διαγραφή κόμβου -3- Εδώ πρέπει να σημειωθεί ότι δεν είναι απαραίτητο να διαγράψουμε πραγματικά τη λέξη Κατερίνα από τον κόμβο, γιατί αλλάζοντας το δεσμό του προηγούμενου κόμβου, αφαιρεί λογικά τον κόμβο από την συνδεδεμένη λίστα. Το αλφαριθμητικό Κατερίνα θα διαγραφεί πραγματικά όταν θα αποθηκευτεί στη θέση αυτή ένα άλλο αλφαριθμητικό. 87

88 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -1- // Filename L_ListADT.h #define NumberOfNodes 50 /*μέγεθος της δεξαμενής κόμβων (λίστας*/ #define NilValue 0 /*ειδική μηδενική τιμή, δείχνει το τέλος της Σ.Λ*/ typedef int ListElementType; /*ο τύπος των στοιχείων της ΣΛ*/ typedef int ListPointer; /*ο τύπος των δεικτών*/ 88

89 Πακέτο για τον ΑΤΔ Συνδεδεμένη typedef struct { ListElementType Data; ListPointer Next; } NodeType; typedef enum { FALSE, TRUE } boolean; Λίστα με πίνακα -2-89

90 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -3- void InitializeStoragePool(NodeType Node[ ], ListPointer *FreePtr); void CreateLList(ListPointer *List); boolean EmptyLList(ListPointer List); boolean FullLList(ListPointer FreePtr); void GetNode(ListPointer *P, ListPointer *FreePtr, NodeType Node[ ]); void ReleaseNode(NodeType Node[ ], ListPointer P, ListPointer *FreePtr); 90

91 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -4- void Insert(ListPointer *List, NodeType Node[ ], ListPointer *FreePtr, ListPointer PredPtr, ListElementType Item); void Delete(ListPointer *List, NodeType Node[], ListPointer *FreePtr, ListPointer PredPtr); void TraverseLinked(ListPointer List, NodeType Node[ ]); 91

92 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -5- void InitializeStoragePool(NodeType Node[ ], ListPointer *FreePtr); /*Δέχεται: Τον πίνακα Node και τον δείκτη FreePtr που δείχνει στον πρώτο διαθέσιμο κόμβο. Λειτουργία: Αρχικοποιεί τον πίνακα Node ως συνδεδεμένη λίστα συνδέοντας μεταξύ τους διαδοχικές εγγραφές του πίνακα, και αρχικοποιεί τον δείκτη FreePtr. Επιστρέφει: Τον τροποποιημένο πίνακα Node και τον δείκτη FreePtr του πρώτου διαθέσιμου κόμβου.*/ 92

93 { } Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -6- int i; for (i=1; I < NumberOfNodes; i++) { Node[i].Next = i+1; Node[i].Data = -1; /* δεν είναι αναγκαίο η απόδοση αρχικής τιμής στο πεδίο των δεδομένων */ } Node[NumberOfNodes].Next = NilValue ; Node[NumberOfNodes].Data = -1; *FreePtr = 1; 93

94 { } Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -7- int i; for (i=1; I < NumberOfNodes; i++) { Node[i].Next = i+1; Node[i].Data = -1; /* δεν είναι αναγκαίο η απόδοση αρχικής τιμής στο πεδίο των δεδομένων */ } Node[NumberOfNodes].Next = NilValue ; Node[NumberOfNodes].Data = -1; *FreePtr = 1; 94

95 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -8- void CreateLList(ListPointer *List) /*Λειτουργία: Δημιουργεί μια κενή συνδεδεμένη λίστα. Επιστρέφει: Έναν (μηδενικό) δείκτη που δείχνει σε κενή ΣΛ.*/ { *List = NilValue; } 95

96 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -9- boolean EmptyLList(ListPointer List); /*Δέχεται: Έναν δείκτη List που δείχνει στο 1 ο στοιχείο της συνδεδεμένης λίστας. Λειτουργία: Ελέγχει αν η συνδεδεμένη λίστα είναι κενή. Επιστρέφει: TRUE αν η συνδεδεμένη λίστα είναι κενή και FALSE διαφορετικά.*/ { return (List == NilValue); } 96

97 boolean FullLList(ListPointer FreePtr) /* Δέχεται: Έναν δείκτη FreePtr που δείχνει σε μια συνδεδεμένη λίστα με διαθέσιμους κόμβους. Λειτουργία: Ελέγχει αν η συνδεδεμένη λίστα είναι γεμάτη. Επιστρέφει: TRUE αν η συνδεδεμένη λίστα είναι γεμάτη και FALSE διαφορετικά.*/ { } Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -10- return (FreePtr == NilValue); 97

98 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -11- void GetNode(ListPointer *P, ListPointer *FreePtr, NodeType Node[ ]) /*Δέχεται: Τον πίνακα Node με τα στοιχεία της ΣΛ και τους διαθέσιμους κόμβους και τον δείκτη FreePtr. Λειτουργία: Αποκτά τον 1ο "ελεύθερο" κόμβο. Επιστρέφει: Τον δείκτη P πο δείχνει στο διαθέσιμο κόμβο και τον τροποποιημένο δείκτη FreePtr που δεικτοδοτεί στο 1 ο (νέο) διαθέσιμο κόμβο.*/ 98

99 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -12- { } *P = *FreePtr; if (!FullLList(*FreePtr)) *FreePtr = Node[*FreePtr].Next; 99

100 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -13- void Insert(ListPointer *List, NodeType Node[ ], ListPointer *FreePtr, ListPointer PredPtr, ListElementType Item); /*Δέχεται: Μια συνδεδεμένη λίστα (δείκτη List προς το 1 ο στοιχείο της ΣΛ, τον πίνακα Node με τα στοιχεία της ΣΛ), τον δείκτη PredPtr και ένα στοιχείο Item. Λειτουργία: Εισάγει στη συνδεδεμένη λίστα, αν δεν είναι γεμάτη, το στοιχείο Item μετά από τον κόμβο στον οποίο δείχνει ο δείκτης PredPtr. Επιστρέφει: Την τροποποιημένη συνδεδεμένη λίστα: δείκτη List προς το 1 ο στοιχείο της ΣΛ, τον τροποποιημένο πίνακα Node και τον δείκτη FreePtr προς το 1 ο διαθέσιμο κόμβο Εξοδος: Μήνυμα γεμάτης λίστας, αν η συνδεδεμένη λίστα είναι γεμάτη.*/ 100

101 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -14- { ListPointer TempPtr; // η GetNode επιστρέφει τη θέση TempPtr που θα αποθηκευθεί το στοιχείο GetNode(&TempPtr, FreePtr, Node); if (!FullLList(TempPtr)) { if (PredPtr == NilValue) { Node[TempPtr].Data =Item; Node[TempPtr].Next =*List; *List =TempPtr; } 101

102 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -15- else { Node[TempPtr].Data = Item; Node[TempPtr].Next = Node[PredPtr].Next; Node[PredPtr].Next = TempPtr; } } else printf("full List...\n"); } 102

103 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -16- void Delete(ListPointer *List, NodeType Node[ ], ListPointer *FreePtr, ListPointer PredPtr); /*Δέχεται: Μια συνδεδεμένη λίστα (δείκτη List προς το 1ο στοιχείο της ΣΛ, τον πίνακα Node με τα στοιχεία της ΣΛ), και τον δείκτη PredPtr που δείχνει στον προηγούμενο κόμβο από αυτόν που θα διαγραφεί. Λειτουργία: Διαγράφει από τη συνδεδεμένη λίστα, αν δεν είναι κενή, τον επόμενο κόμβο από αυτόν στον οποίο δείχνει ο PredPtr. Επιστρέφει: Την τροποποιημένη λίστα και το δείκτη FreePtr προς το 1ο διαθέσιμο κόμβο (θέση του στοιχείου που διαγράφτηκε) Έξοδος: Μήνυμα κενής λίστας, αν η συνδεδεμένη λίστα είναι κενή.*/ 103

104 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -17- { ListPointer TempPtr ; if (!EmptyLList(*List)) { if (PredPtr == NilValue) { TempPtr =*List; *List = Node[TempPtr].Next; } 104

105 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -18- else { TempPtr = Node[PredPtr].Next; Node[PredPtr].Next = Node[TempPtr].Next; } ReleaseNode(Node, TempPtr, &(*FreePtr)); } else printf("empty List...\n"); } 105

106 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -19- void ReleaseNode(NodeType Node[ ], ListPointer P, ListPointer *FreePtr); /*Δέχεται: Τον πίνακα Node, που αναπαριστά τα στοιχεία της ΣΛ και τη δεξαμενή των διαθέσιμων κόμβων, και έναν δείκτη P. Λειτουργία: Επιστρέφει στη δεξαμενή τον κόμβο στον οποίο δείχνει ο P. Επιστρέφει: Τον τροποποιημένο πίνακα Node και τον δείκτη P.*/ 106

107 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -20- { } Node[P].Next =*FreePtr; *FreePtr = P; Node[P].Data = -1; 107

108 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -21- void TraverseLinked(ListPointer List, NodeType Node[ ]); /*Δέχεται: Μια συνδεδεμένη λίστα (δείκτη List προς το 1ο στοιχείο της ΣΛ, τον πίνακα Node με τα στοιχεία της ΣΛ). Λειτουργία: Κάνει διάσχιση της συνδεδεμένης λίστας, αν δεν είναι κενή. Έξοδος: Εξαρτάται από την επεξεργασία.*/ 108

109 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -21- { ListPointer CurrPtr; if (!EmptyLList(List)) { CurrPtr =List; while (CurrPtr!= NilValue) { printf("(%d, %d, %d) ", CurrPtr,Node[CurrPtr].Data, Node[CurrPtr].Next); CurrPtr = Node[CurrPtr].Next; } 109

110 Πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα με πίνακα -22- } printf("\n"); } else printf("empty List...\n"); 110

111 Τέλος Ενότητας

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 13-1 Περιεχόμενο

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

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

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ταξινοµηµένες Λίστες µε δυναµική δέσµευση µνήµης Αναδροµκές συναρτήσεις ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 1 Λίστες

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

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

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

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

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εισαγωγή, εύρεση, διαγραφή) Ευθύγραμμες Διπλά Συνδεδεμένες Λίστες

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

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

Διαδικαστικός Προγραμματισμός Διαδικαστικός Προγραμματισμός Ενότητα 8: Παραδείγματα με μονοδιάστατους πίνακες, συναρτήσεις, δείκτες, πέρασμα παραμέτρων με αναφορά Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

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

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

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

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

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

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 1 / 10 Δομές δεδομένων Ορισμός:

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

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

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

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

Δομές Δεδομένων. Ενότητα 9: Τα ΔΔΑ ως Αναδρομικές Δομές Δεδομένων-Εφαρμογή Δυαδικών Δέντρων: Κωδικοί Huffman. Καθηγήτρια Μαρία Σατρατζέμη

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

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

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

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990, ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Τμήμα Πληροφορικής & Τηλεπικοινωνιών Μια σημείωση από τον Α. Δελή για το άρθρο: W. Pugh, Skip Lists: A Probabilistic Alternative to Balanced Trees, Comms of the ACM, 33(), June 10,

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

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

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

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

Φροντιστήριο 4 Σκελετοί Λύσεων Φροντιστήριο 4 Σκελετοί Λύσεων Άσκηση 1 Υποθέτουμε πως οι λίστες είναι υλοποιημένες χρησιμοποιώντας τις πιο κάτω δομές. typedef struct Node{ type data; struct node *next; node; node *top; list; Υλοποιούμε

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 3: Ασυμπτωτικός συμβολισμός Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

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

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

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

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

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

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη

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

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ Μεταγλωττιστές Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομές Δεδομένων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε μία αναδρομική συνάρτηση που θα παίρνει ως παράμετρο ένα δείκτη στη ρίζα ενός δυαδικού δένδρου και θα επιστρέφει το βαθμό του

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

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

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 15-1 Περιεχόμενο

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 6α: Αναζήτηση Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commos. Για εκπαιδευτικό

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

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

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

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

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

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

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

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Πληροφορική II Ενότητα 2 : Αλγόριθμοι Δρ. Γκόγκος Χρήστος 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου Τμήμα Χρηματοοικονομικής & Ελεγκτικής

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

Υπολογιστικά Συστήματα

Υπολογιστικά Συστήματα Υπολογιστικά Συστήματα Ενότητα 3: Βασικά στοιχεία της γλώσσας προγραμματισμού Visual Basic for Applications (VBA) Σαπρίκης Ευάγγελος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

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

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

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

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

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

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

Εργαστήριο 5. Εαρινό Εξάμηνο Τομέας Υλικού και Αρχιτεκτονικής Υπολογιστών ΗΥ134 - Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 Εργαστήριο 5 Εαρινό Εξάμηνο 2012-2013 Στό χόι τόυ εργαστηρι όυ Χρήση στοίβας Αναδρομή Δομές δεδομένων Δυναμική

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

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

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

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

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

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

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

Πληροφορική. Εργαστηριακή Ενότητα 1 η : Εισαγωγή στα Λογιστικά Φύλλα με το MS Excel. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

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

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Σκοπός του μαθήματος Σκοπός του παρόντος μαθήματος είναι να μάθετε να κάνετε εισαγωγή δεδομένων σε πίνακες και περαιτέρω επεξεργασία

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

Πληροφορική. Εργαστηριακή Ενότητα 3 η : Επεξεργασία Κελιών Γραμμών & Στηλών. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

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

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

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

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΝΟΜΑΤΕΠΩΝΥΜΟ: AEM: ΜΕΡΟΣ Α: ΕΡΩΤΗΣΕΙΣ ΠΟΛΛΑΠΛΩΝ ΕΠΙΛΟΓΩΝ [15 µονάδες] ΣΗΜΑΝΤΙΚΕΣ ΔΙΕΥΚΡΙΝΙΣΕΙΣ: Επιλέξτε ΜΙΑ σωστή απάντηση για κάθε ερώτηση. Λάθος απαντήσεις βαθµολογούνται αρνητικά Σε ερωτήσεις που

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

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

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

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

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 3: Πίνακες, Δομές και Δυναμική Διαχείριση Μνήμης Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Δομημένος Προγραμματισμός Ενότητα 5(α): Εργαστηριακή Άσκηση Αναπλ. Καθηγητής: Κωνσταντίνος Στεργίου Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Python scripts Ένα πρόγραμμα στην Python (συχνά αποκαλείται script) αποτελείται από μία ακολουθία ορισμών και εντολών. H ακολουθία των ορισμών και

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

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων Ι Σύνολο- Περιεχόμενο Μαθήματος

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

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

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΔΕΔΟΜΕΝΑ ΑΛΓΟΡΙΘΜΟΙ -ΠΛΗΡΟΦΟΡΙΑ: Δεδομένα: Αναπαράσταση της Πραγματικότητας Μπορούν να γίνουν αντιληπτά με μια από τις αισθήσεις μας Πληροφορία: Προκύπτει από

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

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

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις Άσκηση 1 Έστω ότι μια βιβλιοθήκη σας παρέχει πρόσβαση σε στοίβες ακεραίων. Η βιβλιοθήκη σας επιτρέπει να ορίσετε μια στοίβα και να καλέσετε τις 5 βασικές

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

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

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

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

Αλγόριθμοι Αναζήτησης

Αλγόριθμοι Αναζήτησης Αλγόριθμοι Αναζήτησης ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

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

Μαθηματικά. Ενότητα 1: Οι Αριθμοί. Σαριαννίδης Νικόλαος Τμήμα Λογιστικής και Χρηματοοικονομικής

Μαθηματικά. Ενότητα 1: Οι Αριθμοί. Σαριαννίδης Νικόλαος Τμήμα Λογιστικής και Χρηματοοικονομικής Μαθηματικά Ενότητα 1: Οι Αριθμοί Σαριαννίδης Νικόλαος Τμήμα Λογιστικής και Χρηματοοικονομικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό,

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

Συστήματα Γνώσης. Πρακτικό Κομμάτι Μαθήματος Πρότυπα Γεγονότων. Νίκος Βασιλειάδης, Αναπλ. Καθηγητής Τμήμα Πληροφορικής

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

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

Προγραμματισμός H/Y Ενότητα 6: Δομές (structures) Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός H/Y Ενότητα 6: Δομές (structures) Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) Προγραμματισμός H/Y Ενότητα 6: Δομές (structures) Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative

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

Μαθηματικά. Ενότητα 3: Εξισώσεις και Ανισώσεις 1 ου βαθμού. Σαριαννίδης Νικόλαος Τμήμα Λογιστικής και Χρηματοοικονομικής

Μαθηματικά. Ενότητα 3: Εξισώσεις και Ανισώσεις 1 ου βαθμού. Σαριαννίδης Νικόλαος Τμήμα Λογιστικής και Χρηματοοικονομικής Μαθηματικά Ενότητα 3: Εξισώσεις και Ανισώσεις 1 ου βαθμού Σαριαννίδης Νικόλαος Τμήμα Λογιστικής και Χρηματοοικονομικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

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

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

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

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

Στοιχειώδεις Δομές Δεδομένων Στοιχειώδεις Δομές Δεδομένων Τύποι δεδομένων στη Java Ακέραιοι (int, long) Αριθμοί κινητής υποδιαστολής (float, double) Χαρακτήρες (char) Δυαδικοί (boolean) Από τους παραπάνω μπορούμε να φτιάξουμε σύνθετους

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

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

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

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

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

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

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

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

Οι δομές δεδομένων στοίβα και ουρά

Οι δομές δεδομένων στοίβα και ουρά Καθηγητής Πληροφορικής Απαγορεύεται η αναπαραγωγή των σημειώσεων χωρίς αναφορά στην πηγή Βίντεο: https://youtu.be/j8petzztqty Οι δομές δεδομένων στοίβα και ουρά Εισαγωγή Στα πλαίσια του μαθήματος της Ανάπτυξης

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

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Ενότητα 5: MPI_Reduce Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

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

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

Διαδικαστικός Προγραμματισμός Διαδικαστικός Προγραμματισμός Ενότητα 3: Εντολές ελέγχου επανάληψη Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό,

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

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

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

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

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 1

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 1 Προγραμματισμός Ηλεκτρονικών Υπολογιστών 1 Ενότητα 3: Άλγεβρα Βοole και Λογικές Πράξεις Δρ. Φραγκούλης Γεώργιος Τμήμα Ηλεκτρολογίας Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

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

Επιµέλεια Θοδωρής Πιερράτος

Επιµέλεια Θοδωρής Πιερράτος εδοµένα οµές δεδοµένων και αλγόριθµοι Τα δεδοµένα είναι ακατέργαστα γεγονότα. Η συλλογή των ακατέργαστων δεδοµένων και ο συσχετισµός τους δίνει ως αποτέλεσµα την πληροφορία. Η µέτρηση, η κωδικοποίηση,

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

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

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή υναµική έσµευση Μνήµης (συν.) Στην ενότητα αυτή θα µελετηθούν: Μια εφαρµογή συνδεδεµένων λιστών ιπλά συνδεδεµένες Λίστες ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Εφαρµογή Ζητούµενο: Πρόγραµµα που παίρνει σαν

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

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

Αναδρομικοί Αλγόριθμοι Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας ένα ή περισσότερα στιγμιότυπα του ίδιου προβλήματος. Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας

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

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους Εισαγωγή στους Αλγορίθμους Ενότητα 3η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Απλοί Αλγόριθμοι & Δομές Δεδομένων Δύο Απλές

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

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

Προγραμματισμός Διαδικτύου 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Προγραμματισμός Διαδικτύου Ενότητα 9 : Δυναμικοί τύπου δεδομένων Ιωάννης Τσούλος 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Τμήμα Μηχανικών Πληροφορικής

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

Υπολογιστικά & Διακριτά Μαθηματικά

Υπολογιστικά & Διακριτά Μαθηματικά Υπολογιστικά & Διακριτά Μαθηματικά Ενότητα 2:Στοιχεία Μαθηματικής Λογικής Στεφανίδης Γεώργιος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό,

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Προγραμματισμός Η/Υ Ενότητα 3 η : Η Γλώσσα Προγραμματισμού VB.NET (2 ο Μέρος) Ι. Ψαρομήλιγκος Χ. Κυτάγιας Τμήμα Λογιστικής & Χρηματοοικονομικής

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: Τοπικές vs Καθολικές Μεταβλητές ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: Τοπικές vs Καθολικές Μεταβλητές ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη) ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ενότητα: Τοπικές vs Καθολικές Μεταβλητές ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη) Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

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

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

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

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

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:06 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων

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

Εισαγωγή στην Επιστήμη των Υπολογιστών

Εισαγωγή στην Επιστήμη των Υπολογιστών Εισαγωγή στην Επιστήμη των Υπολογιστών Ενότητα 2: Λογικές πράξεις, 2ΔΩ Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης Διδάσκων: Θεόδωρος Τσιλικρίδης Μαθησιακοί Στόχοι Η Ενότητα 2 διαπραγματεύεται θέματα που αφορούν

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

Ανοικτό Ψηφιακό Μάθημα για την κατάρτιση του προσωπικού υποστήριξης ανάπτυξης ψηφιακών μαθημάτων

Ανοικτό Ψηφιακό Μάθημα για την κατάρτιση του προσωπικού υποστήριξης ανάπτυξης ψηφιακών μαθημάτων Ανοικτό Ψηφιακό Μάθημα για την κατάρτιση του προσωπικού υποστήριξης ανάπτυξης ψηφιακών μαθημάτων Ενότητα 5: Δημιουργία Μαθήματος & Εργαλεία Διαχείρισης Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

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

Εισαγωγή στα Πληροφοριακά Συστήματα

Εισαγωγή στα Πληροφοριακά Συστήματα Εισαγωγή στα Πληροφοριακά Συστήματα Ενότητα 3: Η έννοια της ΠΛΗΡΟΦΟΡΙΑΣ - INFORMATION Κωνσταντίνος Ταραμπάνης Τμήμα Οργάνωσης & Διοίκησης Επιχειρήσεων ΕΙΣΑΓΩΓΗ ΣΤΑ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Κωνσταντίνος Ταραμπάνης

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

Ενότητα 7 Ουρές Προτεραιότητας

Ενότητα 7 Ουρές Προτεραιότητας Ενότητα Ουρές Προτεραιότητας ΗΥ4 - Παναγιώτα Φατούρου Ουρές Προτεραιότητας Θεωρούµε ένα χώρο κλειδιών U και έστω ότι µε κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type). Έστω

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

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

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων Κατ οίκον Εργασία 2 Σκελετοί Λύσεων Άσκηση 1 Υπάρχουν διάφοροι τρόποι για να υλοποιήσουμε πράξεις ουράς για την προτεινόμενη εγγραφή. To πρόβλημα που δημιουργείται με οποιαδήποτε από αυτές είναι ότι είναι

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 231: Δομές Δεδομένων και Αλγόριθμοι Εαρινό Εξάμηνο 2013 ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση Διδάσκων Καθηγητής: Παναγιώτης Ανδρέου

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

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

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

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

Ειδικά Θέματα Προγραμματισμού

Ειδικά Θέματα Προγραμματισμού Ειδικά Θέματα Προγραμματισμού Ενότητα 3: Τύποι Δεδομένων - Τελεστές Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

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

Εισαγωγή στους Αλγορίθμους Ενότητα 3η

Εισαγωγή στους Αλγορίθμους Ενότητα 3η Εισαγωγή στους Αλγορίθμους Ενότητα 3η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

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

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 1: Εισαγωγή Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

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

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

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

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

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 6: Διαδικασίες, Σωρός, Διαφανείς συναρτήσεις Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

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

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

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

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

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

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

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

Προγραμματισμός Διαδικτύου 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Προγραμματισμός Διαδικτύου Ενότητα 7 : Αρχεία στην Java Ιωάννης Τσούλος 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου Τμήμα Μηχανικών Πληροφορικής

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

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

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

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

Εισαγωγή στους Υπολογιστές

Εισαγωγή στους Υπολογιστές Εισαγωγή στους Υπολογιστές Ενότητα #2: Αναπαράσταση δεδομένων Αβεβαιότητα και Ακρίβεια Καθ. Δημήτρης Ματαράς Πολυτεχνική Σχολή Τμήμα Χημικών Μηχανικών Αναπαράσταση δεδομένων (Data Representation), Αβεβαιότητα

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

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

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

Υπολογιστικά & Διακριτά Μαθηματικά

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

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

Πληροφορική II. Ενότητα 5 : Δομές Δεδομένων και αφηρημένοι. τύποι δεδομένων. Δρ. Γκόγκος Χρήστος

Πληροφορική II. Ενότητα 5 : Δομές Δεδομένων και αφηρημένοι. τύποι δεδομένων. Δρ. Γκόγκος Χρήστος 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Πληροφορική II Ενότητα 5 : Δομές Δεδομένων και αφηρημένοι τύποι δεδομένων Δρ. Γκόγκος Χρήστος 2 Ανοιχτά Ακαδημαϊκά Τμήμα Χρηματοοικονομικής

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