栈的底层实现
package stack;
public class MyStack {
//用数组写栈的底层
int[] elements;
public MyStack(){
elements = new int[0];
}
//往数组中压入元素
public void push(int element){
//创建一个新的数组
int[] newArr = new int[elements.length + 1];
//将原数组元素复制进新数组
for(int i = 0;i < elements.length;i++){
newArr[i] = elements[i];
}
//在新数组末尾添加新元素
newArr[elements.length] = element;
//将新数组赋值给原数组
elements = newArr;
}
//从栈顶取元素
public int pop(){
//边界判定
if(elements.length == 0){
throw new RuntimeException("stack is empty!");
}
//创建一个新数组,比原数组长度小1
int[] newArr = new int[elements.length - 1];
//将原数组末尾元素取出
int element = elements[elements.length - 1];
//将原数组元素赋值给新数组
for(int i = 0; i < newArr.length; i++){
newArr[i] = elements[i];
}
//替换回原数组
elements = newArr;
return element;
}
public int peek(){
//边界判定
if(elements.length == 0){
throw new RuntimeException("stack is empty!");
}
return elements[elements.length - 1];
}
public boolean isEmpty(){
return elements.length == 0;
}
}
栈的测试类
package stackTest;
import stack.MyStack;
public class TestMyStack {
public static void main(String[] args) {
//创建一个栈
MyStack ms = new MyStack();
//压入数组
ms.push(100);
ms.push(99);
ms.push(98);
ms.push(97);
//取出栈顶元素
System.out.println(ms.pop());
System.out.println(ms.pop());
System.out.println(ms.pop());
System.out.println("----------------");
//查看栈顶元素
System.out.println(ms.peek());
System.out.println("----------------");
System.out.println(ms.isEmpty());
}
}
运行结果:
97
98
99
—————-
100
—————-
false