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

Σχετικά έγγραφα
Δομές Δεδομένων. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

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

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

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

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

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

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

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

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

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

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

Διαδικαστικός Προγραμματισμός

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

Προγραμματισμός Η/Υ. 4 η ενότητα: Δομές Δεδομένων. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

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

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Προγραμματισμός Η/Υ. Δομές Δεδομένων. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

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

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

Οι δομές δεδομένων στοίβα και ουρά

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

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

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

Δομές Δεδομένων. Ενότητα 9: Τα ΔΔΑ ως Αναδρομικές Δομές Δεδομένων-Εφαρμογή Δυαδικών Δέντρων: Κωδικοί Huffman. Καθηγήτρια Μαρία Σατρατζέμη

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

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

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

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

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

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

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

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

Δομημένος Προγραμματισμός

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

Φροντιστήριο 4 Σκελετοί Λύσεων

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

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

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

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

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

Πληροφορική. Εργαστηριακή Ενότητα 3 η : Επεξεργασία Κελιών Γραμμών & Στηλών. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

Σε μια στοίβα 10 θέσεων έχουν τοποθετηθεί διαδοχικά τα στοιχεία: Σ, Γ, Μ, Α, Δ στην 1η, 2η, 3η, 4η και 5η θέση αντίστοιχα. Να προσδιορίσετε την τιμή

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

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

ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ

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

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

Αλγόριθμοι και Δομές Δεδομένων(Θ) Ευάγγελος Γ. Ούτσιος

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

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

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

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

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

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

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

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Φροντιστήριο 4 Σκελετοί Λύσεων

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

Εισαγωγή στους Αλγορίθμους

Προγραμματισμός Ι (ΗΥ120)

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

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Λογιστικές Εφαρμογές Εργαστήριο

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 1: Ορισμοί βασικών εννοιών: Μια πρώτη μοντελοποίηση. Ευαγγελίδης Γεώργιος Τμήμα Εφαρμοσμένης Πληροφορικής

Ηλεκτρονικοί Υπολογιστές

Σημειώσεις ένατης εβδομάδας

Κάθε στοιχείο που γίνεται αντιληπτό με μία από τις πέντε αισθήσεις μας

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

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

Αλγόριθμοι Αναζήτησης

3 ΟΥ και 9 ΟΥ ΚΕΦΑΛΑΙΟΥ

Διαδικαστικός Προγραμματισμός

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

ΣΤΑΤΙΣΤΙΚΗ ΑΝΑΛΥΣΗ ΜΕ ΧΡΗΣΗ Η/Υ

Εισαγωγή στους Αλγορίθμους

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΑΕΠΠ 7o Επαναληπτικό Διαγώνισμα

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

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

Επιµέλεια Θοδωρής Πιερράτος

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

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

Transcript:

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

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Μακεδονίας» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Σκοποί ενότητας Να χρησιμοποιήσουν Συνδεδεμένες λίστες για να υλοποιήσουν αποτελεσματικά ένα αλφαβητικό ευρετήριο Να κατανοήσουν ότι η στοίβα και η ουρά μπορούν να υλοποιηθούν ως συνδεδεμένες δομές 4

Περιεχόμενα ενότητας Αλφαβητικό ευρετήριο κειμένου Παράδειγμα αλφαβητικού ευρετηρίου κειμένου Αλγόριθμος κατασκευής αλφαβητικού ευρετηρίου Υλοποίηση στοίβας και ουράς με δείκτες Υλοποίηση στοίβας με δείκτες Πακέτο για τον ΑΤΔ Συνδεδεμένη Στοίβα Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά 5

Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου 6

Αλφαβητικό ευρετήριο κειμένου -1- Ένα αλφαβητικό ευρετήριο κειμένου (text concordance) είναι μια αλφαβητική λίστα όλων των διαφορετικών λέξεων από ένα κομμάτι κειμένου. Το γεγονός ότι οι λέξεις σε ένα αλφαβητικό ευρετήριο είναι ταξινομημένες με αλφαβητική σειρά σημαίνει ότι ένα αλφαβητικό ευρετήριο είναι μια ταξινομημένη λίστα. 7

Αλφαβητικό ευρετήριο κειμένου -2- Κατασκευή ευρετηρίου: Ξεκινάμε με μια άδεια λίστα. Κάθε λέξη διαβάζεται και τοποθετείται στη σωστή θέση μέσα στη λίστα, εφόσον δεν υπάρχει ήδη στη λίστα. Προφανώς, μπορεί να χρειαστεί η εισαγωγή λέξεων να γίνει σε οποιοδήποτε σημείο της λίστας, οπότε χρειαζόμαστε μια συνδεδεμένη λίστα. Για κάθε λέξη που διαβάζεται πρέπει να γίνει σειριακή αναζήτηση της συνδεδεμένης λίστας ξεκινώντας από τον πρώτο κόμβο. 8

