package stack;
/**
* 使用数组实现栈
* @author User
*
*/
public class MyStack {
int[] arr;
public MyStack() {
arr = new int[0];
}
/**
* 压栈,压栈其实就是向数组的末尾添加元素
* @param element
*/
public void push(int element) {
int[] newArr = new int[arr.length+1];
// 复制
for(int i = 0; i<arr.length; i++) {
newArr[i] = arr[i];
}
// 添加到末尾
newArr[arr.length] = element;
arr = newArr;
}
/**
* 出栈,由于入栈是往数组的末尾添加元素,所以出栈的时候也是应该从数组的末尾元素开始拿。即后进先出
* @return
*/
public int pop() {
if(this.isEmpty()) {
throw new RuntimeException("栈是空的!");
}
// 拿到出栈的元素,即数组的最后一个元素
int element = arr[arr.length-1];
// 把出栈的元素从数组中删除
int[] newArr = new int[arr.length-1];
for(int i = 0; i<newArr.length; i++) {
newArr[i] = arr[i];
}
arr = newArr;
return element;
}
/**
* 返回栈顶的元素
* @return
*/
public int peek() {
if(this.isEmpty()) {
throw new RuntimeException("栈是空的!");
}
return arr[arr.length-1];
}
/**
* 栈中元素的个数
* @return
*/
public int length() {
return arr.length;
}
/**
* 判空
* @return
*/
public boolean isEmpty() {
return arr.length == 0;
}
}