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

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

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

Transcript

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

2 Σκοποί ενότητας Ορίζει τον ΑΤΔ Λίστα Να αναδείξει το πρόβλημα της μετακίνησης στοιχείων με τον σχεδιασμό με πίνακα Να εισάγει την σχεδιαστική επιλογή με δυναμικές συνδεδεμένες δομές με struct+pointers. Να αναδείξει εναλλακτικούς σχεδιασμούς και αντίστοιχες υλοποιήσεις Να εισάγει την σχεδιαστική επιλογή με στατικές συνδεδεμένες δομές με πίνακα. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 2

3 Περιεχόμενα ενότητας Ορισμός και χρήσεις ΑΤΔ Λίστας Σχεδιασμός και υλοποίηση με πίνακα Σχεδιαστική Επιλογή με δυναμικές συνδεδεμένες δομές με struct+pointers Εναλλακτικοί σχεδιασμοί (με κεφαλή, διπλά συνδεδεμένη, κυκλική, με ένδειξη τέλους, ταξινομημένη) και υλοποιήσεις Σχεδιαστική Επιλογή συνδεδεμένης δομής με πίνακα. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 3

4 Ενότητα 4 ΑΤΔ Λίστα

5 ΛΙΣΤΕΣ Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα Υλοποίηση με δείκτες (pointers) Υλοποίηση με πίνακα Εφαρμογές και Χρήση Λιστών ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 5

6 Λίστες (Lists) Δεδομένα Ο ΑΤΔ λίστα είναι μια πεπερασμένη συλλογή στοιχείων του ίδιου τύπου Τ με γραμμική δομή (ολική διάταξη). ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 6

7 Βασικές Πράξεις Δημιουργία Καταστροφή Κενή Εισαγωγή Διαγραφή Περιεχόμενο (τιμή στοιχείου) Επόμενο, προηγούμενο στοιχείο Αναζήτηση ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 7

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

9 Σχεδιασμός a 1 a 2 a 3 a n A[0] A[1] A[2]... A[n-1] A[plithos-1] Η λογική διάταξη των στοιχείων της λίστας αντιστοιχεί τη φυσική διάταξη των στοιχείων του πίνακα. Eκτός από την αποθήκευση των στοιχείων της λίστας στον πίνακα είναι αναγκαίο να χρησιμοποιηθεί και μια βοηθητική μεταβλητή megethos που θα διατηρεί το εκάστοτε πλήθος των στοιχείων της λίστας. Οδηγούμαστε λοιπόν στις δηλώσεις : ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 9

10 #define plithos... typedef... typos_stoixeiou; typedef struct { typos_stoixeiou typos_pinaka[plithos] int megethos; typos_listas; typos_listas lista; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 10