Αλφαβητικό ευρετήριο κειμένου -3- Αν πρόκειται για μεγάλο κείμενο, το ευρετήριο μπορεί να γίνει τόσο μεγάλο που η αναζήτηση μιας και μόνο λίστας δεν είναι αποδοτική. Για να μειωθεί ο χρόνος αναζήτησης, μπορούμε να χρησιμοποιήσουμε πολλές μικρές συνδεδεμένες λίστες. 9

Αλφαβητικό ευρετήριο κειμένου -4- Για το συγκεκριμένο πρόβλημα: μπορούμε να κατασκευάσουμε μια συνδεδεμένη λίστα για κάθε γράμμα της αλφαβήτου, δηλαδή μια λίστα με λέξεις που ξεκινάν από "Α", μια λίστα με λέξεις που ξεκινάν από "Β", κ.ο.κ. Επομένως, συνολικά θα χρειαστούν 24 συνδεδεμένες λίστες καθώς και 24 δείκτες, ένας για κάθε λίστα, οπότε μπορούμε να χρησιμοποιήσουμε έναν πίνακα δεικτών με δείκτες από "Α" ως "Ω". 10

Παράδειγμα αλφαβητικού ευρετηρίου κειμένου -1- Έστω, ότι έχουμε το παρακάτω κείμενο: Ο Κώστας και η Ελένη ζουν σε ένα όμορφο σπίτι στα περίχωρα της πόλης μαζί με τα δυο τους παιδιά, τον Γιάννη και τον Ανέστη. Οι παρακάτω συνδεδεμένες λίστες δείχνουν πώς μπορεί να αποθηκευτεί το αλφαβητικό ευρετήριο αυτού του κειμένου: 11

Παράδειγμα αλφαβητικού ευρετηρίου κειμένου -2- Για να εμφανιστεί το ευρετήριο αρκεί να διασχίσουμε τις 24 αυτές συνδεδεμένες λίστες. 12

Αλγόριθμος κατασκευής αλφαβητικού ευρετηρίου -1- /*Είσοδος: Ένα αρχείο κειμένου. Λειτουργία: Κατασκευάζει ένα αλφαβητικό ευρετήριο κειμένου από ένα έγγραφο που είναι αποθηκευμένο σε ένα αρχείο. Το ευρετήριο αποθηκεύεται σε μια δομή δεδομένων που αποτελείται από έναν πίνακα συνδεδεμένων λιστών, List, όπου List[Ch] είναι μια ταξινομημένη συνδεδεμένη λίστα λέξεων που ξεκινούν από το γράμμα Ch. Έξοδος: Μια λίστα των διαφορετικών λέξεων του αρχείου.*/ 13

Αλγόριθμος κατασκευής αλφαβητικού ευρετηρίου -2-1. Για Ch από 'Α' μέχρι 'Ω' Δημιούργησε μια κενή συνδεδεμένη λίστα, List[Ch] Τέλος_επανάληψης 2. Άνοιξε το αρχείο και πάρε την πρώτη λέξη Word 14

Αλγόριθμος κατασκευής αλφαβητικού ευρετηρίου -3-3. Όσο υπάρχουν λέξεις προς επεξεργασία επανάλαβε a) Ψάξε στη λίστα των λέξεων που ξεκινούν από το ίδιο γράμμα που ξεκινά και η Word για να δεις αν ήδη υπάρχει εκεί η λέξη αυτή b) Αν δεν υπάρχει η λέξη Word στην αντίστοιχη λίστα των λέξεων τότε εισήγαγε την Word στη λίστα αυτή c) Πάρε την επόμενη λέξη Word Τέλος_επανάληψης 15

Αλγόριθμος κατασκευής αλφαβητικού ευρετηρίου -4-4. Για Ch από 'Α' μέχρι 'Ω' Αν η List[Ch] δεν είναι κενή τότε Διάσχισε τη λίστα εμφανίζοντας κάθε λέξη της Τέλος_αν Τέλος_επανάληψης 16

Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες 17

Υλοποίηση στοίβας και ουράς με δείκτες Η χρήση πινάκων ως τη βασική αποθηκευτική δομή δεν είναι πιστή υλοποίηση των λιστών, επειδή το σταθερό μέγεθος του πίνακα ορίζει σταθερό μέγεθος για τη λίστα. Το ίδιο είδαμε ότι ισχύει και για τις στοίβες και τις ουρές: η υλοποίησή τους με πίνακες θέτει ένα όριο στο μέγεθος της στοίβας ή της ουράς, ενώ θεωρητικά μπορούν να είναι απεριόριστες. Tώρα θα δούμε πώς υλοποιούνται οι στοίβες και οι ουρές ως συνδεδεμένες δομές 18

