130 likes | 394 Views
Διαφάνειες παρουσίασης #9. Συνδεδεμένες λίστες Απλά συνδεδεμένες λίστες Ουρές Στοίβες. Εισαγωγή ( i). Συνδεδεμένες λίστες Χρησιμεύουν για την υλοποίηση δομών δεδομένων Δεν επιβάλλουν περιορισμούς στο πλήθος των δεδομένων που χωράνε αυτές οι δομές Το πρόβλημα με τους πίνακες
E N D
Διαφάνειες παρουσίασης #9 Συνδεδεμένες λίστες Απλά συνδεδεμένες λίστες Ουρές Στοίβες
Εισαγωγή (i) • Συνδεδεμένες λίστες • Χρησιμεύουν για την υλοποίηση δομών δεδομένων • Δεν επιβάλλουν περιορισμούς στο πλήθοςτων δεδομένων που χωράνε αυτές οι δομές • Το πρόβλημα με τους πίνακες client c[1000]; for (i=0; !f.eof(); i++) fread(&(c[i]), 1, sizeof(client), f); • Τί γίνεται αν το αρχείο f έχει 1249 πελάτες;
Π Σ Εισαγωγή (ii) • Η ιδέα της συνδεδεμένης λίστας • Η λίστα είναι ένα σύνολο από κόμβους • Κάθε κόμβος περιέχει πληροφορίες και έναν ή περισσότερους συνδέσμους προς άλλους κόμβους
Απλά συνδεδεμένες λίστες (i) • Είναι γραμμικές διατάξεις • Κάθε κόμβος περιέχει ένα σύνδεσμο στον επόμενο κόμβο • Ο τελευταίος κόμβος έχει κενό σύνδεσμο
Απλά συνδεδεμένες λίστες (ii) • Παράδειγμα: λίστα ακεραίων struct node_tag { int data; struct node_tag * next; }; typedef struct node_tag Node, * LinkedList; • Κενή λίστα
εδώ i Απλά συνδεδεμένες λίστες (iii) • Προσθήκη στοιχείων • απόφαση πούθα προστεθεί • δημιουργίανέου κόμβου • αντιγραφήπληροφορίας • σύνδεσηνέου κόμβου i
αυτό Απλά συνδεδεμένες λίστες (iv) • Αφαίρεση στοιχείων • απόφαση ποιοστοιχείοθα αφαιρεθεί • καταστροφήκόμβου • σύνδεσηυπόλοιπωνκόμβων
Ουρές (i) • First In First Out (FIFO)ό,τι μπαίνει πρώτο, βγαίνει πρώτο • Ουρά ακεραίων • ΑΤΔ: queue • const queue empty; • void insert (queue * qp, int t); • int remove (queue * qp); • int head (queue q);
Ουρές (ii) • Παράδειγμα queue q = empty; insert(&q, 5); insert(&q, 7); printf("%d\n", remove(&q)); insert(&q, 13); printf("%d\n", head(q)); printf("%d\n", remove(&q)); printf("%d\n", remove(&q));
first last Ουρές (iii) • Υλοποίηση με απλά συνδεδεμένη λίστα
Στοίβες (i) • Last In First Out (LIFO)ό,τι μπαίνει τελευταίο, βγαίνει πρώτο • Στοίβα ακεραίων • ΑΤΔ: stack • const stack empty; • void push (stack * sp, int t); • int pop (stack * sp); • int top (stack s);
Στοίβες (ii) • Παράδειγμα stack s = empty; push(&s, 5); push(&s, 7); printf("%d\n", pop(&s)); push(&s, 13); printf("%d\n", top(s)); printf("%d\n", pop(&s)); printf("%d\n", pop(&s));
first Στοίβες (iii) • Υλοποίηση με απλά συνδεδεμένη λίστα