Transcript
Page 1: Διαφάνειες παρουσίασης #9

ΛΟΓ102: Τεχνολογία Λογισμικού Ι

[email protected]Διδάσκων: Νίκος Παπασπύρου

http://www.softlab.ntua.gr/~nickie/TUC/log102/

1Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι

Διαφάνειες παρουσίασης #9

Συνδεδεμένες λίστεςΑπλά συνδεδεμένες λίστεςΟυρέςΣτοίβες

Page 2: Διαφάνειες παρουσίασης #9

2Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι

Εισαγωγή (i)

Συνδεδεμένες λίστες Χρησιμεύουν για την υλοποίηση δομών

δεδομένων Δεν επιβάλλουν περιορισμούς στο πλήθος

των δεδομένων που χωράνε αυτές οι δομές

Το πρόβλημα με τους πίνακεςclient c[1000];

for (i=0; !f.eof(); i++) fread(&(c[i]), 1, sizeof(client), f); Τί γίνεται αν το αρχείο f έχει 1249 πελάτες;

Page 3: Διαφάνειες παρουσίασης #9

3Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι

Εισαγωγή (ii)

Η ιδέα της συνδεδεμένης λίστας Η λίστα είναι ένα σύνολο από κόμβους Κάθε κόμβος περιέχει πληροφορίες και έναν ή

περισσότερους συνδέσμους προς άλλους κόμβους

Π Σ

Page 4: Διαφάνειες παρουσίασης #9

4Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι

Απλά συνδεδεμένες λίστες (i)

Είναι γραμμικές διατάξεις Κάθε κόμβος περιέχει ένα σύνδεσμο στον

επόμενο κόμβο Ο τελευταίος κόμβος έχει κενό σύνδεσμο

Page 5: Διαφάνειες παρουσίασης #9

5Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι

Απλά συνδεδεμένες λίστες (ii)

Παράδειγμα: λίστα ακεραίων

struct node_tag { int data; struct node_tag * next;};

typedef struct node_tag Node, * LinkedList;

Κενή λίστα

Page 6: Διαφάνειες παρουσίασης #9

6Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι

Απλά συνδεδεμένες λίστες (iii)

Προσθήκη στοιχείων απόφαση πού

θα προστεθεί δημιουργία

νέου κόμβου αντιγραφή

πληροφορίας σύνδεση

νέου κόμβου

ii

εδώ

Page 7: Διαφάνειες παρουσίασης #9

7Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι

Απλά συνδεδεμένες λίστες (iv)

Αφαίρεση στοιχείων απόφαση ποιο

στοιχείοθα αφαιρεθεί

καταστροφήκόμβου

σύνδεσηυπόλοιπωνκόμβων

αυτό

Page 8: Διαφάνειες παρουσίασης #9

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);

Page 9: Διαφάνειες παρουσίασης #9

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));

Page 10: Διαφάνειες παρουσίασης #9

10Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι

Ουρές (iii)

Υλοποίηση με απλά συνδεδεμένη λίστα

first last

Page 11: Διαφάνειες παρουσίασης #9

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);

Page 12: Διαφάνειες παρουσίασης #9

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));

Page 13: Διαφάνειες παρουσίασης #9

13Νίκος Παπασπύρου ΛΟΓ102: Τεχνολογία Λογισμικού Ι

Στοίβες (iii)

Υλοποίηση με απλά συνδεδεμένη λίστα

first


Top Related