栈是一种数据先入后出,后入先出的数据结构。
如果图所示,将数字 10、15、6、9 存入栈后,从栈中取到的数据按顺序将会是 9、6、15、10。栈的结构像我们生活中的箱子,最先放入的物品将会在箱子的最底部,最后放入的数据在最上面,拿物品时也需要从最上面拿起。
public class MyStack {
}
底层使用数组存储数据,也可以使用java的泛型替代Object类型。
private Object[] arr;//存储数据
private int top;//栈顶的位置
栈顶:整个栈最上面(最后入栈)的元素,也就是数组中最后存入的元素。
栈底:整个栈最下面(最先入栈)的元素,也就是数组中最先存入的元素。
public MyStack(){
arr = new Object[10];
top = -1;
}
/**
* 参数为数组的初始长度
* @param maxSize
*/
public MyStack(int maxSize){
arr = new Object[maxSize];
top = -1;
}
底层的操作就是向数组中存入数据,由于top
变量记栈顶的位置,所以top
的值增加1后即为最新的栈顶的置。
public void push(Object value) {
arr[++top] = value;
}
取得栈顶的数据,并将此数据将栈中移除。向栈中压入数据需要将记录栈顶的位置的变量top
加1,同理,移除栈顶数据需要将top
减1。
public Object pop(){
return arr[top--];
}
public Object peek(){
return arr[top];
}
public boolean isEmpty(){
return top == -1;
}
top
的值等于数组最后一个元素的位置即为存满
public boolean isFull(){
return top == arr.length-1;
}
public class MyStack {
private Object[] arr;//存储数据
private int top;//栈顶的位置
public MyStack() {
arr = new Object[10];
top = -1;
}
/**
* 参数为数组的初始长度
*
* @param maxSize
*/
public MyStack(int maxSize) {
arr = new Object[maxSize];
top = -1;
}
public void push(Object value) {
arr[++top] = value;
}
/**
* 弹出栈顶的数据
* @return
*/
public Object pop(){
return arr[top--];
}
public Object peek(){
return arr[top];
}
public boolean isEmpty(){
return top == -1;
}
public boolean isFull(){
return top == arr.length-1;
}
}
public static void main(String[] args) {
MyStack stack = new MyStack(4);
stack.push("a");
stack.push("b");
stack.push("c");
stack.push("d");
System.out.println("是否为空:" + stack.isEmpty());
System.out.println("是否存满:" + stack.isFull());
System.out.println("栈顶:"+stack.peek());
System.out.println("栈顶:"+stack.peek());
//弹出栈中所有数据
while (!stack.isEmpty()){
System.out.println(stack.pop());
}
System.out.println("是否为空:" + stack.isEmpty());
System.out.println("是否存满:" + stack.isFull());
}
原文:https://www.cnblogs.com/AIThink/p/11332604.html