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

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

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

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

ιαφάνειες παρουσίασης #10 (β)

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

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

ιαφάνειες παρουσίασης #6 (α)

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

ιαφάνειες παρουσίασης #5 (β)

Ενότητα 2 Στοίβες Ουρές - Λίστες

οµές εδοµένων 3 ο Εξάµηνο ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ

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

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

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

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

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

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

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

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

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

#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα

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

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

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

ΕΝΟΤΗΤΑ 3 ΓΡΑΜΜΙΚΕΣ ΛΙΣΤΕΣ

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

Ενότητα 2 Στοίβες Ουρές - Λίστες. ΗΥ240 - Παναγιώτα Φατούρου 1

Στοίβες Ουρές - Λίστες

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

ένδρα (tail, head) Γονέας Παιδί (ancestor, descendant) Φύλλο Εσωτερικός Κόµβος (leaf, non-leaf) που αποτελεί το γονέα του v.

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

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

IsEmptyList(L): επιστρέφει true αν L = < >, false

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

ένδρα u o Κόµβοι (nodes) o Ακµές (edges) o Ουρά και κεφαλή ακµής (tail, head) o Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) o Μονοπάτι (pat

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

Βασικές Δοµές Δεδοµένων. Σύντοµη επανάληψη (ΕΠΛ 035).

Ενότητα 2 Στοίβες Ουρές - Λίστες

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

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

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

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

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

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

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

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

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

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

ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

Insert(K,I,S) Delete(K,S)

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

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

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

υναµικές οµές εδοµένων

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 2η: Στοίβες Ουρές - Λίστες Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Διδάσκων: Κωνσταντίνος Κώστα

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

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

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Αποτελέσματα προόδου

Ενότητα 7 Ουρές Προτεραιότητας

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

Μεταγλωττιστές Βελτιστοποίηση

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

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

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Δημιουργία Δυαδικών Δέντρων Αναζήτησης

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

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

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

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

Διάλεξη 9: Αφηρημένοι Τύποι Δεδομένων. Διδάσκων: Παναγιώτης Ανδρέου

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

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

Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής και Τηλεπικοινωνιών. Παραλληλία. Κ. Χαλάτσης, Εισαγωγή στην Επιστήµη της Πληροφορικής και των Τηλεπικοινωνιών

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

Αλγόριθμοι και δομές δεδομένων

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ


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

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

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

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

8.6 Κλάσεις και αντικείμενα 8.7 Δείκτες σε γλώσσα μηχανής

Transcript:

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης #11!Στοίβες (συνέχεια)!ουρές!γραµµικές λίστες!γράφοι! υαδικά δέντρα Νίκος Παπασπύρου Προγραµµατισµός Ηλεκτρονικών Υπολογιστών 1

Στοίβες (vi)! Υλοποίηση µε απλά συνδεδεµένη λίστα top 2

Στοίβες (vii)! Υλοποίηση µε απλά συνδεδεµένη λίστα type node = record info : integer; next : ^node ; stack = ^node! Άδεια στοίβα function empty : stack; begin empty := nil 3

Στοίβες (viii)! Προσθήκη στοιχείου procedure push (var s : stack, data : integer); var p : ^node; begin new(p); p^.info := data; p^.next := s; s := p 4

Στοίβες (ix)! Αφαίρεση στοιχείου procedure pop (var s : stack; var data : integer; var nonempty : boolean); var p : ^node; begin if s = nil then nonempty := false else begin p := s; data := s^.info; s.top := s^.next; dispose(p); nonempty := true 5

Ουρές (i)! First In First Out (FIFO) ό,τι µπαίνει πρώτο, βγαίνει πρώτο µπροστά (front) κεφαλή (head) πίσω (rear) ουρά (tail) 6

Ουρές (ii)! Αφηρηµένος τύπος δεδοµένων " Ορίζεται ο τύπος queue που υλοποιεί την ουρά (ακεραίων αριθµών) " Ορίζονται οι απαραίτητες πράξεις: empty enqueue dequeue isempty η άδεια ουρά προσθήκη στοιχείου στο τέλος αφαίρεση στοιχείου από την αρχή έλεγχος για άδεια ουρά 7

Ουρές (iii)! Υλοποίηση µε απλά συνδεδεµένη λίστα front rear 8

Ουρές (iv)! Υλοποίηση µε απλά συνδεδεµένη λίστα type node = record info : integer; next : ^node ; queue = record front : ^node; rear : ^node! Άδεια ουρά function empty : queue; begin empty.front := nil; empty.rear := nil; 9

Ουρές (v)! Προσθήκη στοιχείου procedure enqueue (var q : queue, data : integer); var p : ^node; begin new(p); p^.info := data; p^.next := nil; if q.front = nil then q.front := p else q.rear^.next := p; q.rear := p 10

Ουρές (vi)! Αφαίρεση στοιχείου procedure dequeue (var q : queue; var data : integer; var nonempty : boolean); var p : ^node; begin if q.front = nil then nonempty := false else begin p := q.front; data := q.front^.info; if q.front = q.rear then q.rear := nil q.front := q.front^.next; dispose(p); nonempty := true 11

Γραµµικές λίστες (i)! Γενική µορφή απλά συνδεδεµένης λίστας list 12

Γραµµικές λίστες (ii)! Εισαγωγή στο τέλος procedure insertatrear ( var list : ^node; data : integer); var p, q : ^node; begin new(p); p^.info := data; p^.next := nil; if list = nil then list := p else begin q := list; while q^.next <> nil do q := q^.next; q^.next := p 13

Γραµµικές λίστες (iii)! Εισαγωγή µετά τον κόµβο p procedure insertafter (p : ^node; data : integer); var q : ^node; begin if p <> nil then begin new(q); q^.info := data; q^.next := p^.next; p^.next := q p q 14

Γραµµικές λίστες (iv)! ιαγραφή του κόµβου µετά τον p procedure deleteafter (var p : ^node; var data : integer); var q : ^node; begin if p <> nil and (p^.next <> nil) then begin q := p^.next; data := q^.info; p^.next := q^.next; dispose(q) p q 15

Γραµµικές λίστες (v)! Εύρεση στοιχείου function search (list : ^node; data : integer) : ^node; var p : ^node; found : boolean; begin p := list; found := false; while (p <> nil) and not found do if p^.info = x then found := true else p := p^.next; search := p 16

Γραµµικές λίστες (vi)! Αντιστροφή λίστας procedure reverse (var list : ^node); var p, q : ^node; begin q := nil; while list <> nil do begin p := list; list := p^.next; p^.next := q; q := p ; list := q 17

Γραµµικές λίστες (vii)! Συνένωση δύο λιστών procedure listconcat (var list1 : ^node; list2 : ^node); var p : ^node; begin if list2 <> nil then if list1 = nil then list1 := list2 else begin p := list1; while p^.next <> nil do p := p^.next; p^.next := list2 18

Κυκλικές λίστες! Ο επόµενος του τελευταίου κόµβου είναι πάλι ο πρώτος 19

ιπλά συνδεδεµένες λίστες! υο σύνδεσµοι σε κάθε κόµβο, προς τον επόµενο και προς τον προηγούµενο 20

ιπλά συνδεδεµένες κυκλικές λίστες! υο σύνδεσµοι σε κάθε κόµβο, προς τον επόµενο και προς τον προηγούµενο! Ο επόµενος του τελευταίου είναι ο πρώτος! Ο προηγούµενος του πρώτου είναι ο τελευταίος 21

Γράφοι (i)! Γράφος ή γράφηµα (graph) G = (V, E) " V Σύνολο κόµβων ή κορυφών " EΣύνολο ακµών, δηλαδή ζευγών κόµβων! Παράδειγµα V = { 1, 2, 3, 4, 5, 6, 7 } E = { (x, y) x, y V, x+y=4 ή x+y=7 }! Γραφική παράσταση 3 4 1 6 2 5 7 22

Γράφοι (ii)! Κατευθυνόµενος γράφος (directed graph) " Οι ακµές είναι διατεταγµένα ζεύγη " Μπορούν να υλοποιηθούν µε δείκτες 1 4 6 2 5 7 3 23

υαδικά δέντρα (i)! Ειδικοί γράφοι της µορφής: α ρίζα! Κάθε κόµβος έχει 0, 1 ή 2 παιδιά! Ρίζα: ο αρχικός κόµβος του δένδρου! Φύλλα: κόµβοι χωρίς παιδιά λ β ι η µ β δ κ γ ε θ φύλλα ζ 24

υαδικά δέντρα (ii)! Πλήρες δυαδικό δέντρο:! Μόνο το κατώτατο επίπεδο µπορεί να µην είναι πλήρες ι β α δ κ ε γ η θ ζ λ! Πλήθος κόµβων = n ύψος = Ο(logn) 25

υαδικά δέντρα! Υλοποίηση µε πίνακα " Αν ένας κόµβος αποθηκεύεται στη θέση i του πίνακα, τα παιδιά του αποθηκεύονται στις θέσεις 2i και 2i+1! Παράδειγµα a[1] := 'γ'; a[7] := 'λ'; a[2] := 'δ'; a[8] := 'ι'; a[3] := 'ζ'; a[9] := 'α'; a[4] := 'β'; a[10] := 'κ'; a[5] := 'ε'; a[11] := 'η'; a[6] := 'θ' 8 ι 4 (iii) i 2i 2i+1 1 γ 2 3 δ ζ 6 7 β 5 ε θ λ α κ η 9 10 11 26

υαδικά δέντρα (iv)! Υλοποίηση µε δείκτες type node = record info : integer; left, right : ^node info left right 27

υαδικά δέντρα (v)! ιάσχιση όλων των κόµβων ενός δέντρου " προθεµατική διάταξη (preorder) για κάθε υποδέντρο, πρώτα η ρίζα, µετά το αριστερό υποδέντρο και µετά το δεξιό " επιθεµατική διάταξη (postorder) για κάθε υποδέντρο, πρώτα το αριστερό υποδέντρο, µετά το δεξιό και µετά η ρίζα " ενθεµατική διάταξη (inorder) για κάθε υποδέντρο, πρώτα το αριστερό υποδέντρο, µετά η ρίζα και µετά το δεξιό 28

υαδικά δέντρα (vi)! ιάσχιση preorder 1 γ 2 δ ζ 8 3 β 5 ε 9 10 θ λ α κ η 4 6 7 ι 11 29

υαδικά δέντρα (vii)! ιάσχιση postorder 11 γ 6 δ ζ 10 2 β 5 ε 7 9 θ λ α κ η 1 3 4 ι 8 30

υαδικά δέντρα (viii)! ιάσχιση inorder 7 γ 3 δ ζ 9 1 β 5 ε 8 10 θ λ α κ η 2 4 6 ι 11 31

υαδικά δέντρα (ix)! Υλοποίηση της διάσχισης preorder procedure preorder (p : ^node); begin if p <> nil then begin write(p^.info); preorder(p^.left); preorder(p^.right)! Η παραπάνω διαδικασία είναι αναδροµική! Η µη αναδροµική διάσχιση είναι εφικτή αλλά πολύπλοκη (threading) 32