Δυναμικη Δεσμευση Μνημης Συνδεδεμενες Λιστες (dynamic memory allocation, linked lists) Πως υλοποιουμαι προγραμματα που δεν γνωριζουμε πριν την εκτελεση.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Ε. ΠετράκηςΛίστες1  Λίστα: πεπερασμένη σειρά στοιχείων ίδιου τύπου  Οι πράξεις εξαρτώνται από τον τύπο της λίστας και όχι από τον τύπο δεδομένων  Λίστα:
Advertisements

Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη Java • Ακέραιοι.
Αλγόριθμοι Αναζήτησης
Ανασκόπηση σε Δείκτες, Ουρές, Στοίβες, Συνδεδεμένες Λίστες
ΜΑΘΗΜΑ 7ο Κυκλικές και Διπλά Συνδεδεμένες Λίστες,
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Λίστες παράλειψης (skip lists) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A
Γλώσσα C & Unix Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι18/10/2010.
Πινακες (Arrays) Σημασια Συνταξη Αρχικοποιηση Προσβαση Παραμετροι
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜMΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
Αλγόριθμοι Ταξινόμησης
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
Διαίρει-και-Βασίλευε
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε.
Πάνω προς Κάτω Σχεδιασμός και Συναρτήσεις
Ε. ΠετράκηςΣτοίβες, Ουρές1 Στοίβες  Στοίβα: περιορισμένη ποικιλία λίστας  τα στοιχεία μπορούν να εισαχθούν ή να διαγραφούν μόνο από μια άκρη : λίστες.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης (1/2)
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
Δείκτες (Pointers) – Δομές (Structs)
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
Αλγόριθμοι Ταξινόμησης
ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών.
Διερεύνηση γραφήματος. Ένας αλγόριθμος διερεύνησης γραφήματος επισκέπτεται τους κόμβους του γραφήματος με μια καθορισμένη στρατηγική, π.χ. κατά εύρος.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
6-1 ΜΑΘΗΜΑ 6 ο Ανασκόπηση σε Δείκτες, Συνδεδεμένες Λίστες, Ουρές, Στοίβες.
Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη C Ακέραιοι.
ΗΥ150 – Προγραμματισμός Ξ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Δομές Δεδομένων.
Διερεύνηση γραφήματος. Ένας αλγόριθμος διερεύνησης γραφήματος επισκέπτεται τους κόμβους του γραφήματος με μια καθορισμένη στρατηγική, π.χ. κατά εύρος.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Quicksort Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι115/4/2015.
Λίστες παράλειψης (skip lists) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A
Γράφημα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Συνδυαστικό αντικείμενο που αποτελείται από.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ -150 Προγραμματισμός Δομές Δεδομένων.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης (1/2)
Δομές Δεδομένων και Αρχεία
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Δομές Δεδομένων και Αρχεία
Συνδετικότητα γραφήματος (graph connectivity). α β Υπάρχει μονοπάτι μεταξύ α και β; Παραδείγματα: υπολογιστές ενός δικτύου ιστοσελίδες ισοδύναμες μεταβλητές.
Δομές δεδομένων και Αλγόριθμοι Κεφάλαιο 3. Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Δεδομένα Δεδομένα (data) Δεδομένα (data) –αφαιρετική αναπαράσταση.
Δομές Δεδομένων 13η Διάλεξη Πίνακες Συμβόλων Ε. Μαρκάκης.
Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα:
10η Διάλεξη Ταξινόμηση E. Μαρκάκης
Στοιχειώδεις Δομές Δεδομένων: Πίνακες και Λίστες
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Διερεύνηση γραφήματος
5η Διάλεξη Λίστες και αρχές ανάλυσης αλγορίθμων Ε. Μαρκάκης
9η Διάλεξη Ταξινόμηση Ε. Μαρκάκης
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Ενότητα 9: Δείκτες και Δυναμική Διαχείριση Μνήμης.
EPL231 – Data Structures and Algorithms
11η Διάλεξη Ταξινόμηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης
Φοιτητής: Τσακίρης Αλέξανδρος Επιβλέπων: Ευάγγελος Ούτσιος
Ουρά Προτεραιότητας (priority queue)
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε στοιχείο έχει ένα κλειδί από ολικά διατεταγμένο σύνολο Θέλουμε να υποστηρίξουμε δύο.
19η Διάλεξη Εξωτερική Αναζήτηση και Β-δέντρα Ε. Μαρκάκης
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
מבני נתונים ויעילות אלגוריתמים
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Μεταγράφημα παρουσίασης:

