Συνδεδεμένη Λίστα ΣΛ null VK 23

Σχετικά έγγραφα
Συνδεδεμένη Λίστα (Linked List)

4 ΔYNAMIKEΣ ΔOMEΣ ΔEΔOMENΩN

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Δομές Δεδομένων - Εργαστήριο 2. Λίστες

public class ArrayQueue implements Queue {

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων (Data Structures)

4. Συνδεδεμένες Λίστες

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

public class ArrayStack implements Stack {

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Το ισχυρό πλεονέκτηµα των απλών µη ταξινοµηµένων πινάκων που είναι η γρήγορη εισαγωγή, αναιρείται αν απαγορεύονται τα διπλότυπα.

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Διδάσκων: Παναγιώτης Ανδρέου

Σι θα δούμε σε αυτό το μάθημα;

Κεφάλαιο 5 Συλλογές, Στοίβες και Ουρές

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Συλλογές, Στοίβες και Ουρές

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Δομές Δεδομένων & Αλγόριθμοι

Λίστες (Lists) Ορέστης Τελέλης. Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Συναρτήσεις Κατακερματισμού και Πίνακες Κατακερματισμού

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

Βασικές Έννοιες Δοµών Δεδοµένων

Συγκρίσιμα Αντικείμενα (comparable)

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

Στοιχειώδεις Δομές Δεδομένων

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

ΔυαδικάΔΕΝΔΡΑΑναζήτησης

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

ΠΛΗ111. Ανοιξη Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

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

Δοµές Δεδοµένων. 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Στοίβες με Δυναμική Δέσμευση Μνήμης

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

Generics και ArrayLists

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

Γραμμικές λίστες. Γκόγκος Χρήστος ΤΕΙ Ηπείρου

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Week. 6: Java Collections

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

Διάλεξη 08: ΛίστεςΙΙ Κυκλικές Λίστες. Διδάσκων: Παναγιώτης Ανδρέου

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

1 Εισαγωγή στις οµές εδοµένων 2. 2 Στοίβα (Stack) 4. 3 Ουρά (Queue) 7. 4 Λίστα (List) 9. 5 Συνδεδεµένη Λίστα (Linked List) 14

POINTERS, AGGREGATION, COMPOSITION

1 Εισαγωγή στις οµές εδοµένων 2. 2 Στοίβα (Stack) 4. 3 Ουρά (Queue) 7. 4 Λίστα (List) 9. 5 Συνδεδεµένη Λίστα (Linked List) 14

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Λίστες Κεφάλαιο 3 (3.3, 3.4, 3.7) Ε. Μαρκάκης Επικ. Καθηγητής

Ουρά Προτεραιότητας (priority queue)

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Στοίβες. ΟΑΤ της Στοίβας. Περιγραφή και Υλικό Ανάγνωσης. Αφηρηµένοι Τύποι εδοµένων (AΤ )

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ µε JAVA

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1

Βασικές Δομές Δεδομένων

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

1 Εισαγωγή στις οµές εδοµένων 2. 2 Στοίβα (Stack) 4. 3 Ουρά (Queue) 7. 4 Λίστα (List) 9. 5 Συνδεδεµένη Λίστα (Linked List) 14

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Λίστες Κεφάλαιο 3 (3.3, 3.4, 3.7) Ε. Μαρκάκης Επικ. Καθηγητής

Δοµές Δεδοµένων. 5η Διάλεξη Λίστες και αρχές ανάλυσης αλγορίθµων. Ε. Μαρκάκης

Δοµές Δεδοµένων. 4η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες και Λίστες. Ε. Μαρκάκης

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

Πανεπιστηµιο Πειραιως Σχολη Τεχνολογιων Πληροφορικης και Επικοινωνιων Τµηµα Ψηφιακων Συστηµατων οµές εδοµένων η Εργασία

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

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

int Α[] = {4, 16, 22, 12, 9, 15, 10}; { 4, 9, 10, 12, 15, 16, 22 } Α[0]=4, Α[1]=9, Α[2]=10 { 4, 16,22, 12, 9, 15, 10} { 4, 12, 16, 22, 9, 15,16, 22 }

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Εξωτερική Αναζήτηση και Β-δέντρα Κεφάλαιο 16. Ε. Μαρκάκης Επίκουρος Καθηγητής

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Transcript:

Απλά (και διπλά) συνδεδεµένες Συνδεδεμένη Λίστα ΣΛ Μια αλυσίδα κόµβων όπου κάθε κόµβος δείχνει στον επόµενό του 12 99 37 18 null O κάθε κόµβος έχει 2 τµήµατα: data: τα δεδοµένα (ή µια αναφορά προς αυτά) next: µια αναφορά προς τον επόµενο κόµβο της λίστας Ο τελευταίος κόµβος έχει null Xρειάζεται να διατηρούµε µια αναφορά προς τον Πρώτο κόµβο της λίστας ιατηρούµε και ένα δείκτη στο Τελευταίο κόµβο της λίστας. VK 23

Χρήση ΣΛ Υλοποίηση Κόμβου Πότε χρησιµοποιώ Λίστα Όταν διαπερνώ γραµµικά τα στοιχεία Αντίθετα όταν θέλω προσπέλαση στο ν-ιοστό στοιχείο καλύτερα Πίνακα Όταν θέλω να αλλάζω συχνά την σειρά των στοιχείων και η µετακίνηση κοστίζει. Υλοποίηση Κόμβου public class Node { private Object data; private Node next; public Node(Object d, Node n) { data=d; next=n; } Όταν θέλω να διατηρώ πολλαπλές ταξινοµήσεις των ίδιων στοιχείων π.χ ταξινόµηση σπουδαστή µε ΑΜ, επώνυµο & όνοµα,τµήµα κτλ. } public Node() { this(nulll,null); } //μέθοδοι get/set VK 24

Πρόσβαση σε κόμβο ΣΛ first Node Συνδεδεµένη λίστα µε 3 κόµβους εν υπάρχει άµεσος τρόπος πρόσβασης σε έναν οποιονδήποτε κόµβο της. Ο µόνος που «γνωρίζει» την ύπαρξη ενός κόµβου είναι ο προηγούµενόςτου, καθώς κρατά την διεύθυνσή του στο πεδίο του next. Για να έχουµε πρόσβαση σε έναν κόµβο πρέπει να περάσουµε στην σειρά από όλους τους προηγούµενους αρχίζοντας από τον πρώτο κόµβο VK 25

current Node Πρόσβαση σε κόμβο ΣΛ first Node Συνδεδεµένη λίστα µε 3 κόµβους Την διατρέχουµε ξεκινώντας από τον πρώτο κόµβο, currentnode=firstnode µετακινούµενοι µέσω του πεδίου του next currentnode=currentnode.next H διαδικασία αυτή µετακίνησης στον επόµενο κόµβο, γίνεται επαναληπτικά, όσες φορές χρειάζεται, ώστε να τοποθετηθούµε στον επιθυµητό κόµβο. VK 26

ΕΙΣΑΓΩΓΗ ΝΕΟΥ κόμβουστην αρχή ΣΛ data input Node first Node Συνδεδεµένη λίστα µε 4 κόµβους Ένας νέος κόμβος inputnode μπορεί να εισαχθεί σε οποιοδήποτε σημείο της λίστας, θα εξετάσουμε δυο περιπτώσεις στην αρχή και το τέλος της λίστας. insertfirst:εισάγει ένα στοιχείο στην αρχήτης λίστας insertlast: εισάγει ένα στοιχείο στο τέλος της λίστας INSERT FIRST (data) Οπρώτος κόμβος θα είναι ο inputnode και επόμενός του (το next) θαείναι οfirstnode inputnode=new Node(data,firstNode) //κλήση δομητή firstnode=inputnode Ή με μια εντολή: firstnode=new Node(data,firstNode) VK 27

ΕΙΣΑΓΩΓΗ ΝΕΟΥ κόμβου στο τέλος ΣΛ first Node input Node data Συνδεδεµένη λίστα µε 4 κόµβους lastnode Μπορούμε να διατηρούμε και ένα κόμβο lastnodeστο τέλος της λίστας INSERT LAST (data) O νέος κόμβος inputnode θα εισαχθεί στο τέλος της λίστας και θαέχει επόμενό τουnull(τέλος λίστας). Ο προηγούμενός του inputnode, θα είναι ο lastnode inputnode =new Node(data,null) // κλήση δομητή lastnode.next= inputnode lastnode= inputnode Ή με μια εντολή:lastnode= lastnode.next= new Node(data,null) VK 28

ΕΙΣΑΓΩΓΗ ΝΕΟΥ κόμβου ΣΛ input Node data first Node last Node Εισαγωγή σε άδεια λίστα - isempty() Όταν είναι άδεια η λίστα δηλ. όταν (firstnode==null) τότε firstnode = lastnode = new Node(data,null) Αλλιώς (όταν έχει μέσα στοιχεία) Ή εισάγω στην αρχή firstnode=new Node(data,firstNode) Ή εισάγω στην τέλος lastnode= lastnode.next= new Node(data,null) VK 29

ΔΙΑΓΡΑΦΗ πρώτου κόμβουσλ ο REMOVE FIRST () Θαδιαγραφεί ο πρώτος κόμβος που έχει σαν data τo o: Object o= firstnode.data θα γίνει πρώτος κόμβος firstnode ο επόμενός του (το next) firstnode= firstnode.next Αν η λίστα είναι άδεια θα δημιουργηθεί ListEmptyException Αν έχει ένα μόνο κόμβο η λίστα θα μείνει άδεια ( firstnode= lastnode =null ) VK 30

current ΔΙΑΓΡΑΦΗ τελευταίου κόμβουσλ current REMOVE LAST () Θα διαγραφεί ο τελευταίος κόμβος που έχει σαν data τo o Object o= lastnode.data current pre LastNode Τελευταίος κόμβος θα γίνει ο προηγούμενός του. Για να βρεθεί πρέπει να διατρέξω την λίστα ξεκινώντας από τον πρώτο κόμβο. Νode current =firstnode while current.next!= lastnode current=current.next Βγαίνοντας από το while έχω βρεί τον προηγούμενο του lastnode current.next=null //ο προηγούμενος θα δείξει null lastnode=current ο VK 31

Λίστα σαν Πίνακας Υλοποίηση σαν ένας πίνακας L από (ομοειδή) αντικείμενα έστω 10 θέσεων. L.length ισούται με 10 private Object[] L; L.size() ισούται με 5 //last first insertfirst (l6) Add insertlast (l7) -1 0 1 2 3 4 5 6 7 8 9 10 l2 l1 l3 l4 l5 D two indexes (first-2δείκτεςέναςγια το πρώτο και ένας για το τελευταίο-last) Delete l1: removefirst() l5: removelast() Λίστα διαγραφή και εισαγωγή στοιχείων και από τις δυο μεριές. Ορίζονται τα insertlast(object), insertfirst(object) removelast(), removefirst(), getlast() getfirst() Άλλο το µέγεθος της λίστας size:5 άλλο του πίνακα length:10 VK 32

Λίστα σαν Πίνακας Υλοποίηση σαν ένας πίνακας L από (ομοειδή) αντικείμενα έστω 10 θέσεων. insertlast(object) L[last++]=l7; insertlast(l7) -1 0 1 2 3 4 5 6 7 8 9 10 two indexes l3 l1 l2 l4 l5 l6 first last Εστω ότι ο δείκτης last στο τέλος του πίνακα ΕΙΚΟΝΙΚΗ ΥΠΕΡΧΕΙΛΙΣΗ (µε γεµάτες τις τελευταίες θέσεις) LAST ΕΙΚΟΝΙΚΗ ΥΠΕΡΧΕΙΛΙΣΗ (µε γεµάτες τις πρώτες θέσεις) FIRST To full() ορίζεται σαν (size() == L.length) // (6==10) Bάζοντας στοιχεία φθάνω στο last=q.length αλλά δεν είναι full() Τότε πρέπει να γίνει ευθυγράµµιση alignmentlast(), καθορίζοντας όµως πόσες είναι οι ελεύθερες θέσεις : free = L.length-size(); free /=2 ; //τις µοιράζω VK 33

class ArrayQueue { private Object[] S; private int top = 0; ΣΤΟΙΒΑ-ΟΥΡΑ-ΛΙΣΤΑ class ArrayQueue { private Object[] Q; private int first = 0; private int last = 0; private void alignment() class ArrayList {private Object[] L; private int first = 0; private int last = 0; private void alignmentfirst() private void alignmentlast() 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 public int size() public boolean isempty() public boolean isfull() public void push(object element) throws StructureFullException public Object pop() public Object top() public boolean contains(object obj) public boolean equals(datastructure otherstructure) public void clear() } public int size() public boolean isempty() public boolean isfull() public void enqueue(object element) throws StructureFullException public Object dequeue() public Object front() public boolean contains(object obj) public boolean equals(datastructure otherstructure) public void clear() } public int size() public boolean isempty() public boolean isfull() public void insestlast(object element) throws StructureFullException public void insestfirst(object element) throws StructureFullException public Object removelast() public Object removefirst() public Object getlast() public Object getfirst() public boolean contains(object obj) public boolean equals(datastructure otherstructure) public void clear() VK 34 }