栈(stack),是一种线性存储结构,它有以下几个特点:
(01) 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。
(02) 向栈中添加/删除数据时,只能从栈顶进行操作。
栈通常包括的三种操作:push、peek、pop。
push -- 向栈中添加元素。
peek -- 返回栈顶元素。
pop -- 返回并删除栈顶元素的操作。
package net.good.spring;
import java.lang.reflect.Array;
public class GeneralArrayStack<T> {
private static final int DEFAULT_SIZE = 10;
private T[] array;
private int size;
public GeneralArrayStack(Class<T> cls, int capacity) {
this.array = (T[]) Array.newInstance(cls, capacity);
this.size = 0;
}
public GeneralArrayStack(Class<T> cls) {
this(cls, DEFAULT_SIZE);
}
// 将value添加到栈中
public void push(T value){
if (this.size >= array.length) {
throw new ArrayIndexOutOfBoundsException();
}
array[this.size++] = value;
}
// 返回“栈顶元素值”
public T peek(){
return array[this.size-1];
}
// 返回“栈顶元素值”,并删除“栈顶元素”
public T pop(){
if (isEmpty()) {
throw new NullPointerException();
}
T ret = array[this.size-1];
this.size--;
return ret;
}
// 返回“栈”的大小
public int size(){
return this.size;
}
public boolean isEmpty(){
return this.size == 0;
}
}
参考:skywang12345
还有一种思路可用Array数组实现的方式去实现栈可参考:哈哈大圣