package struktury ;

/*************************************************************
 * Klasa <b>Stos</b> reprezentuje stos liczb ca?kowitych.
 * @implements Cloneable, SlownikLiczb
 * Klasa ta implementuje interfejsy <b>Cloneable</b> i <b>SlownikLiczb</b>.
 * @author Pawe? Rzechonek
 * @version 1.5
 *************************************************************/
public class StosLiczb implements Cloneable, SlownikLiczb
{
    /** Stos w postaci tablicowej. */
    protected int[] stos ;
    /** Liczba elementów na stosie. */
    protected int szczyt=0 ;

    /**
    Konstruktor.
    @param rozm Maksymalna wielkość stosu.
    */
    public StosLiczb (int rozm)
    {
        if (rozm<1) throw new IllegalArgumentException() ;
        stos = new int[rozm] ;
    }

    /**
    Funkcja mówi, ile elementów znajduje się na stosie.
    */
    public int ile ()
    {
        return szczyt ;
    }
    /**
    Wstawienie nowego elementu na szczyt stosu.
    Implementacja metody z interfejsu <b>SlownikLiczb</b>.
    */
    public void wstaw (int x)
    {
        if (szczyt==stos.length) throw new IllegalStateException() ;
        stos[szczyt++] = x ;
    }
    /**
    Metoda niedozwolona na stosie.
    Implementacja metody z interfejsu <b>SlownikLiczb</b>.
    */
    public void usun (int x)
    {
        throw new IllegalStateException() ;
    }
    /**
    Usunięcie jednego elementu ze szczytu stosu.
    */
    public int usun ()
    {
        if (szczyt==0) throw new IllegalStateException() ;
        return stos[--szczyt] ;
    }
    /**
    Przeszukanie stosu w celu odnalezienia elementu.
    Implementacja metody z interfejsu <b>SlownikLiczb</b>.
    */
    public boolean szukaj (int x)
    {
        for (int i=0 ; i<szczyt ; i++) if (stos[i]==x) return true ;
        return false ;
    }
    /**
    Sprawdzenie, jaka wartość znajduje się na szczycie stosu.
    */
    public int sprawdz ()
    {
        if (szczyt==0) throw new IllegalStateException() ;
        return stos[szczyt-1] ;
    }

    /**
    Sklonowanie obiektu.
    Reimplementacja metody z klasy <b>Object</b>.
    */
    public Object clone ()
    {
        StosLiczb s = null ;
        try
        {
            s = (StosLiczb)super.clone() ;
            s.stos = (int[])stos.clone() ;
        }
        catch (CloneNotSupportedException ex) {}
        return s ;
    }
}
