package ubs;

public class BoundedStack {

  private int[]elems;
  private int numberOfElements;
  private int max;


  public   BoundedStack()   {
    numberOfElements= 0;
    max = 2;
    elems=new int[max];
  }

  public void push(int k) {
    int index;
    boolean alreadyMember;
    alreadyMember = false;

    for(index=0; index<numberOfElements; index++) {
      if(k==elems[index]) {
        alreadyMember = true;
        break;
      }
    }

    if (alreadyMember) {
      for (int j=index; j<numberOfElements-1; j++) {
        elems[j= elems[j+1];
      }
      elems[numberOfElements-1= k;
    }
    else {
      if (numberOfElements < max) {
        elems[numberOfElements= k;
        numberOfElements++;
        return;
      else {
        //System.out.println("Stack full, cannot push");
        return;
      }
    }
  }

  public void pop() {
    numberOfElements --;
  }


  public int top() {
    if (numberOfElements < 1) {
      //System.out.println("Empty Stack");
      return -1;
    else
      return elems[numberOfElements-1];
  }


  public boolean isEmpty() {
    if (numberOfElements==0)
      return true;
    else
      return false;
  }


  public int maxSize() {
    return max;
  }


  public boolean isMember(int k) {
    for(int index=0; index<numberOfElements; index++)
      ifk==elems[index])
        return true;
    return false;
  }

  public boolean equals(BoundedStack s) {
    if (s.maxSize() != max)
      return false;
    if (s.getNumberOfElements() != numberOfElements)
      return false;
    int [] sElems = s.getArray();
    for (int j=0; j<numberOfElements; j++)  {
      if elems[j!= sElems[j])
        return false;
    }
    return true;
  }

  public int[] getArray() {
    int [] a;
    a = new int[max];
    for (int j=0; j<numberOfElements; j++)
      a[j= elems[j];
    return a;
  }

  public int getNumberOfElements() {
    return numberOfElements;
  }

  public boolean isFull() {
    return numberOfElements == max;
  }

}