Υλοποίηση στοίβας με δείκτες -1- Μια στοίβα είναι μια λίστα που μπορεί να προσπελαστεί μόνο σε μια άκρη της, την κορυφή. Εφόσον, λοιπόν, σε μια συνδεδεμένη λίστα μόνο ο πρώτος κόμβος είναι άμεσα προσπελάσιμος (ο δείκτης List δείχνει πάντα στον πρώτο κόμβο), είναι πολύ λογικό να χρησιμοποιήσουμε μια συνδεδεμένη λίστα για να υλοποιήσουμε μια στοίβα (linked stack). 19

Υλοποίηση στοίβας με δείκτες -2- Για μια τέτοια υλοποίηση στοίβας σε C μπορεί να κατασκευαστεί η μονάδα StacκADT.c, όπου φαίνονται οι απαραίτητες δηλώσεις καθώς και οι διαδικασίες: δημιουργίας κενής συνδεδεμένης στοίβας, ελέγχου αν μια συνδεδεμένη στοίβα είναι κενή, απώθησης και ώθησης στοιχείου στην συνδεδεμένη στοίβα. Οι διαδικασίες: δημιουργίας μιας κενής συνδεδεμένης στοίβας και ελέγχου αν μια συνδεδεμένη στοίβα είναι κενή είναι ίδιες με τις αντίστοιχες της συνδεδεμένης λίστας 20

Υλοποίηση στοίβας με δείκτες -3- Η λειτουργία της απώθησης για μια συνδεδεμένη στοίβα είναι στην ουσία η λειτουργία της διαγραφής του πρώτου στοιχείου μιας συνδεδεμένης λίστας, επομένως, η διαδικασία Pop είναι η απλοποιημένη διαδικασία Delete. Η διαδικασία της ώθησης σε μια στοίβα είναι παρόμοια με τη διαδικασία της εισαγωγής σε μια συνδεδεμένη λίστα, όταν η εισαγωγή γίνεται στην αρχή της.. 21

Πακέτο για τον ΑΤΔ Συνδεδεμένη Στοίβα -1- // StackADT.h typedef int StackElementType; /*ο τύπος των στοιχείων της στοίβας ενδεικτικά τύπου int */ typedef struct StackNode *StackPointer; typedef struct StackNode { StackElementType Data; StackPointer Next; } StackNode; typedef enum { FALSE, TRUE } boolean; 22

Πακέτο για τον ΑΤΔ Συνδεδεμένη Στοίβα -2- void CreateStack(StackPointer *Stack); boolean EmptyStack(StackPointer Stack); void Push(StackPointer *Stack, StackElementType Item); void Pop(StackPointer *Stack, StackElementType *Item); 23

Πακέτο για τον ΑΤΔ Συνδεδεμένη // StackADT.c Στοίβα -3- void CreateStack(StackPointer *Stack) /*Λειτουργία: Δημιουργεί μια κενή συνδεδεμένη στοίβα. Επιστρέφει: Μια κενή συνδεδεμένη στοίβα, Stack.*/ { *Stack = NULL; } 24

Πακέτο για τον ΑΤΔ Συνδεδεμένη Στοίβα -4- boolean EmptyStack(StackPointer Stack); /*Δέχεται: Μια συνδεδεμένη στοίβα, Stack. Λειτουργία: Ελέγχει αν η Stack είναι κενή. Επιστρέφει: TRUE αν η στοίβα είναι κενή, FALSE διαφορετικά.*/ { return (Stack == NULL); } 25

Πακέτο για τον ΑΤΔ Συνδεδεμένη Στοίβα -5- void Pop(StackPointer *Stack, StackElementType *Item) /*Δέχεται: Μια συνδεδεμένη στοίβα που η κορυφή της δεικτοδοτείται από τον δείκτη Stack. Λειτουργία: Αφαιρεί από την κορυφή της συνδεδεμένης στοίβας, αν η στοίβα δεν είναι κενή, το στοιχείο Item. Επιστρέφει: Την τροποποιημένη συνδεδεμένη στοίβα και το στοιχείο Item. Έξοδος: Μήνυμα κενής στοίβας, αν η συνδεδεμένη στοίβα είναι κενή.*/ 26

Πακέτο για τον ΑΤΔ Συνδεδεμένη Στοίβα -6- { } StackPointer TempPtr; if (EmptyStack(*Stack)) printf("empty Stack\n"); else { TempPtr = *Stack; *Item = TempPtr->Data; *Stack = TempPtr->Next; free(tempptr); } 27

