//a LIFO sequence structure using arrays

public class StackAsArray implements SeqStructure {

    private class SortedArray {
	public Object[] a;
	public int MAXSIZE;
	public SortedArray(int n) {
	    a = new Object[n];
	    MAXSIZE = n;
	}
    }

    private SortedArray stack; // data in stack
    private int SP;            // points to first empty cell

    // constructor:
    public StackAsArray(int size) {
	stack = new SortedArray(size);
    }

    // push element onto stack:
    public void put(Object o) {
	if (SP == stack.MAXSIZE) {
	    System.out.println("Stack overflow");
	    return; 
	}
	stack.a[SP] = o; // insert element
	SP++;        // move SP "up"
    }

    // pop element from stack:
    public Object get() {
	if (SP == 0) {
	    System.out.println("Attempt to pop empty stack");
	    return null;
	}
	Object temp = stack.a[--SP]; // move SP "down" then retrieve elem
	stack.a[SP] = null;          // free space element was in
	return temp;             
    }
    
    // size of stack is SP
    // Why? SP is 1 space higher than last element:
    public int size() {
	return SP; 
    }

    // SP is at bottom:
    public boolean isEmpty() {
	return (SP == 0); 
    }
    
    // Stingify Stack:
    public String toString() {
	String s = "LIFO: [";
	for (int i = 0; i < SP; i++) {
	    s += stack.a[i];
	    if (i < SP-1) s += ",";
	}
	s +="]";
	return s;
    }
}