11 Η υλοποίηση των βασικών πράξεων για τον ΑΤΔ ακολουθιακή λίστα είναι εύκολη και ορισμένες από αυτές παρουσιάζονται παρακάτω: void dimiourgia (typos_listas *lista) /* Προ : Καμμία Μετα : Δημιουργεί μια κενή λίστα/* { lista->megethos = 0; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 11

12 int keni(typos_listas lista) /* Προ : Δημιουργία μιας λίστας. Μετα : Ελέγχει αν μια λίστα είναι κενή*/ { return (lista.megethos == 0 ); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 12

13 int epomenos(typos_listas lista, int thesi){ /* Προ : Δημιουργία λίστας. Mετά: Αν είναι έγκυρη η Thesi eπιστρέφει την επόμενη θέση της thesi αλλιώς -1. */ if ((thesi<0) (thesi>lista.megethos 1)){ return (-1); else return (++thesi); Παρατηρήστε την διπλή χρήση της τιμής επιστροφής της συνάρτησης. Εφόσον δεν έχουν νόημα οι αρνητικές τιμές σε θέση πίνακα, χρησιμοποιούμε την αρνητική τιμή -1 για ένδειξη λάθους. Εναλλακτικός τρόπος αντί για σημαία. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 13

14 thesi megethos Εισαγωγή ?...? megethos ?...? Μόλις δημιουργηθεί ο χώρος αυτός τότε τοποθετείται το νέο στοιχείο της λίστας. Η υλοποίηση της διαδικασίας της εισαγωγής ενός νέου στοιχείου στη λίστα παρουσιάζεται στη συνέχεια. Όπως για την ουρά και τη στοίβα, έτσι και για τη λίστα θα πρέπει να ελεγχθεί πρώτα αν η λίστα είναι γεμάτη. Πολυπλοκότητα : O(n) ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 14

15 int eisagogi_meta(typos_listas *lista, typos_stoixeiou stoixeio, int thesi, int *full){ /* Προ : Δημιουργία της λίστας. Mετά: Εισάγεται το στοιχείο stoixeio μετά την θέση thesi */ int i; *full = 0; if (thesi<0) (thesi>lista->megethos-1) return(-1); else if (lista->megethos == plithos) *full =1; else {/* εισαγωγή είναι δυνατή. Mετακίνηση στοιχείων μια θέση δεξιά από την thesi*/ for (i = lista->megethos-1 ; i >= thesi+1 ; i--) lista->pinakas[i+1] = lista->pinakas[i]; lista->pinakas[thesi+1]=stoixeio; lista->megethos++; return(0); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 15

16 Διαγραφή Στοιχείου 54 (Μετακινήσεις) thesi megethos ?...? ?...? ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 16

17 int diagrafi(typos_listas *lista, int thesi) /* Προ : Δημιουργία της λίστας. Mετά: Διαγράφεται το στοιχείο της *lista στη θέση thesi. */ { int i; if ((thesi<0) (thesi>lista->megethos -1)) return(-1) else if (keni(*lista)) *empty=1; else {/* μείωση του μεγέθους της λίστας κατά 1 και αφαίρεση του κενού χώρου */ lista->megethos--; for (i=thesi; i <= lista->megethos-1 ; i++ ) lista->pinakas[i] = lista->pinakas[i+1]; return(0); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 17

18 Σχεδιαστική Επιλογή με Δυναμικές Δομές

19 Δείκτες (Pointers) και Structs Ένας βασικός «δομικός λίθος». Όλη μαζί η δομή (struct) ονομάζεται κόμβος (Node) και αποτελείται από - Το μέλος Info οποιοδήποτε τύπου, έστω InfoField. - To μέλος Link τύπου δείκτη σε Node. Info Link typedef struct NodeTag { InfoField Info; struct NodeTag *Link; NodeType; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 19

20 Απεικονίσεις Λιστών και ενδείξεις τέλους τους L: a a: b b: g g: null L L L ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 20

21 Χρησιμοποιούμε εικόνες του τύπου A Info Link Info Link Info Link Όπου NULL δηλώνει τον δείκτη που δεν δείχνει πουθενά. Ένδειξη τέλους, όχι αυτόματος τρόπος. (*NULL).x είναι σφάλμα (όχι πάντα διαγνώσιμο) Info Link NULL ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 21

22 Προσοχή σε... Lifetime-Διάρκεια Ζωής (3 κατηγορίες μνήμης): - Καθολικές στατικές μεταβλητές - Auto-Stack (τοπικές). Αυτόματη διαχείριση (μπλοκ). - Heap. Οποιοδήποτε αντικείμενο δημιουργείται με malloc ισχύει μέχρι να το αποδεσμεύσουμε με free. Η διαχείριση Heap είναι ευθύνη του προγραμματιστή. Ανακύκλωση: Όταν δεν χρειαζόμαστε άλλο τότε free. Alias-Συνώνυμα: Πολλαπλοί τρόποι αναφοράς για το ίδιο αντικείμενο στη μνήμη. Αιωρούμενοι (dangling) δείκτες: τι συμβαίνει αν ένας δείκτης δείχνει σε θέση μνήμης που δεν ισχύει; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 22

23 Συνδεδεμένη λίστα //Ο τύπος κόμβος typedef struct NodeTag { InfoField Info; struct NodeTag *Link; NodeType; Info Link // Ο τύπος δείκτη σε κόμβο typedef NodeType *NodePtr; // Η δήλωση δείκτη αρχής της λίστας NodePtr L; // πάντα χρειάζεται μια αρχή ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 23

24 Εισαγωγή σε συνδεδεμένη λίστα (4 βήματα). Περιπτώσεις:META από πού; (αρχή, μέση, τέλος) Αρχή μέση μέση τέλος L Info;Link Info;Link Info;Link Τα αρχικά βήματα 1, 2 είναι κοινά σε κάθε περίπτωση 1. Δημιουργούμε νέο κόμβο Ν NodePtr N; //δήλωση N = malloc(sizeof(nodetype)) 2. Βάζουμε τιμές στο Info του Ν Ν->Info= N Info;Link ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 24

25 Βήματα 3+4 για την σύνδεση του Ν (περιπτώσεις A, B) Α. Εισαγωγή στην αρχή (ισχύει και για κενή λίστα) 3. Τιμή στο Link του Ν N->Link=L;//Ισχύει και αν η L==Κενή(L==NULL) 4. Τον κάνουμε τον πρώτο κόμβο της λίστας. L=N; L Info;Link Info;Link Info;Link 4 N 3 Info;Link ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 25

26 Β. Εισαγωγή σε άλλη θέση (META από προδείκτη P) Info;Link Info;Link Info;Link L P 3. Τιμή στο Link του Ν N->Link = P->Link; 4. Τον ενσωματώνουμε στη λίστα P->Link = N; P L Info;Link Info;Link Info;Link 4 P 3 N ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 26

27 Αν έχουμε δείκτη Last και κάνουμε εισαγωγή στο τέλος πριν L Info;Link Info;Link Info;Link μετά L Info;Link Info;Link Info;Link Last Last N Info;Link ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 27

28 ... η Εισαγωγή στο τέλος (P==Last) Βήματα 1, 2, 3, 4 όπως πριν + 5ο 1. Δημιουργούμε νέο κόμβο NodePtr N; Ν = malloc(sizeof(nodetype)) 2. Βάζουμε τιμές στο Info του Ν Ν->Info=. 3. Τιμή στο Link του Ν N->Link = P->Link; //ή N->Link=NULL; 4. Τον ενσωματώνουμε στη λίστα ως τελευταίο P->Link = N; //ή Last->Link = N; 5. Έλεγχος και Ενημέρωση Δείκτη Last if (P==Last) Last = N; Είναι σωστό; Τι γίνεται αν ο τελευταίος είναι και ο πρώτος; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 28

29 Διαγραφή Κόμβου (με/χωρίς Last)????????? L Info;Link Info;Link Info;Link LH first last????????? Info;Link Info;Link Info;Link ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 29

30 Διαγραφή του πρώτου κόμβου typedef struct NodeTag { InfoField Info; struct NodeTag *Link; NodeType; L... T if (L!=NULL) // υπάρχουν στοιχεία? { NodeType *Τ = L; // προσωρινός δείκτης για free L = L->Link; // Νέα τιμή του L o επόμενος if (L == NULL) // διαγραφή μοναδικού κόμβου Last = NULL; // τότε αλλάζει και ο Last free(τ); // ελευθέρωσε τον κόμβο else ;// ένδειξη εντοπισμού λάθους ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 30

31 Διαγραφή άλλου κόμβου L (ΜΕΤΑ από τον προδείκτη P) Info;Link Info;Link Info;Link... P T if ((P!=NULL)&&(P->Link!=NULL))// υπάρχει επόμενο; { NodeType *T=P->Link // προσωρινός δείκτης (free) P->Link = T->Link;// Νέα τιμή του L ο επόμενος if (T == Last) // διαγραφή τελευταίου κόμβου; Last = P; free(t); // ελευθέρωσε τον κόμβο else ;// ένδειξη εντοπισμού λάθους ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 31

32 Διαγραφή τελευταίου κόμβου ΠΑΝΤΑ με προδείκτη, όχι με χρήση του Last, παρόλο που δείχνει ήδη στον τελευταίο κόμβο. first last Info;Link Info;Link Info;Link Το free(last) αφήνει έναν αιωρούμενο δείκτη και λάθος τιμή για το Last. Μπορούμε να βρούμε τον προηγούμενο δείκτη P μόνο αν περάσουμε από P=first, μέχρι P->Link==Last. first last Info;Link Info;Link......? ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 32

33 Προτείνεται 1) Πριν τον προγραμματισμό συνδεδεμένων δομών, να σχεδιάζετε εικόνες για κάθε περίπτωση. 2) Απεικονίστε στους κόμβους τις μεταβλητές και τις τιμές τους. Σχεδιάστε σε διαδοχικά βήματα τις αλλαγές των δεικτών που θέλετε να κάνετε (εισαγωγή, διαγραφή, κλπ) 3) Διατηρείτε πάντα κάποια σύνδεση. Ένα συνηθισμένο λάθος είναι να ελευθερώνεται η μνήμη πριν φτιαχτούν οι συνδέσεις. Η σειρά ενημέρωσης των συνδέσεων είναι σημαντική. 4) Ελευθερώνετε την μνήμη που δεν χρειάζεστε. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 33

34 Συνδεδεμένες Λίστες με stucts και pointers

35 Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους Κάθε στοιχείο του ΑΤΔ συνδεδεμένη λίστα (linked list) καλείται κόμβος (node) και περιέχει δύο πεδία. Στο ένα πεδίο αποθηκεύονται τα δεδομένα και Στο άλλο αποθηκεύεται η διεύθυνση του επόμενου κόμβου της λίστας. Για καλύτερη απόκρυψη θα χρησιμοποιήσουμε ΟΑ και έναν αρχικό «πληροφοριακό» κόμβο της Λίστας (Δομής εν γένει). Για κάθε λίστα, που το πρόγραμμά μας απαιτεί, δηλώνουμε ένα δείκτη ο οποίος περιέχει τη διεύθυνση του αρχικού της κόμβου. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 35

36 1 η Υλοποίηση του ΑΤΔ: μονά συνδεδεμένη λίστα με δείκτες typedef... TStoixeioyListas ; typedef struct info_node * info_deikti; //στο.h typedef struct info_node //στο.c για ΟΑ { int size; /* το μέγεθος της λίστας */ typos_deikti arxi;/*deikths ston proto komvo tis listas*/ info_node; /* o komvos plhroforias ths listas */ typedef struct typos_komvou *typos_deikti; //στο.h typedef struct typos_komvou //στο.c για ΟΑ { TStoixeioyListas dedomena; typos_deikti epomenos; // μονά συνδεδεμένη ; info_deikti lista1,lista2, ;//στο πρόγραμμα-πελάτης ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 36

37 Οι Πράξεις info_deikti LIST_dimiourgia( ); void LIST_katastrofi(info_deikti * linfo); int LIST_keni(const info_deikti linfo); void LIST_epomenos(const info_deikti linfo, typos_deikti * const p, int * const error); void LIST_proigoymenos(const info_deikti linfo, typos_deikti * const p, int * const error); void LIST_first(const info_deikti linfo, typos_deikti * const first, int * const error); void LIST_last(const info_deikti linfo, typos_deikti * const last, int * const error); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 37

38 /*prakseis prosbashs*/ void LIST_periexomeno(const info_deikti linfo, const typos_deikti p, TStoixeioyListas *val, int * const error); void LIST_allagi(const info_deikti linfo, const typos_deikti p, TStoixeioyListas stoixeio, int * const error); void LIST_diadromi(const info_deikti linfo, int * const error); void LIST_eisagogi(const info_deikti linfo, TStoixeioyListas stoixeio,typos_deikti prodeiktis, int *error); void LIST_diagrafi(const info_deikti linfo, typos_deikti *deiktis, int * const error); void LIST_anazitisi(const info_deikti linfo, TStoixeioyListas stoixeio, typos_deikti *prodeiktis, int *vrethike); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 38

39 info_deikti LIST_dimiourgia( ) {/* Pro: kamia * Meta: Dhmioyrgia kenhs syndedemenhs listas meso tis desmeusis kai arxikopoiisis tou komvou linfo pou leitourgei os komvos pliroforias kai tha sindethei me ton proto komvo pou tha eisaxthei */ info_deikti linfo; linfo = malloc(sizeof(info_node)); linfo->size = 0; linfo->arxi = NULL; return linfo; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 39

40 int LIST_keni(const info_deikti linfo) {/* Pro: Dhmioyrgia Listas * Meta: Epistrefei 1 an h lista einai kenh, diaforetika 0 */ return (linfo->arxi == NULL ); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 40

41 void LIST_epomenos(const info_deikti linfo, typos_deikti * const p, int * const error) {/* Pro: Dhmiourgia listas * Meta:Epistrefei ton epomeno komvo tou p kai sto error 0. An o p einai null tote epistrefei sto error 2 allios an den iparxei epomenos epistrefei sto error 1 */ *error = 0; if((*p)!=null) { if((*p)->epomenos!=null) *p=(*p)->epomenos; else *error=1; else *error=2; Η παράμετρος p είναι δείκτης σε μεταβλήτή τύπου δείκτη. Γιατί; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 41

42 void LIST_periexomeno(const info_deikti linfo, const typos_deikti p, TStoixeioyListas *val, int * const error) {/* Pro: O deikths p deixnei ena kombo sth lista * Meta:Epistrefei ta dedomena tou komvou tou p */ *error=0; if(p!=null) TSlist_setValue(val, p->dedomena); else *error=1; Χρησιμοποιούμε την TSlist_setValue(A,D) για να αποκρύψουμε την ανάθεση ( A = D ) για A, D οποιουδήποτε τυπου (π.χ. String). Η συνάρτηση ορίζεται στον Τύπο Στοιχείου (καλύτερος τρόπος μέσω παραμέτρου). ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 42

43 Η αλλαγή του περιεχομένου ενός κόμβου: void LIST_allagi(const info_deikti linfo, const typos_deikti p, TStoixeioyListas stoixeio, int * const error) {/* Pro: Dhmiourgia listas * Meta: Allazei ta dedomena ston komvo toy p */ *error=0; if(p!=null) TSlist_setValue(&(p->dedomena), stoixeio); else *error=1; Παρατηρήστε την παράμετρο &(p->dedomena) στην κλήση της TSlist_setValue. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 43

44 εισαγωγή και διαγραφή στοιχείου από μια συνδεδεμένη λίστα με δείκτες: Εισαγωγή μετά από τον προδείκτη prosorinos..... prodeiktis ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 44

45 void eisagogi_meta(const info_deikti linfo, TStoixeioyListas stoixeio, typos_deikti prodeiktis, int *error) {/* Pro: O prodeiktis deixnei ena kombo sth lista * Meta:O kombos me ta dedomena exei eisax8ei meta ton kombo pou deixnei o prodeiktis */ typos_deikti prosorinos; //Βήμα 1 prosorinos = malloc(sizeof(typos_komvou)); if (prosorinos == NULL) { *error=1; return; TSlist_setValue(&prosorinos->dedomena, stoixeio);//2 prosorinos->epomenos = prodeiktis->epomenos; //3 prodeiktis->epomenos = prosorinos; //4 linfo->size ++; //ενημέρωση μεγέθους ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 45

46 Εισαγωγή Πριν (χρειάζεται μόνο για εισαγωγή στην αρχή της λίστας) prosorinos. p... ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 46

47 void eisagogi_arxi(const info_deikti linfo, TStoixeioyListas stoixeio, int *error) {/* Pro: Dhmiourgia listas * Meta:O kombos me ta dedomena stoixeio exei eisax8ei sthn arxh ths listas */ typos_deikti prosorinos; //Βήμα 1 prosorinos = malloc(sizeof(typos_komvou)); if ( prosorinos == NULL ) { *error=1; return; TSlist_setValue(&prosorinos->dedomena,stoixeio); //2 prosorinos->epomenos = linfo->arxi; //3 linfo->arxi = prosorinos; //4 linfo->size ++; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 47

48 Η εισαγωγή ενός κόμβου σε οποιοδήποτε σημείο της λίστας με σύμβαση η τιμή prodeiktis==null να σημαίνει «στην αρχή». void LIST_eisagogi(const info_deikti linfo, TStoixeioyListas stoixeio, typos_deikti prodeiktis, int *error) {/* Pro: Dhmiourgia listas * Meta:Eisagetai to stoixeio meta ton prodeikti,an einai null mpainei stin arxi tis listas allios meta apo ton komvo pou deixnei*/ *error=0; if(prodeiktis==null) eisagogi_arxi(linfo, stoixeio, error); //σύμβαση else eisagogi_meta(linfo,stoixeio, prodeiktis, error); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 48

49 Διαγραφή lista.... prodeiktis prosorinos ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 49

50 void LIST_diagrafi_prwtou(const info_deikti linfo, int * const error) {/* Pro: Dhmiourgia Listas * Meta:Diagrafetai to prwto stoixeio ths listas */ typos_deikti prosorinos; *error=0; if LIST_keni(linfo) { *error=1; return; else { prosorinos = linfo->arxi ; linfo->arxi = prosorinos->epomenos; free(prosorinos); linfo-> size--; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 50

51 void LIST_diagrafi_meta(const info_deikti linfo, typos_deikti prodeiktis, int * const error) {/* Pro: Dhmiourgia Listas * Meta:Diagrafetai to stoixeio ths listas meta ton prodeiktis */ { if (prodeiktis->epomenos!=null){ *error=0; typos_deikti prosorinos; prosorinos = prodeiktis->epomenos; prodeiktis->epomenos = prosorinos->epomenos; free(prosorinos); linfo->size--; else *error=1; //ο προδείκτης είναι τελευταίος ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 51

52 void diagrafi_komvou( const info_deikti linfo, typos_deikti prodeiktis, int *error){ /* Προ : H *listaptr δεν είναι κενή και ο prodeiktis είναι ένας κόμβος της λίστας ή είναι NULL. Mετά: Aν ο prodeiktis είναι NULL τότε διαγράφτηκε το πρώτο στοιχείο. Aν ο prodeiktis είναι κόμβος της λίστας τότε διαγράφτηκε ο επόμενος κόμβος */ typos_deikti prosorinos; error = 0; if keni(linfo) *error=1; else if (prodeiktis == NULL) // Σύμβαση diagrafi_prwtou(linfo, &error); else diagrafi_meta(linfo, prodeiktis, &error); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 52

53 lista... trexon void diadromi(typos_deikti lista){ /* Προ : Έχει δημιουργηθεί μια λίστα. Mετά: Έχει διατρέξει όλους τους κόμβους μιας λίστας και έχει επεξεργαστεί τα δεδομένα κάθε κόμβου. */ typos_deikti trexon=lista; while (trexon!=null) { /* εντολές για επεξεργασία των δεδομένων */ epomenos(lista, &trexon); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 53

54 void LIST_katastrofi(info_deikti * linfo) {/* Pro: Dhmioyrgia listas * Meta:Katastrofi ths listas kai apodesmeusi sto telos kai tou komvou linfo */ typos_deikti todel,todel2; todel=(*linfo)->arxi; while(todel!=null) { todel2=todel; todel=todel->epomenos; free(todel2); (*linfo)->arxi = NULL; free(*linfo); *linfo = NULL; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 54

55 Άλλες μορφές Λιστών ίδια διεπαφή στο.h Με κεφαλή Κυκλικά Συνδεδεμένη Διπλά Συνδεδεμένη Με ένδειξη Τέλους (Last ή Tail) Πολλαπλά Συνδεδεμένες Λίστες ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 55

56 Λίστες με κεφαλή Ο κόμβος κεφαλή συνήθως δεν περιέχει τίποτα στο τμήμα των δεδομένων του και ο ρόλος του είναι απλά για να υπάρχει ένας προηγούμενος κόμβος πριν τον "πραγματικό" πρώτο κόμβο της λίστας, ώστε να έχουμε 1 περίπτωση εισαγωγής/διαγραφής κόμβου. lista?. Βασίλης. Ελένη. Σπύρος. Mε αυτού του είδους την υλοποίηση, κάθε συνδεδεμένη λίστα έχει ένα κόμβο κεφαλή. Πιο συγκεκριμένα, μια κενή λίστα έχει ένα κόμβο κεφαλή: lista?. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 56

57 Οι δηλώσεις δεν αλλάζουν, ΌΜΩΣ μερικές πράξεις NAI typedef struct info_node *info_deikti; typedef struct info_node { int size; typos_deikti arxi; /* ston proto komvo */ info_node; /*o komvos plhroforias listas */ typedef struct typos_komvou *typos_deikti; typedef struct typos_komvou{ TStoixeioyListas dedomena; typos_deikti epomenos; ; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 57

58 info_deikti LIST_dimiourgia() {/* Pro: kamia * Meta:Dhmioyrgia kenhs syndedemenhs listas. desmeusis kai arxikopoiisis tou komvou linfo (komvos pliroforias) kai tis desmeusis tou protou komvou tis listas pou poy leitourgei os komvos kefali tis listas */ info_deikti linfo; linfo = malloc(sizeof(info_node)); typos_deikti head; head = malloc(sizeof(typos_komvou)); head->epomenos = NULL; linfo->size = 0; linfo->arxi = head; return linfo; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 58

59 Για τον έλεγχο αν μια λίστα με κεφαλή είναι κενή έχουμε: int LIST_keni(const info_deikti linfo) {/* Pro: Dhmiourgia listas * Meta:epistrefei 1 an h lista einai kenh, diaforetika 0 */ return ( linfo->arxi->epomenos == NULL ); Οι πράξεις epomenos, periehomeno, allagh παραμένουν οι ίδιες. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 59

60 Μόνο μια πράξη για εισαγωγή και μια για διαγραφή void LIST_eisagogi(const info_deikti linfo, TStoixeioyListas stoixeio, typos_deikti prodeiktis, int *error) {/* Pro: Dhmiourgia listas * Meta:Eisagetai to "stoixeio" meta ton "prodeikti",an einai null autos to stoixeio mpainei stin arxi tis listas allios mpainei meta apo ton komvo pou deixnei autos */ typos_deikti prosorinos; prosorinos = malloc(sizeof(typos_komvou)); if ( prosorinos == NULL ) {*error=1; return; TSlist_setValue(&prosorinos->dedomena, stoixeio); prosorinos->epomenos = prodeiktis->epomenos; prodeiktis->epomenos = prosorinos; linfo->size ++; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 60

61 Για το υποπρόγραμμα diagrafi έχουμε: void diagrafi(const info_deikti linfo, typos_deikti prodeiktis, int *empty){ /* Προ : H λίστα δεν είναι κενή. Mετά: διαγράφτηκε ο επόμενος κόμβος από αυτόν που δείχνει ο prodeiktis */ typos_deikti prosorinos; if (keni(lifo)) *empty = 1; else { *empty=0; prosorinos = prodeiktis->epomenos; prodeiktis->epomenos = prosorinos->epomenos; free(prosorinos); linfo->size--; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 61

62 Κυκλικά Συνδεδεμένες Λίστες (π.χ. Επαφές στα κινητά) klista Ανδρέας. Βασίλης. Ελένη. Σπύρος. klista 2 Ελένη 1. Στους αλγορίθμους της διαγραφής και εισαγωγής κόμβου δεν χρειάζεται να ληφθεί υπόψη η περίπτωση κόμβων που δεν έχουν προηγούμενο. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 62

63 Αλγόριθμος εισαγωγής σε κυκλικά συνδεδεμένη λίστα : {Ο prodeiktis δείχνει τον προηγούμενο κόμβο από αυτόν που πρόκειται να εισαχθεί (αν υπάρχει) 1. pare_neo_komvo(prosorinos) // Βήμα 1 2. dedomena(prosorinos)= stoixeio //2 3. a) Αν η κυκλική λίστα είναι κενή (νέα περίπτωση) epomenos(prosorinos) = prosorinos //3 klista = prosorinos //4 b) διαφορετικά (όπως στην μη κυκλική) epomenos(prosorinos)=epomenos(prodeiktis) //3 epomenos(prodeiktis) = prosorinos //4 ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 63

64 void LIST_eisagogi(const info_deikti linfo, TStoixeioyListas stoixeio, typos_deikti prodeiktis, int *error) { typos_deikti prosorinos, temp; prosorinos = malloc(sizeof(typos_komvou)); //1 TSlist_setValue(&(prosorinos->dedomena), stoixeio); //2 if(prodeiktis == NULL) //gia eisagogi stin arxi { if(list_keni(linfo)) // ΝΈΟ 3 prosorinos->epomenos = prosorinos; else { LIST_last(linfo, &temp, error); //prodeiktis prosorinos->epomenos = (*linfo)->arxi; temp->epomenos = prosorinos; linfo->arxi= prosorinos; //4 else //gia eisagogi meta ton prodeikti { prosorinos->epomenos = prodeiktis->epomenos; prodeiktis->epomenos = prosorinos; linfo->size ++; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 64

65 Αλγόριθμος διαγραφής σε κυκλικά συνδεδεμένη λίστα {Ο prodeiktis δείχνει τον προηγούμενο κόμβο από αυτόν που πρόκειται να διαγραφεί (αν υπάρχει) Αν η λίστα είναι κενή τότε λάθος Διαφορετικά 1. prosorinos = epomenos(prodeiktis) 2. Αν prosorinos == prodeiktis τότε {λίστα με ένα μόνο κόμβο klista = NULL διαφορετικά epomenos(prodeiktis) = epomenos(prosorinos) 3. apodesmeysi(prosorinos) ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 65

66 void LIST_diagrafi(const info_deikti linfo, typos_deikti *prodeiktis, int * const error) { typos_deikti prosorinos,previous; prosorinos = *prodeiktis; *error=0; if(list_keni(linfo) (*deiktis == NULL)) { *error=1; return; if(linfo->arxi->epomenos!=linfo->arxi) // όχι ΜΟΝΟ 1 { LIST_proigoymenos(linfo, &previous, error); if(linfo->arxi==*prodeiktis) //an einai o protos kombos linfo->arxi=(*prodeiktis)->epomenos; *prodeiktis=prosorinos->epomenos; previous->epomenos = prosorinos->epomenos; free(prosorinos); else //diagrafi tou monadikou kombou tis listas { free(linfo->arxi); linfo->arxi = NULL; *prodeiktis = NULL; linfo->size--; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 66

67 Αλγόριθμος για την επίσκεψη των κόμβων μιας κυκλικά συνδεδεμένης λίστας Αν η λίστα δεν είναι κενή τότε: 1.trexon = klista 2.Να επαναλαμβάνονται τα ακόλουθα βήματα: α. Επεξεργασία του dedomena(trexon) β. trexon = epomenos(trexon) μέχρις ότου trexon == klista ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 67

68 Διπλά Συνδεδεμένες Λίστες dlista. Ανδρέας Βασίλης Ελένη. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 68

69 Για την υλοποίηση των διπλά συνδεδεμένων λιστών χρειάζονται οι ακόλουθοι ορισμοί και δηλώσεις: typedef struct typos_komvou { TStoixeioyListas dedomena; typos_deikti epomenos; typos_deikti proigoumenos; typos_komvou; Ένας ακόμη δείκτης σε κάθε κόμβο. Δεν αλλάζει το.h (εφόσον έχουμε τον αρχικό κόμβο πληροφορίας) ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 69

70 Οι αλγόριθμοι για τις βασικές πράξεις με διπλά συνδεδεμένες λίστες είναι όμοιοι με εκείνους των συνδεδεμένων λιστών μιας κατεύθυνσης. Διαχειριζόμαστε 2 δείκτες επιπλέον. Δεν έχουμε αλλαγές στη Δημιουργία. info_deikti LIST_dimiourgia( ) {/* Pro: kamia * Meta: Dhmioyrgia kenhs syndedemenhs listas meso tis desmeusis kai arxikopoiisis tou komvou linfo pou leitourgei os komvos pliroforias kai tha sindethei me ton proto komvo pou tha eisaxthei */ info_deikti linfo; linfo = malloc(sizeof(info_node)); linfo->size = 0; linfo->arxi = NULL; return linfo; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 70

71 Επομένως ούτε και στον έλεγχο κενής int LIST_keni(const info_deikti linfo) {/* Pro: Dhmiourgia listas * Meta: epistrefei 1 an einai kenh, diaforetika 0 */ return ( linfo->arxi == NULL ); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 71

72 Εισαγωγή κόμβου σε μια διπλά συνδεδεμένη λίστα με κεφαλή Ελένη prodeiktis prosorinos 1 2 Νίκος 2 1 Σπύρος Πιο συγκεκριμένα, πρέπει να ακολουθηθούν τα επόμενα βήματα: 1. Δημιουργία κόμβου στον οποίο να δείχνει ο δείκτης prosorinos.//1 2. Καταχώρηση της τιμής στο τμήμα των δεδομένων του //2 3. Ενημέρωση δεικτών του κόμβου (2 δείκτες) //3+ 4. Ενημέρωση δεικτών προηγούμενου και επόμενου (αν υπάρχει) //4+ ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 72

73 void LIST_eisagogi(const info_deikti linfo, TStoixeioyListas stoixeio, typos_deikti prodeiktis, int *error) {/* Pro: Dhmiourgia listas * Meta:Eisagetai to "stoixeio" meta ton "prodeikti",an einai null autos to stoixeio mpainei stin arxi tis listas allios mpainei meta apo ton komvo */ *error=0; if(prodeiktis==null) eisagogi_arxi(linfo,stoixeio, error); else eisagogi_meta(linfo,stoixeio, prodeiktis, error); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 73

74 void eisagogi_arxi(const info_deikti linfo, TStoixeioyListas stoixeio, int *error) {/* Pro: Dhmiourgia listas * Meta:O kombos me ta dedomena stoixeio exei eisax8ei sthn arxh ths listas */ typos_deikti prosorinos; prosorinos = malloc(sizeof(typos_komvou)); if ( prosorinos == NULL ) { *error=1; return; TSlist_setValue(&prosorinos->dedomena, stoixeio); prosorinos->epomenos = linfo->arxi; prosorinos->proigoumenos = NULL; if (linfo->arxi!= NULL) linfo->arxi->proigoumenos = prosorinos; linfo->arxi = prosorinos; linfo->size ++; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 74

75 void eisagogi_meta(const info_deikti linfo, TStoixeioyListas stoixeio, typos_deikti prodeiktis, int *error) { /* Pro: Dhmioyrgia listas * Meta:O kombos me ta dedomena stoixeio eisagetai * meta ton kombo pou deixnei o prodeikths*/ typos_deikti prosorinos; prosorinos = malloc(sizeof(typos_komvou)); TSlist_setValue(&(prosorinos->dedomena), stoixeio); prosorinos->epomenos = prodeiktis->epomenos; prosorinos->proigoumenos = prodeiktis; if(prosorinos->epomenos!=null) prosorinos->epomenos->proigoumenos=prosorinos; prodeiktis->epomenos = prosorinos; linfo->size ++; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 75

76 Διαγραφή κόμβου από μια διπλά συνδεδεμένη λίστα με κεφαλή Ανδρέας Ελένη Σπύρος prodeiktis prosorinos ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 76

77 LIST_diagrafi(const info_deikti linfo, typos_deikti *deiktis, int * const error) { typos_deikti prosorinos, previous; *error=0; if (LIST_keni(*linfo) (*deiktis==null)) { *error=1; return; if(linfo->arxi==*deiktis) //an einai o protos { prosorinos = *deiktis; *deiktis=prosorinos->epomenos; if((*deiktis)!=null) (*deiktis)->proigoumenos = NULL; linfo->arxi=prosorinos->epomenos; else //se kathe alli periptosi { prosorinos = *deiktis; previous=prosorinos->proigoumenos; *deiktis=prosorinos->epomenos; previous->epomenos=prosorinos->epomenos; if((*deiktis)!=null) (*deiktis)->proigoumenos = previous; free(prosorinos); linfo->size--; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 77

78 Λίστα με δείκτη στο τέλος Αλλάζουμε τον κόμβο πληροφορίας, όχι το.h typedef struct info_node { int size; typos_deikti arxi; /* deikths sto proto komvo tis listas */ typos_deikti telos; /*deikths sto teleutaio komvo tis listas*/ info_node; /* o komvos plhroforias ths listas */ ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 78

79 info_deikti LIST_dimiourgia( ) {/* Pro: kamia * Meta: Dhmioyrgia kenhs syndedemenhs listas meso tis desmeusis kai arxikopoiisis tou komvou linfo pou leitourgei os komvos pliroforias kai tha sindethei me ton proto komvo pou tha eisaxthei */ info_deikti linfo; linfo = malloc(sizeof(info_node)); linfo->size = 0; linfo->arxi = NULL; linfo->telos = NULL; return linfo; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 79

80 void eisagogi_arxi(const info_deikti linfo, TStoixeioyListas stoixeio, int *error) {/* Pro: Dhmiourgia listas * Meta:O kombos me ta dedomena stoixeio exei eisax8ei sthn arxh ths listas */ int error=0; typos_deikti prosorinos; typos_deikti last=null; prosorinos = malloc(sizeof(typos_komvou)); if ( prosorinos == NULL ) { *error=1; return; TSlist_setValue(&prosorinos->dedomena, stoixeio); prosorinos->epomenos = linfo->arxi; linfo->arxi = prosorinos; linfo->size ++; LIST_last(linfo,&(linfo->telos), &error); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 80

81 void eisagogi_meta(const info_deikti linfo, TStoixeioyListas stoixeio, typos_deikti prodeiktis, int *error) {/* Pro: O prodeikths deixnei ena kombo sth lista * Meta:O kombos exei eisax8ei meta ton prodeikths */ int error=0; typos_deikti prosorinos; prosorinos = malloc(sizeof(typos_komvou)); if (prosorinos == NULL) { *error=1; return; TSlist_setValue(&prosorinos->dedomena, stoixeio); prosorinos->epomenos = prodeiktis->epomenos; prodeiktis->epomenos = prosorinos; linfo->size ++; LIST_last(*linfo,&(linfo->telos), &error) ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 81

82 Πολλαπλά συνδεδεμένες λίστες (multiply linked lists) Για το προηγούμενο παράδειγμα των εγγραφών, που περιέχουν το όνομα και τον αριθμό μητρώου φοιτητών, θα μπορούσαμε να έχουμε την παρακάτω συνδεδεμένη λίστα (με δύο διασυνδέσεις):. Σπύρος Βασίλης lista2 lista1. Ανδρέας Νίκος ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 82

83 Ειδική Περίπτωση Ταξινομημένη Λίστα

84 Μια λίστα λέγεται ταξινομημένη (sorted list) αν οι κόμβοι της είναι συνδεδεμένοι κατά τέτοιο τρόπο ώστε ένα από τα πεδία, το πεδίο κλειδί (key field) του τμήματος δεδομένων, είναι ταξινομημένο σε αύξουσα ή φθίνουσα σειρά. Σε μια τέτοια λίστα η εισαγωγή ενός νέου κόμβου θα πρέπει να έχει σαν αποτέλεσμα την παραγωγή μιας νέας ταξινομημένης λίστας. Η εισαγωγή του δηλαδή θα πρέπει να γίνει σε κάποιο συγκεκριμένο σημείο της λίστας. Στην περίπτωση της αναζήτησης κάποιου κόμβου σε μια ταξινομημένη λίστα εξετάζεται επιπλέον αν προσπεράσαμε την τιμή που αναζητούμε. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 84

85 Αλγόριθμος αναζήτησης ταξινομημένης (σε αύξουσα σειρά) λίστας (ο prodeiktis για τυχόν εισαγωγή ή διαγραφή) 1. prodeiktis = null, trexon = list 2. Όσο δεν ολοκληρώθηκε η αναζήτηση και trexon!= null να εκτελούνται οι παρακάτω εργασίες: Αν dedomena(trexon) >= stoixeio, τότε Η αναζήτηση ολοκληρώθηκε αν dedomena(trexon) = = stoixeio ο κόμβος βρέθηκε διαφορετικά προχώρησε τους δείκτες prodeiktis και trexon. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 85

86 Η υλοποίηση του παραπάνω αλγορίθμου γίνεται με την ακόλουθη διαδικασία : void anazitisi(typos_deikti lista, TStoixeioyListas stoixeio, typos_deikti *prodeiktis, int *vrethike){ /* Προ : Tα στοιχεία της λίστας lista είναι ταξινομημένα σε αύξουσα σειρά. Mετά: Έγινε αναζήτηση στη lista για τον εντοπισμό κόμβου που έχει περιεχόμενο stoixeio (*vrethike==1) ή για μια θέση για την εισαγωγή νέου κόμβου (*vrethike==0). Ο *prodeiktis δείχνει τον προηγούμενο κόμβο από αυτόν που περιέχει το stoixeio(εφόσον βρέθηκε) ή τον κόμβο μετά τον οποίο μπορεί να εισαχθεί το stoixeio (εφόσον δεν βρέθηκε). */ συνέχεια ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 86

87 typos_deikti trexon; int anazitisi=0; trexon = lista; *prodeiktis = NULL; *vrethike = 0; while ((!anazitisi) && (!keni(trexon))) if (periexomeno(trexon) >= stoixeio){ anazitisi = 1; // τέλος αναζήτησης *vrethike = (periexomeno(trexon)==stoixeio); else{ *prodeiktis = trexon; proxorise(lista, &trexon); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 87

88 Εφαρμογές συνδεδεμένων λιστών ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 88

89 Παράσταση πολυωνύμου με συνδεδεμένη λίστα Ενα πολυώνυμο n-ιοστού βαθμού έχει τη μορφή: p n (x) = a 0 + a 1 x + a 2 x a n x n και μπορεί να μελετηθεί με τη χρήση του ΑΤΔ λίστα. Πράγματι, οι συντελεστές του μπορεί να θεωρηθούν ότι σχηματίζουν τη λίστα (a 0, a 1, a 2,, a n ) και κατά συνέπεια να παρασταθεί με οποιαδήποτε από τις υλοποιήσεις για λίστα. Σε περίπτωση που το πολυώνυμο είναι αραιό π.χ το : p(x) = 6 + x 50 + x 99 ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 89

90 το οποίο έχει τη πλήρη μορφή p(x) = 6 + 0x + 0x x x 99 θα χρειάζεται ένα πίνακα με 100 στοιχεία, από τα οποία τα τρία είναι μη μηδενικά. Για την αποφυγή του προβλήματος αυτού θα πρέπει να διατηρούνται μόνο οι μη μηδενικοί συντελεστές του πολυωνύμου. Για παράδειγμα το p(x) παριστάνεται σαν ((6, 0), (1, 50), (1, 99)) όπου τα ζευγάρια είναι διατεταγμένα έτσι ώστε οι εκθέτες να είναι σε αύξουσα σειρά. Ο κόμβος μιας τέτοιας λίστας θα έχει τη μορφή. synd ekth. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 90

91 Για παράδειγμα, το p(x) θα παριστάνεται με την ακόλουθη συνδεδεμένη λίστα με κεφαλή: p?? p(x) = 6 + 0x + 0x x x 99 ((6, 0), (1, 50), (1, 99)) ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 91

92 Χρησιμοποιώντας την υλοποίηση με δείκτες, απαιτούνται οι ακόλουθοι ορισμοί και δηλώσεις: typedef struct PolyElement { float synd; int ekth; TStoixeioyListas ; typedef struct typos_komvou *typos_deikti; typedef struct k { TStoixeioyListas dedomena; typos_deikti epomenos; typos_komvou; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 92

93 Η επεξεργασία πολυωνύμων που παριστάνονται με τον παραπάνω τρόπο δεν παρουσιάζει δυσκολίες. Για παράδειγμα, ας υποτεθεί ότι επιθυμούμε να προσθέσουμε τα πολυώνυμα και p(x) = 4 + 5x 3 + 2x 5 + x 7 q(x) = 2x 3 + 3x x x 9 p που παριστάνονται ως (λίστα με κεφαλή)?? q?? ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 93

94 Δύο βοηθητικοί δείκτες ptrexon και qtrexon διατρέχουν τα στοιχεία των λιστών p και q, αντίστοιχα. Νέα λίστα r (p+q). Σύγκριση των εκθετών των δύο κόμβων των ptrexon και qtrexon. Εκθέτες είναι διαφορετικοί Ο κόμβος που περιέχει τον μικρότερο τοποθετείται στη r προχωράμε αντίστοιχο δείκτη Εκθέτες είναι ίσοι οι συντελεστές προστίθενται και αν το άθροισμα δεν είναι μηδέν δημιουργείται νέος κόμβος. Το αποτέλεσμα τοποθετείται στο πεδίο synd. Ο κοινός εκθέτης στο πεδίο ekth. Ο κόμβος αυτός τοποθετείται στη λίστα r. Προχωράμε και τους δύο δείκτες Αν συναντήσουμε το τέλος της μιας λίστας, τότε αντιγράφονται οι υπόλοιποι κόμβοι της άλλης στη λίστα r. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 94

95 Η πρόσθεση δύο πολυωνύμων που παριστάνονται με συνδεδεμένες λίστες υλοποιείται στο ακόλουθο υποπρόγραμμα: void prosthesi_poly(info_deikti p, info_deikti q, info_deikti *rptr) { /* Προ : Έχουν δημιουργηθεί δύο λίστες με κεφαλές που παριστάνουν δύο πολυώνυμα p και q. Mετά: Tο *rptr είναι δείκτης σε μια συνδεδεμένη λίστα (με κεφαλή) που παριστάνει το άθροισμα των πολυωνύμων p και q. */ συνέχεια ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 95

96 typos_deikti ptrexon, qtrexon, rtrexon, prosorinos; TStoixeioyListas neos; int error = 0; LIST_first(p,&ptrexon, &error );// στον 1o κόμβο LIST_first(q,&qtrexon, &error); // στον 1oκόμβο (*r)=list_dimiourgia(); // λίστα κενή while ((ptrexon!=null) && (qtrexon!=null)){ if (ptrexon->dedomena.ekth < qtrexon->dedomena.ekth){ /* εκθέτης του p μικρότερος του εκθέτη του q */ LIST_eisagogi(rPtr, ptrexon->dedomena, &rtrexon); LIST_epomenos(&ptrexon); else if (qtrexon->dedomena.ekth < ptrexon->dedomena.ekth){ /* εκθέτης του q μικρότερος του εκθέτη του p */ LIST_eisagogi(rPtr, qtrexon->dedomena, &rtrexon); LIST_epomenos(&qtrexon); else /* εκθέτες ίσοι */ συνέχεια ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 96

97 /* εκθέτες ίσοι */ neos.ekth = ptrexon->dedomena.ekth; neos.synd = ptrexon->dedomena.synd + qtrexon->dedomena.synd; if (neos.synd!= 0) LIST_eisagogi(rPtr, neos, &rtrexon); LIST_epomenos(&ptrexon); LIST_epomenos(&qtrexon); LIST_last(&rtrexon); /* end of while pointer ptrexon or qtrexon not null */ συνέχεια ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 97

98 /* Aντιγραφή υπόλοιπων κόμβων της p ή της q στην r */ if (ptrexon!=null) prosorinos = ptrexon; else prosorinos = qtrexon; while (prosorinos!=null){ LIST_eisagogi(rPtr,prosorinos->dedomena,&rtrexon); LIST_epomenos(&prosorinos); LIST_last(&rtrexon); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 98

99 Υλοποίηση του ΑΤΔ στοίβα με συνδεδεμένη λίστα Η στοίβα υλοποιείται ως μια συνδεδεμένη λίστα, όπου ο δείκτης που δείχνει τον πρώτο κόμβο της λίστας θα παίζει τον ρόλο της korifi. Απαιτείται η εισαγωγή και διαγραφή κόμβων μόνο στην αρχή. Επομένως μονά συνδεδεμένη χωρίς κεφαλή είναι ικανοποιητική. stoiva... ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 99

100 Για την υλοποίηση του ΑΤΔ στοίβα με συνδεδεμένες λίστες χρειάζονται οι δηλώσεις: typedef... typos_stoixeiou; typedef struct typos_komvou *typos_stoivas; typedef struct typos_komvou { typos_stoixeiou dedomena; typos_komvou * epomenos; ; Η εξαγωγή και η ώθηση στοιχείου από τη στοίβα είναι ειδικές περιπτώσεις εισαγωγής και εξαγωγής στοιχείου από μια συνδεδεμένη λίστα (στην αρχή της λίστας). ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 100

101 Στη συνέχεια παρουσιάζονται τα υποπρογράμματα για τις βασικές λειτουργίες ώθησης και εξαγωγής στοιχείου σε μια στοίβα. Η εξαγωγή (διαγραφή πρώτου κόμβου) 2 stoiva 1 prosorinos... ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 101

102 Η ώθηση (εισαγωγή πρώτου κόμβου) stoiva prosorinos. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 102

103 Υλοποίηση ΑΤΔ Στοίβα ως Συνδεδεμένη Λίστα Με Μερική Απόκρυψη (δήλωση τύπου στο.h) typedef struct ListStruct * TStoivas; struct ListStruct { TStoixeioyStoivas dedomena; /*to dedomeno*/ ListStruct * epomenos; /*deikths ston epomeno komvo */ ; TStoivas Stoiva_dimiourgia( ); int Stoiva_keni(TStoivas stoiva); void Stoiva_exagogi(TStoivas *stoivaptr, TStoixeioyStoivas *stoixeio, int *ypoxeilisi); void Stoiva_othisi(TStoivas *stoivaptr, TStoixeioyStoivas stoixeio, int *yperxeilisi); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 103

104 Υλοποίηση ΑΤΔ Στοίβα με Συνδεδεμένη Λίστα Με Ολική Απόκρυψη (δήλωση κόμβου στο.c) typedef struct ListStruct *TStoivas; /* δηλώσεις στο.h */ TStoivas Stoiva_dimiourgia(); void Stoiva_Destructor(TStoivas *StoivaPtr); int Stoiva_keni(TStoivas stoiva); void Stoiva_exagogi(TStoivas *stoivaptr, TStoixeioyStoivas *stoixeio, int *ypoxeilisi); void Stoiva_othisi(TStoivas stoivaptr, TStoixeioyStoivas stoixeio, int *yperxeilisi); struct ListStruct{ /* struct στο.c */ TStoixeioyStoivas dedomena; /*to dedomeno*/ ListStruct * epomenos; /*deikths ston epomeno komvo */ ; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 104

105 Υλοποιήσεις Πράξεων TStoivas Stoiva_dimiourgia( ){ return NULL; int Stoiva_keni(TStoivas s){ return (s == NULL); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 105

106 Ώθηση (εισαγωγή στην αρχή) void Stoiva_othisi(TStoivas *stoivaptr, typos_stoixeiou stoixeio, int * error){ struct ListStruct * prosorinos; *error = 0; prosorinos = malloc(sizeof(typos_komvou));// Βήμα 1 if (prosorinos!= NULL) {// συνθήκη «γεμάτη» prosorinos->dedomena = stoixeio; // Βήμα 2 prosorinos->epomenos = *stoivaptr;// Βήμα 3 *stoivaptr = prosorinos; // Βήμα 4 else *error = 1; /* η ώθηση δεν έγινε */ ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 106

107 Στη πράξη othisi δεν χρησιμοποιείται η πράξη «γεμάτη» (όπως στην υλοποίηση με πίνακα) αλλά μόνο ο έλεγχος για το αν υπάρχει χώρος. Η πράξη «γεμάτη» δεν έχει νόημα για την υλοποίηση της στοίβας με συνδεδεμένη λίστα, ενώ μας φαινόταν αποδεκτή για την υλοποίηση με πίνακα. Ο μόνος περιορισμός στην υλοποίηση της στοίβας με δείκτες είναι η συνολική διαθέσιμη μνήμη. Ένα ερώτημα που (πρέπει να) θέτουμε στον σχεδιασμό μιας διεπαφής είναι: «Είναι γενικός σχεδιασμός ή μήπως (άμεσα έμμεσα) εξαρτάται από την υλοποίηση;» ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 107

108 Εξαγωγή (διαγραφή πρώτου) void exagogi(stoiva *stoivaptr, TStoixeioyStoivas *stoixeio, int *ypoxeilisi) { struct ListStruct * temp; if (!keni(*s) { *ypoxeilisi = 0; *stoixeio = (*stoivaptr)->dedomena; //setvalue temp=*stoivaptr; *stoivaptr = temp->epomenos; free(temp); else *ypoxeilisi = 1; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 108

109 Ας σημειωθεί ότι στην Ολική Απόκρυψη οι επικεφαλίδες των υποπρογραμμάτων που υλοποιούν τις βασικές πράξεις του ΑΤΔ στοίβα με συνδεδεμένη λίστα είναι οι ίδιες με εκείνες που υλοποιούν τον ίδιο ΑΤΔ με πίνακα. Κατ' αυτόν τον τρόπο είναι δυνατόν να χρησιμοποιείται κάθε φορά η πιο αποτελεσματική υλοποίηση του ΑΤΔ στοίβα, ανάλογα με την εφαρμογή, με ελάχιστες (κανονικά καθόλου) τροποποιήσεις του κύριου προγράμματος. Στο σημείο αυτό παρατηρεί κανείς έντονα το πλεονέκτημα της απόκρυψης της πληροφορίας που επιτυγχάνεται ακολουθώντας τη μέθοδο του ΑΤΔ και ειδικότερα της Ολικής Απόκρυψης. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 109

110 Yλοποίηση του ΑΤΔ ουρά με συνδεδεμένη λίστα H υλοποίηση του ΑΤΔ ουρά με δείκτες είναι όμοια με εκείνη της στοίβας με τη μόνη διαφορά ότι εδώ χρειάζονται δύο δείκτες οι οποίοι δείχνουν το εμπρός και το πίσω μέρος της ουράς. Στην υλοποίηση της ουράς με συνδεδεμένη λίστα ο δείκτης embros δείχνει τον πρώτο κόμβο ενώ ο δείκτης piso τον τελευταίο κόμβο..... embros piso ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 110

111 Νέα Τεχνική Υλοποίησης Θα υλοποιήσουμε την Ουρά με συνδεδεμένη λίστα, αλλά επιπλέον θα χρησιμοποιήσουμε τις πράξεις του ΑΤΔ Λίστα για να υλοποιήσουμε πράξεις του ΑΤΔ Ουρά. Υλοποιημένη πλήρως στο 7.9 των σημειώσεων (+ κώδικας) ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 111

112 Το oyra.h (Ολική Απόκρυψη) typedef struct QueueStruct *HandleOyras; HandleOyras Oyra_dimiourgia(); void Oyra_katastrofi (HandleOyras *oura); int Oyra_keni (HandleOyras oura); void Oyra_prosthesi(HandleOyras *oura, TStoixeioyOyras stoixeio, int *yperxeilisi); void Oyra_apomakrynsh(HandleOyras *oura, TStoixeioyOyras *stoixeio, int *ypoxeilisi); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 112

113 Χρήση της διεπαφής της Λίστας στο.c #include Oyra.h #include "List_pointer.h /* συμπεριλαμβάνουμε την διεπαφή List_pointer.h */ typedef struct QueueStruct { info_deikti info_list; QueueStruct; /*o typos ths oyras lista*/ ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 113

114 (TyposS.h) (Oura.h) (main) #include Oura.h (TyposS.c) # include TyposS.h (List.h) (oura.c) #include Oura.h #include List.h (List.c) # include List.h ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 114

115 HandleOyras Oyra_dimiourgia(){ HandleOyras ThisQueue; ThisQueue = malloc(sizeof(queuestruct)); LIST_dimiourgia(&ThisQueue->info_list); /* μέσω ΑΤΔ List */ return ThisQueue; Παρατηρούμε ότι η δημιουργία της Λίστας γίνεται μέσω της LIST_dimiourgia. Σε αυτό το επίπεδο αφαίρεσης δεν ξέρουμε ποια υλοποίηση λίστας έχουμε (μονή, διπλή, με κεφαλή, κλπ). Για να το δούμε πρέπει να δούμε την υλοποίηση της Λίστας (στο.c της Λίστας). Επιλέγουμε με δείκτη στο τέλος για καλύτερη αποδοση ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 115

116 int Oyra_keni(HandleOyras oura){ return LIST_keni(oura->info_list); void Oyra_katastrofi(HandleOyras *oura){ LIST_katastrofi(&(*oura)->info_list); free(*oura); *oura=null; Όφελος από την χρήση του ΑΤΔ Λίστα: Η καταστροφή (free) όλων των κόμβων γίνεται μέσω της LIST_katastrofi. Κάνουμε λίγη δουλειά. Προσέξτε τα ονόματα των πράξεων: Βάζουμε πάντα το πρόθεμα του ΑΤΔ για να ξεχωρίσουν τα ονόματα σε διαφορετικούς ΑΤΔ (Oyra_keni, LIST_keni) ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 116

117 void Oyra_prosthesi(HandleOyras *oura, TStoixeioyOyras stoixeio, int *yperxeilisi) { int error=0; LIST_eisagogi(&((*oura)->info_list), stoixeio, yperxeilisi); Η List_eisagogi εισάγει στην λίστα με δείκτη embros, το stoixeio, μετά τον προδείκτη piso. Αν piso == NULL η εισαγωγή γίνεται στην αρχή. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 117

118 void Oyra_apomakrynsh (HandleOyras *oura, TStoixeioyOyras *stoixeio, int *ypoxeilisi) { if (Oyra_keni(*oura)) *ypoxeilisi=1; else { *ypoxeilisi=0; LIST_periexomeno((*oura)->info_list->arxi, stoixeio); LIST_diagrafi_arxi(&((*oura)->info_list), ypoxeilisi); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 118

119 Υλοποίηση μέσω άλλου ΑΤΔ Πλεονεκτήματα Αναπτύσσουμε λιγότερο κώδικα (π.χ. καταστροφή) Επαναχρησιμοποιούμε δοκιμασμένο (;) κώδικα Μειονεκτήματα Η διεπαφή να μην ταιριάζει ακριβώς (π.χ. Piso) Απόδοση εξαρτάται από (κρυμμένο) κώδικα Τίτλος Ενότητας 119

120 Σχεδιαστική Επιλογή Συνδεδεμένη Δομή με Πίνακα

121 2 η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα θέση (index) dedomena epomenos lista = ?? Ελένη???? Σπύρος?? Βασίλης 4-1?? 1???? ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 121

122 Στη συνέχεια θα πρέπει να γνωρίζουμε την οργάνωση του πίνακα αυτού προκειμένου να γίνει εισαγωγή ή διαγραφή κάποιου στοιχείου του. Φυσικό είναι να γνωρίζουμε την αρχική κατάσταση του πίνακα όπως στο σχήμα : kenos δείκτης dedomena epomenos ?????????? συνθήκη τέλους (έξω από όριο πίνακα (null) ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 122

123 Στη συνέχεια, ας υποθέσουμε ότι Βασίλης είναι το πρώτο όνομα που θα εισαχθεί σε μια συνδεδεμένη λίστα. Το όνομα αυτό θα τοποθετηθεί στην πρώτη θέση του πίνακα του και θα έχουμε το Σχήμα : δείκτης dedomena epomenos lista kenos Βασίλης????????? ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 123

124 Όταν διαγράφεται ένας κόμβος από τη συνδεδεμένη λίστα πρέπει η θέση του να συμπεριληφθεί στις κενές θέσεις του πίνακα ώστε να ξαναχρησιμοποιηθεί αργότερα για την αποθήκευση κάποιου άλλου στοιχείου της λίστας. Για παράδειγμα, ας υποθέσουμε ότι έχουμε τη συνδεδεμένη λίστα του σχήματος lista kenos δείκτης dedomena epomenos Βασίλης Σπύρος Ελένη??????? ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 124

125 Η διαγραφή του ονόματος Βασίλης έχει σαν αποτέλεσμα αυτό του σχήματος. Ας σημειωθεί ότι δεν είναι αναγκαία η φυσική απομάκρυνση του ονόματος Βασίλης από το τμήμα των δεδομένων. kenos lista δείκτης dedomena epomenos Βασίλης Σπύρος Ελένη??????? ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 125

126 #define plithos... #define null -1 // για να μοιάζει με NULL #define not_spec -1 typedef... TStoixeioyListas; typedef struct { TStoixeioyListas dedomena; int epomenos; typos_komvou; typedef struct typos_listas{ typos_komvou komvos[plithos]; int HeadList; /*thesi tou prwtou xrhsimou kombou*/ int HeadKenos;/*thesi tou prwtou eley8erou kombou*/ typos_listas; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 126

127 void arxiki_katastasi(typos_listas * ListPtr){ int i; /* σύνδεση των κενών κόμβων μεταξύ τους */ for ( i=0; i<plithos-1; i++ ) ListPtr->komvos[i].epomenos = i+1; /* ένδειξη τέλους της λίστας */ ListPtr->komvos[plithos-1].epomenos=null; ListPtr->HeadKenos = 0; list->headlist=not_spec; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 127

128 Για την εκτέλεση της παραπάνω διαδικασίας απαιτείται πρώτα ο εντοπισμός της κενής θέσης όπου θα εισαχθεί ο νέος κόμβος. Η pare_komvo(p) τοποθετεί στο p την τιμή της kenos, δηλαδή την θέση του πίνακα komvos που είναι κενή και πρόκειται να τοποθετηθεί ο νέος κόμβος. (κατ αναλογία της malloc () ) Ταυτόχρονα, διαγράφει (αφαιρεί) τη θέση αυτή από τη λίστα των κενών θέσεων. (κατ αναλογία της διαχείρισης του σωρού). ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 128

129 void pare_komvo(typos_listas *list, int *p, int *error) { error =0; *p = list->headkenos; if (list->headkenos!=not_spec) list->headkenos= list->komvos[list->headkenos].epomenos; else *error=1; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 129

130 Η διαδικασία που υλοποιεί μόνο την αποδέσμευση του χώρου του κόμβου που διαγράφεται είναι η ακόλουθη: void apodesmeysi(typos_listas *list, int p) { list->komvos[p].epomenos = list->headkenos; list->headkenos = p; Κατ αναλογία του free() ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 130

131 Η διαδικασία για τη δημιουργία μιας κενής συνδεδεμένης λίστας τοποθετεί την τιμή null (-1) στο δείκτη lista και αρχικοποιεί τον πίνακα με όλα τα στοιχεία στην λίστα των κενών. void dimiourgia(typos_list *listptr){ arxiki_katastasi(listptr); /* οι κενοί κόμβοι */ ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 131

132 Για τον έλεγχο αν μια συνδεδεμένη λίστα είναι κενή έχουμε το ακόλουθο υποπρόγραμμα : int LIST_keni(typos_listas lista) {/*Pro: Dhmioyrgia listas *Meta:epistrefei 1 an h lista einai kenh, diaforetika 0 */ return (lista.headlist == not_spec ); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 132

133 void LIST_eisagogi(typos_listas *list, TStoixeioyListas stoixeio, int prodeiktis, int *error){ /* Pro: Dhmioyrgia listas Meta: An o prodeiktis einai null tote o kombos me ta dedomena stoixeio exei eisax8ei sthn arxh ths listas (symvash) alliws eisagetai meta ton kombo poy deixnei o prodeiktis */ *error=0; if (prodeiktis == not_spec) /*eisagwgh sthn arxh */ eisagogi_arxi(list, stoixeio, error); else eisagogi_meta(list, prodeiktis, stoixeio, error); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 133

134 void eisagogi_arxi(typos_listas *list, TStoixeioyListas stoixeio,int *error) { int prosorinos; pare_komvo(list,&prosorinos,error); TSlist_setValue(&(list->komvos[prosorinos].dedomena), stoixeio); list->komvos[prosorinos].epomenos=list->headlist; list->headlist=prosorinos; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 134

135 void eisagogi_meta(typos_listas *list, int prodeiktis, TStoixeioyListas stoixeio, int *error){ int prosorinos; /*Deixnei to neo kombo poy 8a eisax8ei*/ pare_komvo(list, &prosorinos, error); TSlist_setValues( &(list->komvos[prosorinos].dedomena), stoixeio); list->komvos[prosorinos].epomenos= list->komvos[prodeiktis].epomenos; list->komvos[prodeiktis].epomenos=prosorinos; ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 135

136 void LIST_diagrafi(typos_listas *lista, int prodeiktis, int *error) { *error=0; if (LIST_keni(*lista)) *error=1; else { int prosorinos;/* o kombos poy 8a diagrafei*/ if (prodeiktis!= null) /* όχι στην αρχή */ { prosorinos = lista->komvos[prodeiktis].epomenos; lista->komvos[prodeiktis].epomenos = lista-> komvos[prosorinos].epomenos; else if (prodeiktis == null) /* στην αρχή */ { prosorinos = lista -> HeadList; lista->headlist = lista->komvos[headlist].epomenos; apodesmeysi(lista, prosorinos); ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 136

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

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

139 Σημειώματα

140 Σημείωμα Αναφοράς Copyright Εθνικόν και Καποδιστριακόν Πανεπιστήμιον Αθηνών, Κοτρώνης Ιωάννης. «Δομές Δεδομένων και Τεχνικές Προγραμματισμού. Ενότητα 4: ΑΤΔ Λίστα». Έκδοση: Αθήνα Διαθέσιμο από τη δικτυακή διεύθυνση: ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 140

141 Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. ΕΝΟΤΗΤΑ 4 ΑΤΔ Λίστα 141

Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους

Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους Κάθε στοιχείο του ΑΤΔ συνδεδεμένη λίστα (linked list) καλείται κόμβος (node) και περιέχει δύο πεδία. Στο ένα πεδίο αποθηκεύονται τα δεδομένα και Στο άλλο αποθηκεύεται

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

Οι Πράξεις. 1 η Υλοποίηση του ΑΤΔ: μονά συνδεδεμένη λίστα με δείκτες. Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους

Οι Πράξεις. 1 η Υλοποίηση του ΑΤΔ: μονά συνδεδεμένη λίστα με δείκτες. Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους Κάθε στοιχείο του ΑΤΔ συνδεδεμένη λίστα (linked list) καλείται κόμβος (node) και περιέχει δύο πεδία Στο ένα πεδίο αποθηκεύονται τα δεδομένα και Στο άλλο αποθηκεύεται

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

2 η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα ????

2 η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα ???? η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα θέση (index) dedomena epomenos lista = 0 1 3 Ελένη Σπύρος Βασίλης -1 1 Στη συνέχεια θα πρέπει να γνωρίζουμε την οργάνωση

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

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών ΛΙΣΤΕΣ Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα Υλοποίηση με δείκτες (pointers) Υλοποίηση με πίνακα Εφαρμογές και Χρήση Λιστών Λίστες (Lists) Δεδομένα

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

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

Δείκτες και Δομές. Info. Link. typedef struct NodeTag { InfoField Info; struct NodeTag *Link; } NodeType; Δείκτες και Δομές Ένας βασικός «δομικός λίθος». Όλη μαζί η δομή (struct) ονομάζεται κόμβος ή Node και αποτελείται από - Το μέλος Info οποιουδήποτε τύπου: int, άλλο struct (InfoField) - To μέλος ink τύπου

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

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

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

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

Λίστες (Lists) Ο ΑΤΔ λίστα είναι µια συλλογή στοιχείων του ίδιου τύπου µε

Λίστες (Lists) Ο ΑΤΔ λίστα είναι µια συλλογή στοιχείων του ίδιου τύπου µε Λίστες (Lists) Ο ΑΤΔ λίστα είναι µια συλλογή στοιχείων του ίδιου τύπου µε γραµµική δοµή Βασικές Πράξεις Δηµιουργία Κενή Περιεχόµενο Προχώρησε Εισαγωγή Μετά Εισαγωγή Πριν Διαγραφή Αναζήτηση Μήκος Ο ΑΤΔ

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

Βάσεις Περιβαλλοντικών Δεδομένων

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

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ Ι Σημειώσεις MATLAB Ενότητα 4 ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 4 Σημειώσεις βασισμένες στο

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ενότητα 7: Υπορουτίνες Καθ. Γιάννης Γαροφαλάκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ και Πληροφορικής Ορισμός Αφαίρεση με χρήση υπορουτινών (subroutine abstraction)

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

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

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

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

Προγραμματισμός Η/Υ. 4 η ενότητα: Δομές Δεδομένων. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

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

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

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

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας 1 Περιεχόμενα 1 η Άσκηση... 4 2 η Άσκηση... 7 3 η Άσκηση... 10 Χρηματοδότηση... 12 Σημείωμα Αναφοράς... 13 Σημείωμα Αδειοδότησης...

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Άσκηση αυτοαξιολόγησης 3-4 Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητες 3 & 4: ένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε

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

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

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

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

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

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

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Ενότητα 7: Παράγωγος, ελαστικότητα, παραγώγιση συναρτήσεων (Φροντιστήριο) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης

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

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

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

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

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

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

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

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

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

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

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

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

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

Γραμμικές Δομές Δεδομένων

Γραμμικές Δομές Δεδομένων Γραμμικές Δομές Δεδομένων Συλλογή δεδομένων στη σειρά (ολική διάταξη). Προσθέτουμε δεδομένα στη Δομή (μεγαλώνει) ή αφαιρούμε δεδομένα (μικραίνει) Αν περιορίσουμε τις πράξεις Στην Αρχή μόνο Στοίβα (stack)

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών Αναζήτηση και ταξινόµηση 7 Αναζήτηση (search) Πρόβληµα: αναζήτηση της καταχώρησης key στη

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

Επισκόπηση Μαθήματος. Γραμμικές Δομές Δεδομένων. ΑΤΔ Ουρά Εναλλακτικοί Σχεδιασμοί Προγραμματισμός με Ενότητες Interface.h Implementation.

Επισκόπηση Μαθήματος. Γραμμικές Δομές Δεδομένων. ΑΤΔ Ουρά Εναλλακτικοί Σχεδιασμοί Προγραμματισμός με Ενότητες Interface.h Implementation. Γραμμικές Δομές Δεδομένων Επισκόπηση Μαθήματος Συλλογή δεδομένων στη σειρά (ολική διάταξη). Προσθέτουμε δεδομένα στη Δομή (μεγαλώνει) ή αφαιρούμε δεδομένα (μικραίνει) Αν περιορίσουμε τις πράξεις Στην Αρχή

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών Συναρτήσεις 60 Ροή ελέγχου Είναι η σειρά µε την οποία εκτελούνται οι εντολές. Μέχρι τώρα, «σειριακή»,

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

Υπολογιστική άλγεβρα Ενότητα 10: Βάσεις Groebner ενός ιδεώδους ΙΙΙ

Υπολογιστική άλγεβρα Ενότητα 10: Βάσεις Groebner ενός ιδεώδους ΙΙΙ Υπολογιστική άλγεβρα Ενότητα 10: Βάσεις Groebner ενός ιδεώδους ΙΙΙ Ράπτης Ευάγγελος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών Κεφάλαιο 10 Βάσεις Groebner ενός ιδεώδους 10.1 Τρίτο μέρος Επαναλαμβάνουμε

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

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος Προγραμματισμός Η/Υ Βασικές Προγραμματιστικές Δομές ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος Δομή Ελέγχου Ροής (IF) Η εντολή IF χρησιμοποιείται όταν

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

Διαχείριση Πολιτισμικών Δεδομένων

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

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

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

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

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

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

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

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

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων 1 η Διάλεξη Ενδεικτικές λύσεις ασκήσεων 1 Περιεχόμενα 1 η Άσκηση... 3 2 η Άσκηση... 3 3 η Άσκηση... 3 4 η Άσκηση... 3 5 η Άσκηση... 4 6 η Άσκηση... 4 7 η Άσκηση... 4 8 η Άσκηση... 5 9 η Άσκηση... 5 10

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

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

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

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

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

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

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

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Ενότητα. Εισαγωγή στις βάσεις δεδομένων Ενότητα 1 Εισαγωγή στις βάσεις δεδομένων 2 1.1 Βάσεις Δεδομένων Ένα βασικό στοιχείο των υπολογιστών είναι ότι έχουν τη δυνατότητα να επεξεργάζονται εύκολα και γρήγορα μεγάλο πλήθος δεδομένων και πληροφοριών.

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

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 6: Συμπίεση Έργου

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 6: Συμπίεση Έργου Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 6: Συμπίεση Έργου Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων & Τροφίμων (Δ.Ε.Α.Π.Τ.)

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

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

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

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

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 8: ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ΑΛΓΟΡΙΘΜΟΣ HEAPSORT

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 8: ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ΑΛΓΟΡΙΘΜΟΣ HEAPSORT Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 8: ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ΑΛΓΟΡΙΘΜΟΣ HEAPSORT Δημήτριος Κουκόπουλος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διαχείρισης

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

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής Ανοικτά Ακαδημαϊκά Μαθήματα Τεχνολογικό Εκπαιδευτικό Ίδρυμα Αθήνας Πίνακες Νερού σε κατάσταση Κορεσμού Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής Διπλ. Ναυπηγός Μηχανολόγος Μηχανικός M.Sc. Διασφάλιση

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Ενότητα 11: Διανύσματα (Φροντιστήριο) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων &

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

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

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

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

Ηλεκτρονικοί Υπολογιστές

Ηλεκτρονικοί Υπολογιστές ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 9: Πίνακες στη C++ Ζαχαρούλα Ανδρεοπούλου Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

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

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων Δρ.Ευσταθία Παπαγεωργίου, Αναπληρώτρια Καθηγήτρια Τμήμα Ιατρικών Εργαστηρίων Το περιεχόμενο του μαθήματος διατίθεται

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

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Ενότητα 4: Τελεστές - Αλγόριθμος Διδάσκουσα: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

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

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

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

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

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός 1/8 Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός Κεφάλαιο Γ.05: Ολοκλήρωση Ρητών Συναρτήσεων Όνομα Καθηγητή: Γεώργιος Ν. Μπροδήμας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

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

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

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

Ουρές (Queues) FIFO A B C. Διαγραφή. Εισαγωγή. εµπρός. πίσω. πίσω. πίσω

Ουρές (Queues) FIFO A B C. Διαγραφή. Εισαγωγή. εµπρός. πίσω. πίσω. πίσω εµπρός Ουρές (Queues) A B C FIFO εµπρός πίσω B C Διαγραφή εµπρός πίσω B C D E Εισαγωγή πίσω Ορισµός Η ουρά είναι µια γραµµική λίστα στην οποία η διαγραφή ενός στοιχείου γίνεται στο ένα άκρο το οποίο καλείται

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

Βέλτιστος Έλεγχος Συστημάτων

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

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

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση Ιωάννης Τόλλης Τμήμα Επιστήμης Υπολογιστών Συγχωνευτική Ταξινόμηση (Merge Sort) 7 2 9 4 2 4 7 9 7 2 2 7 9 4

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

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε: Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε: (i) όλα τα περιεχόμενα στο αριστερό υποδέντρο του t είναι

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

Πρακτική Άσκηση σε σχολεία της δευτεροβάθμιας εκπαίδευσης

Πρακτική Άσκηση σε σχολεία της δευτεροβάθμιας εκπαίδευσης Πρακτική Άσκηση σε σχολεία της δευτεροβάθμιας εκπαίδευσης Ενότητα 1: Κρίσιμα συμβάντα Δέσποινα Πόταρη, Γιώργος Ψυχάρης Σχολή Θετικών επιστημών Τμήμα Μαθηματικό Απομαγνητοφώνηση αποσπάσματος από Β Λυκείου

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

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

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

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

Ευφυής Προγραμματισμός

Ευφυής Προγραμματισμός Ευφυής Προγραμματισμός Ενότητα 3: Ειδικές Παράμετροι-Είσοδος & Έξοδος Ιωάννης Χατζηλυγερούδης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Περιεχόμενα ενότητας Ειδικές Παράμετροι-Είσοδος & Έξοδος

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

Διοικητική Λογιστική

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

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

Ενδεικτικές λύσεις ασκήσεων διαγραμμάτων περίπτωσης χρήσης (1ο Μέρος)

Ενδεικτικές λύσεις ασκήσεων διαγραμμάτων περίπτωσης χρήσης (1ο Μέρος) Ενδεικτικές λύσεις ασκήσεων διαγραμμάτων περίπτωσης χρήσης (1ο Μέρος) 1 Περιεχόμενα 1 η Άσκηση Λειτουργίες του βιβλίου διευθύνσεων σε ένα πρόγραμμα ηλεκτρονικού ταχυδρομείου... 4 2 η Άσκηση Λειτουργίες

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

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 3: Εφαρμογές Δικτυωτής Ανάλυσης (2 ο Μέρος)

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 3: Εφαρμογές Δικτυωτής Ανάλυσης (2 ο Μέρος) Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 3: Εφαρμογές Δικτυωτής Ανάλυσης (2 ο Μέρος) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων

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

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός Κεφάλαιο Γ.4: Ολοκλήρωση με Αντικατάσταση Όνομα Καθηγητή: Γεώργιος Ν. Μπροδήμας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας ISO 17025 5.9. ΔΙΑΣΦΑΛΙΣΗ ΤΗΣ ΠΟΙΟΤΗΤΑΣ ΤΩΝ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΔΟΚΙΜΩΝ (1) 5.9.1 Το Εργαστήριο

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

Δομές Δεδομένων Ενότητα 4

Δομές Δεδομένων Ενότητα 4 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 4: Ουρές Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

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

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2) Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2) Μαυρίδης Δημήτριος Τμήμα Λογιστικής και Χρηματοοικονομικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για

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

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα Ενότητα: Ασκήσεις 1 Ανδριανός Ε. Τσεκρέκος Τμήμα Λογιστικής & Χρηματοοικονομικής Σελίδα 2 1. Σκοποί ενότητας... 5 2.

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

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

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

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

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 4: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΔΕΝΤΡΑ

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

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

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

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

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

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Emil: zro@ei.uptrs.r Άδειες Χρήσης Το παρόν

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

Κβαντική Επεξεργασία Πληροφορίας

Κβαντική Επεξεργασία Πληροφορίας Κβαντική Επεξεργασία Πληροφορίας Ενότητα 4: Κλασσική και Κβαντική Πιθανότητα Σγάρμπας Κυριάκος Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών Σκοποί ενότητας Σκοπός της ενότητας

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

Μικροοικονομική Ανάλυση της Κατανάλωσης και της Παραγωγής

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

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

Φυσική ΙΙΙ. Ενότητα 4: Ηλεκτρικά Κυκλώματα. Γεώργιος Βούλγαρης Σχολή Θετικών Επιστημών Τμήμα Φυσικής

Φυσική ΙΙΙ. Ενότητα 4: Ηλεκτρικά Κυκλώματα. Γεώργιος Βούλγαρης Σχολή Θετικών Επιστημών Τμήμα Φυσικής Φυσική ΙΙΙ Ενότητα 4: Ηλεκτρικά Κυκλώματα Γεώργιος Βούλγαρης Σχολή Θετικών Επιστημών Τμήμα Φυσικής Ασκήσεις ΦΙΙΙ Ασκήσεις κυκλωμάτων συνεχούς ρεύματος. Κανόνες Kirchhoff. Γ. Βούλγαρης 2 Ο Νόμος των Ρευμάτων

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

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 3: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΓΡΑΦΗΜΑΤΑ

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

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

Επιχειρησιακή Έρευνα

Επιχειρησιακή Έρευνα Επιχειρησιακή Έρευνα Ενότητα 10: Ειδικές περιπτώσεις επίλυσης με τη μέθοδο simplex (2o μέρος) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων

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

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

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

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Ενότητα 2: Γραμμικές συναρτήσεις (Φροντιστήριο) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων

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

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

Εισαγωγή στους Υπολογιστές Εισαγωγή στους Υπολογιστές Ενότητα #5: Δομές επιλογής Καθ. Δημήτρης Ματαράς Πολυτεχνική Σχολή Τμήμα Χημικών Μηχανικών Δομές επιλογής MATLAB Programming Α. Καλαμπούνιας Η δομή επιλογής if Η δομή if στο

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

Ευφυής Προγραμματισμός

Ευφυής Προγραμματισμός Ευφυής Προγραμματισμός Ιωάννης Χατζηλυγερούδης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Περιεχόμενα ενότητας Συναρτήσεις-Δομές Ελέγχου : 1. Συναρτήσεις Χρήστη 2. Έλεγχος Ροής Προγράμματος 3.

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 3 ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Ι. Ελεγκτές συνθηκών ή περιπτώσεων:

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Ενότητα 8: Εφαρμογές παραγώγων Μελέτη και βελτιστοποίηση συναρτήσεων μιας μεταβλητής (Φροντιστήριο) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων

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

Δομές Δεδομένων Ενότητα 3

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

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

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική Δρ.Ευσταθία Παπαγεωργίου, Αναπληρώτρια Καθηγήτρια Τμήμα Ιατρικών Εργαστηρίων Το περιεχόμενο του μαθήματος

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

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

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

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

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας ΣΤΟΙΒΕΣ (stacks) Η στοίβα είναι µια συλλογή δεδοµένων µε γραµµική διάταξη στην οποία όλες οι εισαγωγές και οι διαγραφές γίνονται στο ένα άκρο που λέγεται κορυφή (top) της στοίβας Σχήµα: Λειτουργία Στοίβας

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

Κβαντική Επεξεργασία Πληροφορίας

Κβαντική Επεξεργασία Πληροφορίας Κβαντική Επεξεργασία Πληροφορίας Ενότητα 12: Ιδιοτιμές και Ιδιοδιανύσματα Σγάρμπας Κυριάκος Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών Σκοποί ενότητας Ιδιοτιμές και Ιδιοδιανύσματα

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

Διδακτική των εικαστικών τεχνών Ενότητα 1

Διδακτική των εικαστικών τεχνών Ενότητα 1 Διδακτική των εικαστικών τεχνών Ενότητα 1 Ουρανία Κούβου Εθνικὸ καi Καποδιστριακὸ Πανεπιστήμιο Αθηνών Τμήμα Εκπαίδευσης και Αγωγής στην Προσχολική Ηλικία Ενότητα 1. Ιστορική αναδρομή της διδακτικής της

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

Διδακτική των εικαστικών τεχνών Ενότητα 3

Διδακτική των εικαστικών τεχνών Ενότητα 3 Διδακτική των εικαστικών τεχνών Ενότητα 3 Ουρανία Κούβου Εθνικὸ καi Καποδιστριακὸ Πανεπιστήμιο Αθηνών Τμήμα Εκπαίδευσης και Αγωγής στην Προσχολική Ηλικία Ενότητα 3. Ο ρόλος του εκπαιδευτικού: σχεδιασμός

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

Χωρικές σχέσεις και Γεωμετρικές Έννοιες στην Προσχολική Εκπαίδευση

Χωρικές σχέσεις και Γεωμετρικές Έννοιες στην Προσχολική Εκπαίδευση Χωρικές σχέσεις και Γεωμετρικές Έννοιες στην Προσχολική Εκπαίδευση Ενότητα 7: Κανονικότητες, συμμετρίες και μετασχηματισμοί στο χώρο Δημήτρης Χασάπης Τμήμα Εκπαίδευσης και Αγωγής στην Προσχολική Ηλικία

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Ενότητα 3: Μη γραμμικές συναρτήσεις (Φροντιστήριο) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών

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

4 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

4 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων 4 η Διάλεξη Ενδεικτικές λύσεις ασκήσεων 1 Περιεχόμενα 1 η Άσκηση... 3 2 η Άσκηση... 3 3 η Άσκηση... 4 4 η Άσκηση... 5 5 η Άσκηση... 6 6 η Άσκηση... 7 Χρηματοδότηση... 8 Σημείωμα Αναφοράς... 9 Σημείωμα

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

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

Λογικός Προγραμματισμός Ασκήσεις Λογικός Προγραμματισμός Ασκήσεις Παναγιώτης Σταματόπουλος Τμήμα Πληροφορικής και Τηλεπικοινωνιών Περιεχόμενα 1. Α Ομάδα Ασκήσεων "Λογικού Προγραμματισμού" Ακαδημαϊκού Έτους 2010-11... 3 1.1 Άσκηση 1...

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

Επιχειρησιακή Έρευνα

Επιχειρησιακή Έρευνα Επιχειρησιακή Έρευνα Ενότητα 7: Επίλυση με τη μέθοδο Simplex (1 ο μέρος) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων & Τροφίμων (Δ.Ε.Α.Π.Τ.)

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

Πληροφορική ΙΙ Θεματική Ενότητα 5

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

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

Υπολογιστική άλγεβρα Ενότητα 1: Πολυωνυμικές σχέσεις και ταυτότητες, μέρος Ι

Υπολογιστική άλγεβρα Ενότητα 1: Πολυωνυμικές σχέσεις και ταυτότητες, μέρος Ι Υπολογιστική άλγεβρα Ενότητα 1: Πολυωνυμικές σχέσεις και ταυτότητες, μέρος Ι Ράπτης Ευάγγελος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών Μέρος I Εναρξη μαθήματος 5 7 Υπολογιστική Άλγεβρα (439) ) Ευάγγελος

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

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Β. Διαφορικός Λογισμός

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Β. Διαφορικός Λογισμός Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Β. Διαφορικός Λογισμός Κεφάλαιο Β.9: Το Διαφορικό Όνομα Καθηγητή: Γεώργιος Ν. Μπροδήμας Τμήμα Φυσικής Γεώργιος Νικ. Μπροδήμας Κεφάλαιο Β.9: Το Διαφορικό 1 Άδειες

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

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

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

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Μαθηματικά Διοικητικών & Οικονομικών Επιστημών Ενότητα 6: Όριο και συνέχεια συναρτήσεων (Θεωρία) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών

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

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

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

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

Ορισμός κανονικής τ.μ.

Ορισμός κανονικής τ.μ. Πιθανότητες και Στατιστική Ενότητα 4: Τυχαίες τυχαίες μεταβλητές Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Αθήνα 2015 Ορισμός κανονικής τ.μ. Ορισμός κανονικής τ.μ. Μια συνεχής τ.μ.

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 9: Αναδρομή

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 9: Αναδρομή ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 9: Αναδρομή Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών Αναδροµή 24 Αναδροµή Πληροφορική Ι Μ. ρακόπουλος 24 Αναδροµικές µέθοδοι Μια µέθοδος καλεί τον εαυτό της

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

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Ενότητα 2: Δημιουργία και Επεξεργασία διανυσμάτων και πινάκων μέσω του Matlab Διδάσκουσα: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών ΤΕ Άδειες

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