Διαφάνειες παρουσίασης #9
description
Transcript of Διαφάνειες παρουσίασης #9
ΛΟΓ102: Τεχνολογία Λογισμικού Ι
[email protected]Διδάσκων: Νίκος Παπασπύρου
http://www.softlab.ntua.gr/~nickie/TUC/log102/
1Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Διαφάνειες παρουσίασης #9
Συνδεδεμένες λίστεςΑπλά συνδεδεμένες λίστεςΟυρέςΣτοίβες
2Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Εισαγωγή (i)
Συνδεδεμένες λίστες Χρησιμεύουν για την υλοποίηση δομών
δεδομένων Δεν επιβάλλουν περιορισμούς στο πλήθος
των δεδομένων που χωράνε αυτές οι δομές
Το πρόβλημα με τους πίνακεςclient c[1000];
for (i=0; !f.eof(); i++) fread(&(c[i]), 1, sizeof(client), f); Τί γίνεται αν το αρχείο f έχει 1249 πελάτες;
3Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Εισαγωγή (ii)
Η ιδέα της συνδεδεμένης λίστας Η λίστα είναι ένα σύνολο από κόμβους Κάθε κόμβος περιέχει πληροφορίες και έναν ή
περισσότερους συνδέσμους προς άλλους κόμβους
Π Σ
4Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Απλά συνδεδεμένες λίστες (i)
Είναι γραμμικές διατάξεις Κάθε κόμβος περιέχει ένα σύνδεσμο στον
επόμενο κόμβο Ο τελευταίος κόμβος έχει κενό σύνδεσμο
5Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Απλά συνδεδεμένες λίστες (ii)
Παράδειγμα: λίστα ακεραίων
struct node_tag { int data; struct node_tag * next;};
typedef struct node_tag Node, * LinkedList;
Κενή λίστα
6Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Απλά συνδεδεμένες λίστες (iii)
Προσθήκη στοιχείων απόφαση πού
θα προστεθεί δημιουργία
νέου κόμβου αντιγραφή
πληροφορίας σύνδεση
νέου κόμβου
ii
εδώ
7Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Απλά συνδεδεμένες λίστες (iv)
Αφαίρεση στοιχείων απόφαση ποιο
στοιχείοθα αφαιρεθεί
καταστροφήκόμβου
σύνδεσηυπόλοιπωνκόμβων
αυτό
8Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Ουρές (i)
First In First Out (FIFO)ό,τι μπαίνει πρώτο, βγαίνει πρώτο
Ουρά ακεραίων ΑΤΔ: queue const queue empty; void insert (queue * qp, int t); int remove (queue * qp); int head (queue q);
9Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Ουρές (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));
10Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Ουρές (iii)
Υλοποίηση με απλά συνδεδεμένη λίστα
first last
11Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Στοίβες (i)
Last In First Out (LIFO)ό,τι μπαίνει τελευταίο, βγαίνει πρώτο
Στοίβα ακεραίων ΑΤΔ: stack const stack empty; void push (stack * sp, int t); int pop (stack * sp); int top (stack s);
12Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Στοίβες (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));
13Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι
Στοίβες (iii)
Υλοποίηση με απλά συνδεδεμένη λίστα
first