Πακέτο για τον ΑΤΔ Συνδεδεμένη Στοίβα -7- void Push(StackPointer *Stack, StackElementType Item) /*Δέχεται: Μια συνδεδεμένη στοίβα που η κορυφή της δεικτοδοτείται από τον δείκτη Stack και ένα στοιχείο Item. Λειτουργία: Εισάγει στην κορυφή της συνδεδεμένης στοίβας, το στοιχείο Item. Επιστρέφει: Την τροποποιημένη συνδεδεμένη στοίβα.*/ 28

Πακέτο για τον ΑΤΔ Συνδεδεμένη Στοίβα -8- } { StackPointer TempPtr; TempPtr = (StackPointer) malloc(sizeof(struct StackNode)); TempPtr->Data = Item; TempPtr->Next = *Stack; *Stack = TempPtr; 29

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -1- Με παρόμοιο τρόπο μπορεί να υλοποιηθεί μια ουρά ως συνδεδεμένη λίστα. Η ουρά, είναι μια λίστα, στην οποία αφαιρούνται στοιχεία μόνο από το ένα άκρο της, που λέγεται εμπρός ή κεφάλι, και εισάγονται στοιχεία μόνο στο άλλο άκρο της, το πίσω ή ουρά. Σε μια υλοποίηση ουράς ως συνδεδεμένη λίστα (linked queue), λοιπόν, μπορούμε να θεωρήσουμε το πρώτο στοιχείο της λίστας σαν το κεφάλι της ουράς, οπότε η διαδικασία της διαγραφής είναι ίδια με τη διαγραφή από στοίβα. 30

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -2- Για την εισαγωγή, όμως, στοιχείου στη συνδεδεμένη ουρά θα πρέπει να γίνει διάσχιση της ουράς, ώστε να βρεθεί το τελευταίο στοιχείο της. Η διάσχιση μπορεί να αποφευχθεί αν διατηρούμε δύο δείκτες, έναν για το πρώτο στοιχείο, δηλαδή το κεφάλι, και έναν για το τελευταίο, δηλαδή την ουρά της συνδεδεμένης ουράς. 31

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -3- // QueueADT.h typedef int QueueElementType; typedef struct QueueNode *QueuePointer; typedef struct QueueNode { QueueElementType Data; QueuePointer Next; } QueueNode; typedef struct { QueuePointer Front; QueuePointer Rear; } QueueType; typedef enum { FALSE, TRUE } boolean; 32

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -4- void CreateQ(QueueType *Queue); boolean EmptyQ(QueueType Queue); void AddQ(QueueType *Queue, QueueElementType Item); void RemoveQ(QueueType *Queue, QueueElementType *Item); 33

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -5- void CreateQ(QueueType *Queue) /*Λειτουργία: Δημιουργεί μια κενή συνδεδεμένη ουρά. Επιστρέφει: Μια κενή συνδεδεμένη ουρά.*/ { Queue->Front = NULL; Queue->Rear = NULL; } 34

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -6- boolean EmptyQ(QueueType Queue) /*Δέχεται: Μια συνδεδεμένη ουρά. Λειτουργία: Ελέγχει αν η συνδεδεμένη ουρά είναι κενή. Επιστρέφει: TRUE αν η ουρά είναι κενή, FALSE διαφορετικά.*/ { return (Queue.Front == NULL); } 35

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -7- void RemoveQ(QueueType *Queue, QueueElementType *Item) /*Δέχεται: Μια συνδεδεμένη ουρά. Λειτουργία: Αφαιρεί το στοιχείο Item από την κορυφή της συνδεδεμένης ουράς, αν δεν είναι κενή. Επιστρέφει: Το στοιχείο Item και την τροποποιημένη συνδεδεμένη ουρά. Έξοδος: Μήνυμα κενής ουράς, αν η ουρά είναι κενή.*/ 36

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -8- { } QueuePointer TempPtr; if (EmptyQ(*Queue)) printf("empty Queue\n"); else { TempPtr = Queue->Front; *Item = TempPtr->Data; Queue->Front = Queue->Front->Next; free(tempptr); if (Queue->Front == NULL) Queue->Rear = NULL; } 37

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -9- void AddQ(QueueType *Queue, QueueElementType Item) /*Δέχεται: Μια συνδεδεμένη ουρά Queue και ένα στοιχείο Item. Λειτουργία: Προσθέτει το στοιχείο Item στο τέλος της συνδεδεμένης ουράς Queue. Επιστρέφει: Την τροποποιημένη ουρά.*/ 38

Πακέτο για τον ΑΤΔ Συνδεδεμένη Ουρά -10- } { QueuePointer TempPtr; TempPtr = (QueuePointer) malloc(sizeof(struct QueueNode)); TempPtr->Data = Item; TempPtr->Next = NULL; if (Queue->Front == NULL) else Queue->Front = TempPtr; Queue->Rear->Next = TempPtr; Queue->Rear=TempPtr; 39

Τέλος Ενότητας