Download | Plain Text | Line Numbers


/*
 * Copyright (c) 2008, Manuel Mausz <manuel at mausz.at>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the copyright holders nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
 * DAMAGE.
 */
 
/**
 * Implements a stack using an array
 *
 * @version 1.0
 * @author  Manuel Mausz (manuel at mausz.at)
 * @author  http://manuel.mausz.at/
 */
class Stack
{
  private int[] stack;
  private int i = 0;
 
  /**
   * constructor
   *
   * @param size initialize stack size
   */
  Stack(int size)
  {
    stack = new int[size];
  }
 
  public void resize()
  {
    resize(2);
  }
 
  /**
   * resizes the internal stack
   *
   * @param factor resize factor. default is 2
   */
  public void resize(int factor)
  {
    if (factor <= 1)
      return;
    int b[] = stack.clone();
    stack = new int[stack.length * factor];
    System.arraycopy(b, 0, stack, 0, i);
  }
 
  /**
   * push item onto stack
   *
   * @param n item
   */
  public void push(int n)
  {
    if (i >= stack.length)
      resize();
    stack[i++] = n;
  }
 
  /**
   * pop item from stack
   *
   * @return item
   */
  public int pop()
  {
    if (i == 0)
      return 0;
    return stack[--i];
  }
 
  /**
   * check if stack has items
   *
   * @return boolean
   */
  public boolean hasNext()
  {
    return (i > 0);
  }
 
  /**
   * converts stack to string
   *
   * @return string
   */
  public String toString()
  {
    String str = "";
    for (int j = 0; j < i; j++)
      str += stack[j] + "\n";
    return str;
  }
}