public class ArrayStack implements Stack { private static final int DEF_STACK_SIZE=2; //Array of objects private Object[] S; private int index ; // index, top, last, position // Returns the last item of the Stack public Object top() throws StackEmptyException { if (isempty()) throw new StackEmptyException("EMPTY"); return S[index-1]; // Removes the last item of the Stack public Object pop() throws StackEmptyException { if (isempty()) throw new StackEmptyException("EMPTY"); Object o=s[--index]; S[index]=null; return o; // Adds a new item into the Stack public void push(object item) throws StackFullException { if (isfull()) throw new StackFullException("FULL"); S[index++]=item; //Utility Methods public int size() public boolean isempty() public boolean isfull()
public class TestStack { public static void main (String args[]) throws StackFullException, StackEmptyException { // st1= // ArrayStack AS=.. System.out.println("\n=>Testing Stack's Operation: Pushing"); { AS.push(st1); catch (StackFullException e) { System.out.println("OO PUSH1!! "+e) { System.out.println(AS.top()); catch (StackEmptyException e) { System.out.println("OO TOP1!! "+e); { AS.push(st1); catch (StackFullException e) { System.out.println("OO PUSH2!! "+e) { System.out.println(AS.top()); catch (StackEmptyException e) { System.out.println("OO TOP2!! "+e); //. System.out.println("\n=>Testing Stack's Operation: Poping"); { System.out.println(AS.pop()); System.out.println(AS.pop()); System.out.println(AS.pop()); catch (StackEmptyException e) { System.out.println("OO POP!! "+e.getmessage()); System.out.println("\nBye Bye"); ΑΚΟΛΟΥΘΟΥΝ Ασκήσεις προς Εξοικείωση με την ΣΤΟΙΒΑ!!!
Ερωτήματα ΑΣΚΗΣΕΙΣ 1. Πως θα ελέγξω αν µια στοίβα ισούται µε µια άλλη public boolean equals(αrraystack others) {.. H µέθοδος µϖορεί να γραφτεί µέσα στην κλάση ArrayStack και να τεσταριστεί στην main ως εξής : ArrayStack S1, S2 = //αρχικοϖοίηση και γέµισµα των δυο στοιβών. if (S1.equals(S2)) System.out.println("ΙΣΕΣ"); // Τι θα ϖεριέχει η µέθοδος equals: Aν τα µεγέθη τους (size() ) δεν είναι ίσα, εϖιστρέφει false Aλλιώς (σε ίσα µεγέθη) ϖρέϖει να βγάζω ένα-ένα τα (τελευταία) στοιχεία τους µε pop() και να τα συγκρίνω. Αν 2 στοιχεία είναι άνισα θα εϖιστρέψει false, αλλιώς θα συνεχίσει τις συγκρίσεις µέχρι να αδειάσουν και οι 2 στοίβες: o Όµως στο τέλος, δεν θέλουµε τις στίβες Α ΕΙΕΣ, άρα ϖρέϖει να χρησιµοϖοιήσουµε ΒΟΗΘΗΤΙΚΕΣ ΣΤΟΙΒΕΣ ώστε αϖό αυτές, να ξαναγεµίσουµε µετά τις αρχικές 2. Πώς θα αντιγράψω µια στοίβα S1 σε µια άλλη S2. Τι θα ϖεριέχει η µέθοδος copyto: o Πρέϖει να βγάζω ένα-ένα τo (τελευταίo) στοιχείo της S1 µε pop() και να το βάζω σε µια ΒΟΗΘΗΤΙΚΗ ΣΤΟΙΒΑ ώστε αϖό αυτήν, µετά να γεµίσω (copy) την S2 aλλά και την αρχική ϖου εν τω µεταξύ άδειασε (µε τα pop()).
3. Να ϖροσθέσετε την ϖαρακάτω µέθοδο στην κλάση ArrayStack: public Object deleteposition(int n) {... Η µέθοδος δέχεται έναν ακέραιο n και διαγράφει αϖό την στοίβα το n στοιχείο της. To στοιχείο (ο2) στην θέση n=2, ϖου θα διαγράψω, δεν θα το βάλω στην βοηθητική στοίβα. 4. Να ϖροσθέσετε την ϖαρακάτω µέθοδο στην κλάση ArrayStack: public Object deleteobject(object obj) {... Η µέθοδος να δέχεται ένα αντικείµενο Object obj και να το διαγράφει αϖό την στοίβα σε όϖοια θέση και αν βρίσκεται. Παρόµοια µε την 3. 5. ηµιουργήστε την ϖαρακάτω µέθοδο: public Stack evenstack(stack instack) {.. η οϖοία εϖιστρέφει µία στοίβα η οϖοία ϖεριέχει τα στοιχεία, ϖου βρίσκονται στις άρτιες θέσεις της στοίβας. Tα στοιχείa ϖου δεν θέλω, δεν θα τα βάλω στην βοηθητική στοίβα.
6. ηµιουργήστε µια µέθοδο: public static Stack createrandomstack(int n) η οϖοία ϖαράγει και εϖιστρέφει µια στοίβα ϖου ϖεριέχει n τυχαίους ακέραιους αριθµούς. Χρησιµοϖοιήστε την Math.random() 7. ηµιουργήστε µια µέθοδο public static double findaverage(stack inputstack) ή οϖοία υϖολογίζει και εϖιστρέφει το µέσο όρο των αριθµών ϖου ϖεριέχει η στοίβα inputstack. Βγάζω ένα ένα τα στοιχεία και τα βάζω στην βοηθητική στοίβα ώστε να υϖολογίσω τον µέσο όρο, και µετά ξαναγεµίζω την inputstack. 8. ιαγραφή µεσαίου όρου στοίβας public static int deletemidelement(stack inputstack) Θα βρώ ϖρώτα το mid=size()/2, και τον διαγράφω όϖως στην 3. 9. ηµιουργήστε µία µέθοδο public static int deleteαvgelement(stack inputstack) η οϖοία διαγράφει και εϖιστρέφει τον αριθµό ϖου είναι ϖιο κοντά στο µέσο όρο των αριθµών ϖου ϖεριέχει η στοίβα inputstack Αφού βρω ϖρώτα ϖοιο είναι το Average=sum(n i)/n βγάζοντας όλους τους αριθµούς στην βοηθητική στίβα, κατόϖιν θα τους βάλω ϖάλι στην inputstack ελέγχοντάς ώστε να µην µϖει ο Average. 10. Να γράψετε τον κώδικα για την µέθοδο public static Stack deletefromstack(stack inputstack, int item) όϖου inputstack µια στοίβα εισόδου ϖου ϖεριέχει αριθµούς και item ένας αριθµός. Η µέθοδος αυτή δηµιουργεί και εϖιστρέφει µια νέα στοίβα ϖου δεν ϖεριέχει τον αριθµό item. Παράδειγµα εκτέλεσης INPUT STACK : [100 34 45 12 23 56 78 89 23 ] FILTERED STACK (NUMBER 56) : [100 34 45 12 23 78 89 23] Βγάζω ένα ένα τα στοιχεία στην βοηθητική στοίβα και τα συγκρίνω µε το item. Μόλις βρώ το στοιχείο γεµίζω την inputstack.