Java基于数组实现栈:
/**
* Java基于数组实现栈
*/
public class MyStack<T> {
//定义一个数组
private Object[] stack;
//模拟栈针
private int needle;
//初始化栈
MyStack(){
stack = new Object[10];//初始化容量是10
}
//取栈顶元素
public T peek(){
T t = null;
if (needle > 0){
t = (T) stack[needle-1];
}
return t;
}
//入栈操作
public void push(Object t){
expandCapacity(needle);//每次入栈前,都要判断一下是否栈是否满了,是否需要扩容
stack[needle] = t;
needle++;
}
//出栈操作
public T pop(){
T t = peek();
if (needle > 0){
stack[needle-1] = null;
needle--;
}
return t;
}
//判断栈是否为空
public Boolean isEmpty(){
return needle == 0;
}
//扩容
public void expandCapacity(int needle){
if (needle > stack.length){
needle = needle * (3 / 2);//每次扩充50%
stack = Arrays.copyOf(stack,needle);
}
}
//测试
public static void main(String[] args) {
MyStack<String> stack = new MyStack<>();
System.out.println(stack.peek());
System.out.println(stack.isEmpty());
stack.push("first");
stack.push("second");
stack.push("third");
stack.push("four");
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
System.out.println(stack.peek());
}
}