/* * Copyright (c) 2008, Manuel Mausz * 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; } }