Δυναμικη Δεσμευση Μνημης Συνδεδεμενες Λιστες (dynamic memory allocation, linked lists) Πως υλοποιουμαι προγραμματα που δεν γνωριζουμε πριν την εκτελεση του προγραμματος το μεγεθος των δεδομενων (πχ αριθμος φοιτητων) Δυναμικη Δεσμευση Μνημης - dynamic memory allocation

Στατικη vs Δυναμικη Δεσμευση Στατικη: γνωστη η ποσοτητα μνημης που θα δεσμευθει(αποδεσμευθει) κατα την διαρκεια του μεταγλωτισμου: κληση(επιστροφη) καθε συναρτησης, και εισοδο(εξοδο) καθε τμημα προγραμματος Δυναμικη δεσμευση:κατα την διαρκεια της εκτελεσης του προγραμματος

Δυναμικη Δεσμευση (stdlib.h) Συνταξη: malloc(αριθμος bytes) Σημασια: δεσμευει μνημη ιση με τον αριθμο bytes, επιστεφει δεικτη στην πρωτη διευθυνση int *t = malloc(sizeof(int) * 100000); δημιουργα ενα πινακα με 100000 ακεραιους for(i=0;i<100000;++i) t[i]=0; for(i=0;i<100000;++i) *(t+i)=0;

Δυναμικη Δεσμευση student_t *t; t = (student_t *) malloc(sizeof(student_t) * 100000); for(i=0;i<100000;++i) t[i].vathmos = 0; for(i=0;i<100000;++i) (t+i)->vathmos = 0;

Δυναμικη Aποδεσμευση Αποδεσμευση μνημης που δεσμευθηκε δυναμικα κατα την διαρκεια της εκτελεσης του προγραμματος free(p); αποδεσμευει μνημη που δεσμευθηκε δυναμικα και την δειχνει ο δεικτης p (garbage collection) η διευθυνση του p πρεπει να ειναι διευθυνση που επιστρεψε το malloc

Παραδειγμα Αποθηκευση μιας απροσδιοριστου μεγεθους σειρας ακεραιων αριθμων σε πινακα. Τερματιζεται με 0. Ξεκινα με πινακα με μεγεθος ν, count =0 Διαβαζε στοιχεια μεχρι το 0 count++ εαν διαβαστηκαν ν στοιχεια (count==n) δεσμευσε πινακα διπλασιου μεγεθους (2ν) αντιγραψε τον προηγουμενο στον νεο αποδεσμευσε τον παλιο ν = 2ν

