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;
}
}