Stack.java 2.26 KB
Newer Older
Joel Florentin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
public class Stack<T> {
    /**
     * Clase generica de Stack para soportar varios tipos de elementos. float, int, etc
     * 
     */
    public T [] elementos;
    int actual;
    int capacidad;

    public Stack(int cantidad) {
        this.capacidad = cantidad;
        elementos = (T[])new Object[capacidad];
        actual = 0;

    }

    public void push(T valor){
        if(actual==capacidad){
            System.err.println("Pila llena");
            return ;
        }
        elementos[actual] = valor;
        actual += 1;
    }

    public T pop(){
        if(this.estaVacia()){
            System.err.println("Pila vacia");
            return null;
        }
        T valor = elementos[actual-1];
        actual -= 1;
        return valor;
    }

    public boolean estaVacia() {
        return actual<1;
    }

    public T lastValue(){
        return elementos[actual-1];
    }

    public static void main(String[] args) {
        int capacidad = 10, numero;
        Stack<Integer> pila = new Stack<Integer>(capacidad);
        System.out.println("Insertando numeros:");
        for (int i = 0; i < capacidad; i++) {
            numero = Math.round(100*(float)Math.random());
            System.out.print(numero+" ");
            pila.push(numero);
        }
        System.out.println("\nOrdenar Pila");
        ordenarPila(pila);
        //System.out.println("\nMeter en pila llena");
        //pila.push(122);
        //System.out.println("Pila Vacia?"+pila.estaVacia());
        //System.out.println("\nExtrayendo pila");
        for (int i = 0; i < capacidad; i++) {
            System.out.print(pila.pop()+" ");
            
        }
        //System.out.println("\nPila Vacia?"+pila.estaVacia());
        //System.out.println("Extaccion pila vacia");
        //pila.pop(); */


    }

    public static void ordenarPila(Stack<Integer> s) {
        
        if(!s.estaVacia()){
            int temp = s.pop();
            ordenarPila(s);
            insertarEnOrden(temp,s);
        }
        
    }
    public static void insertarEnOrden(int elem, Stack<Integer> s) 
    {
        if (s.estaVacia() || elem > s.lastValue()) {
            s.push(elem);
        } else {
            int temp = s.pop();
            insertarEnOrden(elem, s);
            s.push(temp);
        }    
    }
}