Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 1. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Στοίβες και Ουρές. Οικονοµικό Πανεπιστήµιο Αθηνών

Σχετικά έγγραφα
Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

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

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

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 2. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης

Τµήµα Πληροφορικής. Υλοποίηση LRU Cache ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ - ΕΡΓΑΣΙΑ 4. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Γενικά περί Caching

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

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

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

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

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

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

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

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

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

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

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

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

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 3. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Εφαρµογές των Δέντρων Δυαδικής Αναζήτησης

public class ArrayStack implements Stack {

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

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

Εγχειρίδιο Χρήστη - Μαθητή

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Δευτέρα 22 / 11 / 2017 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

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

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

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

turnin Lab2.hs

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

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

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

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

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

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

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

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

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

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

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

public class ArrayQueue implements Queue {

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

ΕΠΛ131 Αρχές Προγραμματισμού

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

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

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

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

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

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

Διορθώσεις σελ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗ

Υλοποίηση Λειτουργιών Στοίβας Απλά(1/2)

4 Συλλογές Αντικειμένων

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Πληρουορική Γ Γσμμασίοσ

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

12.6. Άσκηση 6 - [αξιοποίηση γραφικής διεπαφής (GUI)] (έκδοση 2006)

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

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

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

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

ΗΥ-100: Εισαγωγή στην Επιστήμη Υπολογιστών 3η σειρά ασκήσεων

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

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

abistarakis PASS - Σωστή κατασκευή tgz και ονοµασία αρχείων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Μαθήματα Scratch -Δραστηριότητα 1 Παλέτα Κίνηση

Εργασία Μαθήματος Αξία: 40% του τελικού σας βαθμού Ανάθεση: Παράδοση:

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

Transcript:

Οικονοµικό Πανεπιστήµιο Αθηνών Τµήµα Πληροφορικής Φθινοπωρινό Εξάµηνο 2016 Δοµές Δεδοµένων - Εργασία 1 Διδάσκων: E. Μαρκάκης Στοίβες και Ουρές Σκοπός της εργασίας είναι η εξοικείωση µε βασικούς αφηρηµένους τύπους δεδοµένων όπως οι στοίβες, και οι ουρές FIFO. Η εργασία αποτελείται από υλοποιήσεις ΑΤΔ (Μερη Α και Γ) καθώς και 1 εφαρµογή (Μέρος Β). Διαβάστε προσεκτικά την εκφώνηση και τα ζητούµενα της εργασίας. Μέρος Α. Στο παράρτηµα της εκφώνησης δίνονται οι διεπαφές StringStack και StringQueue, που δηλώνουν τις βασικές µεθόδους για µια στοίβα και µια ουρά FIFO, µε στοιχεία τύπου String. Δηµιουργήστε µία υλοποίηση των ΑΤΔ StringStack και StringQueue, δηλαδή γράψτε 2 κλάσεις που υλοποιούν τις 2 διεπαφές. Οι κλάσεις σας πρέπει να λέγονται StringStackImpl και StringQueueImpl. Η υλοποίηση και για τις 2 διεπαφές θα πρέπει να γίνει χρησιµοποιώντας λίστα µονής σύνδεσης. Κάθε πράξη εισαγωγής ή εξαγωγής στοιχείου (δηλαδή κάθε εκτέλεση των µεθόδων push και pop στη στοίβα, και put και get στην ουρά) θα πρέπει να ολοκληρώνεται σε χρόνο Ο(1), δηλαδή σε χρόνο ανεξάρτητο από τον αριθµό των αντικειµένων που είναι µέσα στην ουρά. Όταν η στοίβα ή η ουρά είναι άδεια, οι µέθοδοι που διαβάζουν από την δοµή θα πρέπει να πετάνε εξαίρεση τύπου NoSuchElementException. Η εξαίρεση NoSuchElementException ανήκει στην core βιβλιοθήκη της Java. Κάντε την import από το πακέτο java.util. Μην κατασκευάσετε δική σας εξαίρεση. Μπορείτε να χρησιµοποιήσετε τη λίστα µονής σύνδεσης που παρουσιάστηκε στο εργαστήριο 2 του µαθήµατος ή να γράψετε εξ ολοκλήρου τη δική σας λίστα ή να χρησιµοποιήσετε µόνο αντικείµενα τύπου Node µέσα στην κλάση της στοίβας/ουράς. Για να αποκτήσετε καλύτερη εξοικείωση προτείνουµε να ξεκινήσετε από την αρχή και να γράψετε τις δικές σας κλάσεις (σίγουρα δεν θα χάσετε µονάδες όµως χρησιµοποιώντας ό,τι έχετε δει στο εργαστήριο). Προαιρετικά: µπορείτε να κάνετε την υλοποίηση σας µε χρήση generics για να µπορείτε να χειρίζεστε στοίβες και ουρές µε οποιοδηποτε τύπο αντικειµένων. Υπάρχει ένα 10% bonus σε όσους χρησιµοποιήσουν generics για όλη την εργασία. Δεν επιτρέπεται να χρησιµοποιήσετε έτοιµες υλοποιήσεις δοµών τύπου λίστας, στοίβας, ουράς, από την βιβλιοθήκη της Java (π.χ. Vector, ArrayList κλπ). Τα αρχεία StringStack.java και StringQueue.java που περιέχουν τις δηλώσεις των διεπαφών είναι διαθέσιµα στo φάκελο Εγγραφα/Εργασίες στο eclass.

Μέρος Β. Χρησιµοποιώντας την υλοποίηση της στοίβας του µέρους Α, γράψτε ένα πρόγραµµαπελάτη το οποίο θα κάνει διάσχιση σε έναν λαβύρινθο µε σκοπό να βρίσκει την έξοδο. Το πρόγραµµά σας θα πρέπει να διαβάζει την είσοδο από ένα.txt αρχείο, το οποίο θα περιέχει τον λαβύρινθο σε µορφή πίνακα χαρακτήρων, διαστάσεων n x m, όπου n, m, ακέραιοι. Ο πίνακας µπορεί να περιέχει µόνο τους χαρακτηρες 0, 1 και Ε, όπου το Ε θα βρίσκεται µόνο σε ένα σηµείο του πίνακα και θα υποδηλώνει την είσοδο στο λαβύρινθο. Όταν κάποιος µπαίνει στον λαβύρινθο, µπορεί να κινηθεί οριζόντια ή κάθετα (αλλά όχι διαγώνια) προς οποιαδήποτε κατεύθυνση που περιέχει 0 (δείτε το παράδειγµα παρακάτω). Αν φτάσετε στα σύνορα του πίνακα (πρώτη ή τελευταία γραµµή και πρώτη ή τελευταία στήλη), και βρείτε 0, τότε έχετε φτάσει σε µια έξοδο του λαβυρίνθου. Είναι δυνατόν να υπάρχουν πολλαπλές έξοδοι στο λαβύρινθο (ή και καµία). Το πρόγραµµά σας θα πρέπει να τυπώνει τις συντεταγµένες της εξόδου που βρήκε, ενώ αν δεν υπάρχει τρόπος διαφυγής, θα πρέπει να τυπώνει αντίστοιχο µήνυµα. Παράδειγµα: Η είσοδός θα πρέπει να είναι στην µορφή του παρακάτω παραδείγµατος 9 7 0 3 1 1 1 Ε 1 1 1 1 1 1 0 1 1 1 1 0 0 0 1 0 1 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 1 1 1 0 1 1 0 1 1 0 0 1 0 1 1 1 0 1 1 Στην πρώτη γραµµή, δηλώνονται οι διαστάσεις του λαβυρίνθου (εδώ n=9, m=7). Στην δεύτερη γραµµή ακολουθούν οι συντεταγµένες του σηµείου εισόδου, όπου εδώ είναι στην γραµµή 0 και στην στήλη 3 (υποθέτουµε ότι ονοµάζουµε τις γραµµές από 0 ως n-1 και τις στήλες από 0 ως m- 1). Στο παράδειγµα αυτό, η εξερεύνηση θα ξεκινήσει κινούµενοι προς τα κάτω. Αν στρίψετε αριστερά (όπως κοιτάµε τον πίνακα), θα δείτε ότι θα φτάσετε σύντοµα σε αδιέξοδο και θα πρέπει να γυρίσετε πίσω. Εν τέλει, συνεχίζοντας το ψάξιµο, µια έξοδος που µπορείτε να φτάσετε είναι στις συντεταγµένες (8, 4). Το πρόγραµµα σας πρέπει να λέγεται Thiseas.java. Θα πρέπει να κάνετε χρήση της υλοποίησης της στοίβας από το Μέρος Α. Η χρήση της στοίβας ενδείκνυται για να µπορέσετε να υλοποιήσετε την αναζήτηση της εξόδου µε backtracking. Σκεφτείτε τι πρέπει να κάνετε όταν φτάνετε σε αδιέξοδο, και µε ποιο τρόπο θα µπορέσετε να συνεχίσετε την αναζήτηση. Είναι επιτρεπτό, αν αποθηκεύσετε τον λαβύρινθο σε πίνακα χαρακτήρων, να κάνετε µετέπειτα αλλαγές πάνω στα στοιχεία του πίνακα (π.χ. αν θέλετε να χρησιµοποιήσετε κάποιον άλλο χαρακτήρα για να δείξετε ότι έχετε ήδη επισκεφτεί κάποια θέση κατά τη διάρκεια εκτέλεσης του προγράµµατος). Η εργασία σας θα εξεταστεί σε εισόδους της παραπάνω µορφής. Αν υπάρχει κάποιο λάθος στα δεδοµένα εισόδου, το πρόγραµµα πρέπει να τερµατίζει τυπώνοντας αντίστοιχο µήνυµα (π.χ. αν οι γραµµές και στήλες που διαβάσατε στην πρώτη σειρά εισόδου, δεν ταιριάζουν µε τον πίνακα που διαβάζετε µετά ή αν δεν υπάρχει Ε στον λαβύρινθο, κτλ). Πρέπει να δίνετε ως όρισµα ολο το µονοπάτι για το.txt αρχείο εισόδου, δηλαδή η εκτέλεση του προγράµµατος, αν το τρέξετε από τη γραµµή εντολών θα είναι ως εξής:

> java Thiseas path_to_file/filename.txt Μέρος Γ. Η υλοποίηση της διεπαφής StringQueue µε λίστα µονής σύνδεσης στο µέρος Α, θα πρέπει αναγκαστικά να χρησιµοποιεί 2 δείκτες, τους head και tail, για να µπορείτε να εκτελείτε σωστά τις εισαγωγές και εξαγωγές στοιχείων, όπως είδαµε και στο µάθηµα. Το ζητούµενο στο µέρος Γ είναι να φτιάξετε µία νέα υλοποίηση της ουράς FIFO, χρησιµοποιώντας µόνο έναν από τους δείκτες αυτούς. Hint: Χρησιµοποιήστε κυκλική λίστα αντί για λίστα µονής σύνδεσης. Η κλάση σας πρέπει να λέγεται StringQueueWithOnePointer.java. Οι λειτουργίες εισαγωγής και εξαγωγής θα πρέπει να γίνονται σε Ο(1) και γενικότερα ισχύουν και εδώ όλες οι οδηγίες που αναγράφονται για το Μέρος Α. Οδηγίες Παράδοσης Η εργασία σας θα πρέπει να µην έχει συντακτικά λάθη και να µπορεί να µεταγλωττίζεται. Εργασίες που δεν µεταγλωττίζονται χάνουν το 50% της συνολικής αξίας. Η εργασία θα αποτελείται από: 1. Τον πηγαίο κώδικα (source code). Τοποθετήστε σε ένα φάκελο µε όνοµα src τα αρχεία java που έχετε φτιάξει. Ενδεικτικά θα πρέπει να περιέχει (χρησιµοποιήστε τα όνοµατα των κλάσεων όπως ακριβώς δίνονται στην εκφώνηση): a. Τις διεπαφές StringStack και StringQueue, οι οποίες είναι ήδη διαθέσιµες στο eclass. b. Όλες τις υλοποιήσεις των διεπαφών από το Μέρος Α και το Μέρος Γ. c. Το πρόγραµµα Thiseas.java. Επιπλέον, φροντίστε να συµπεριλάβετε όποια άλλα αρχεία πηγαίου κώδικα απαιτούνται για να µεταγλωττίζεται η εργασία σας (π.χ. αν χρησιµοποιήσετε την λίστα µονής σύνδεσης του εργαστηρίου 2, να συµπεριλάβετε τα σχετικά αρχεία). Φροντίστε επίσης να προσθέσετε επεξηγηµατικά σχόλια όπου κρίνετε απαραίτητο στον κώδικά σας. 2. Γράψτε µία σύντοµη αναφορά σε pdf αρχείο (οχι Word ή txt!) µε όνοµα project1- report.pdf, στην οποία θα αναφερθείτε στα εξής: a. Εξηγήστε συνοπτικά πώς υλοποιήσατε τις διεπαφές στα µέρη Α και Γ (άνω όριο 2 σελίδες). b. Για το µέρος Β, εξηγήστε πώς χρησιµοποιήσατε την υλοποίηση από το µέρος Α για να φτιάξετε το πρόγραµµα που ζητείται (άνω όριο 2 σελίδες). Όλα τα παραπάνω αρχεία θα πρέπει να µπουν σε ένα αρχείο zip. Το όνοµα που θα δώσετε στο αρχείο αυτό θα είναι ο αριθµός µητρώου σας πχ. 3030056_3030066.zip ή 3030056.zip (αν δεν είστε σε οµάδα). Στη συνέχεια, θα υποβάλλετε το zip αρχείο σας στην περιοχή του µαθήµατος «Εργασίες» στο e-class. Δεν χρειάζεται υποβολή και από τους 2 φοιτητές µιας οµάδας. Η προθεσµία παράδοσης της εργασίας είναι Τρίτη, 15 Νοεµβρίου 2016 και ώρα 23:59.

Παράρτηµα Διεπαφή StringStack import java.io.printstream; import java.util.nosuchelementexception; * Defines the methods for a Stack that handles String items public interface StringStack { } * @return true if the stack is empty public boolean isempty(); * Push a String item to the stack public void push(string item); * remove and return the item on the top of the stack * @return the item on the top of the stack * @throws a NoSuchElementException if the stack is empty public String pop() throws NoSuchElementException; * return without removing the item on the top of the stack * @return the item on the top of the stack * @throws a NoSuchElementException if the stack is empty public String peek() throws NoSuchElementException; * print the contents of the stack, starting from the item * on the top, * to the stream given as argument. For example, * to print to the standard output you need to pass System.out as * an argument. E.g., * printstack(system.out); public void printstack(printstream stream); * return the size of the stack, 0 if empty * @return the number of items currently in the stack public int size();

Διεπαφή StringQueue import java.io.printstream; import java.util.nosuchelementexception; * Defines the methods for a FIFO queue that handles String items public interface StringQueue { * @return true if the queue is empty public boolean isempty(); * insert a String item to the queue public void put(string item); * remove and return the oldest item of the queue * @return oldest item of the queue * @throws NoSuchElementException if the queue is empty public String get() throws NoSuchElementException; * return without removing the oldest item of the queue * @return oldest item of the queue * @throws NoSuchElementException if the queue is empty public String peek() throws NoSuchElementException; * print the elements of the queue, starting from the oldest * item, to the print stream given as argument. For example, to * print the elements to the * standard output, pass System.out as parameter. E.g., * printqueue(system.out); public void printqueue(printstream stream); } * return the size of the queue, 0 if it is empty * @return number of elements in the queue public int size();