int read_series(int *table, int *final_size) { int size=16, count=0, i, num; int *table = (int *) malloc(sizeof(int) * size); assert(table==NULL); /* failed to allocate memory*/ while((num=getint())!=0){ if (count==size){ temp_table = (int *) malloc(sizeof(int) * (size<<1)); assert(temp_table==NULL); /* failed to allocate memory*/ for(i=0;i<size;++i) temp_table[i]=table[i]; free(table); table = temp_table; size = size << 1; } table[count]=num; ++count; *final_size = size; return count;

Συνδεδεμενες Λιστες Πινακες δεν ειναι καλη δομη οταν θελουμε να αφαιρεσουμε(προσθεσουμε) στοιχεια απο(στην) μεση. Linked lists ειναι πιο καταληλες δομες -για εφαρμογες οπου τετοιες πραξεις ειναι συχνες.

Συνδεδεμενες Λιστες Aδεια λιστα (NULL) data id 456 grade 5.6 data pointer στο επομενο στοιχειο id 112 grade 8.6 id 456 grade 5.6 id 333 grade 3.5 id 112 grade 8.6 id 456 grade 5.6

Συνδεδεμενες Λιστες Ορισμος δομης Δημιουργια νεας δομης (δυναμικη δεσμ.) Συνδεση δομων σε λιστα Επεξεργασια λιστας Αποδεσμευση δομης (συναμικη αποδεσμ.)

struct for a link list: Aυτο-αναφορικη Δομη Δομη που περιεχει δεικτη ιδιου τυπου με την δομη struct student_node_s{ int id; float grade; struct student_node_s *next; } typedef student_node_s strudent_node_t;

traversing a link list void display_link_list(student_node_t *cursor) { while(cursor!= NULL){ printf(“Id: %d Grade: %f\n”,cursor->id, cursor->grade); cursor = cursor->next; }

Συνδεδεμενες Λιστες Δημιουργια νεας δομης (δυναμικη δεσμ.) Δημιουργια λιστας Συνδεσμοι: δεικτες αρχικα αδεια: NULL διατηρηση μεταβλητης που δειχνει στην αρχη της λιστας (head)

student_node_t* read_ids() /*diabase ids kai apothikeyse ta se synded. lista */ { int id; student_node_t *head = NULL, *node; while((id=getint())!=-1){ node =new_node(id); if(head==NULL){ /* 1o stoixeio ?*/ head = node; } else{ /*oxi 1o stoixeio*/ node->next = head; return head; /*epestrepse deikth sthn arxi tis listas */

student_node_t* new_node(int id) { student_node_t *node; node = (student_node_t *)malloc(sizeof(student_node_t)); assert(node==NULL); /* failed to allocate memory*/ node->id = id; node->grade = 0; node->next = NULL; return node; }

student_node_t* add_student(int id, student_node_t*head) /* at the front*/ { node =new_node(id); if(head==NULL){ /* 1o stoixeio ?*/ head = node; } else{ /*oxi 1o stoixeio*/ node->next = head; return head; /*epestrepse deikth sthn arxi tis listas */

student_node_t* add_student(int id, student_node_t*head) /* at the end*/ { student_node_t *node, *cursor; node =new_node(id); if(head==NULL){ /* 1o stoixeio ?*/ head = node; } else{ /*oxi 1o stoixeio*/ for(cursor=head;cursor->next!=NULL;cursor=cursor->next); cursor->next = node; return head; /*epestrepse deikth sthn arxi tis listas */

Συνδεδεμενες Λιστες Aποδεσμευση δομης (δυναμικη αποδεσμ.) Συνδεσμοι (με δεικτες)

student node_t* delete_item(student_node_t *head, int id) { student_node_t *prev, *cursor,*t; for(prev=NULL, cursor=head;cursor!= NULL; prev=cursor,cursor=cursor->next){ if (cursor->id==id){ if (prev==NULL){ /* this is the head */ t = head; head=head->next; free(t); } else{ prev->next = cursor->next; free(cursor); break; return head;}

αναζητηση στοιχειου student_node_t * get_item(student_node_t *head, int id) { student_node_t *cursor; for(cursor = head;cursor!=NULL;cursor=cursor->next) if (cursor->id == id) return cursor; } return NULL;

Συνδεδεμενες Λιστες: insertion_sort Διαβαζουμε δεδομενα ενα καθε φορα και το συνδεουμε στην λιστα ωστε η λιστα να ειναι ταξινομημενη. Αλγοριθμος:

Συγκριση: Πινακες vs Συνδεδ. Λιστες insertion/deletion: αναζητηση: ταξινομηση: