/*
* Description: Generic Stack Example
* Author : Marco 'RootkitNeo'
*
*/
class Stack<T> {
private int size; // Numero di elementi effettivamente contenuti
private Object[] elements; // Elementi contenuti
// Costruttori
// ---------------------------------------------------------------------
Stack(int initialCapacity) {
this.elements = new Object[initialCapacity];
}
// Capacita' iniziale a 10 elmenti se non specificata
Stack() {
this(10);
}
// ---------------------------------------------------------------------
// T viene sostituito dal tipo di dato passato
// ---------------------------------------------------------------------
void push(T element) {
if(size == elements.length-1) increaseSize();
elements[++size] = element;
}
// ---------------------------------------------------------------------
@SuppressWarnings("unchecked")
// Estraggo l'elemento in cima allo stack
// ---------------------------------------------------------------------
T pop() {
return (T) elements[size--];
}
// ---------------------------------------------------------------------
int getSize() {
return size;
}
int getRealSize() {
return elements.length;
}
private void increaseSize() {
Object[] newElements = new Object[elements.length + 10];
for(int i=0; i<elements.length; i++) {
newElements[i] = elements[i];
}
elements = newElements;
newElements = null;
}
}