栈
栈 ---先进后出(可以想象为手枪弹夹)
最后放入的元素为栈顶元素
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
package demo2; //用数组实现一个栈 public class MyStack { // 栈的底层我们使用数组来存储数据 Object[] elements; public MyStack() { elements = new Object[0]; } // 压栈 public void push(Object element) { // 创建一个新数组 ,长度为原数组长度加一 Object[] newArr = new Object[elements.length + 1]; // 将原数组中的数据复制到新数组 for (int i = 0; i < elements.length; i++) { newArr[i] = elements[i]; } // 把压入的元素放在数组的最后 newArr[elements.length] = element; // 替换原数组 elements = newArr; } // 取出栈顶元素 public Object pop() { if (elements.length == 0) { throw new RuntimeException("stack is empty"); } Object obj = elements[elements.length - 1]; Object[] newArr = new Object[elements.length - 1]; for (int i = 0; i < newArr.length; i++) { newArr[i] = elements[i]; } // 替换原数组 elements = newArr; return obj; } // 查看栈顶元素 public Object peek() { if (elements.length == 0) { throw new RuntimeException("stack is empty"); } return elements[elements.length - 1]; } // 判断栈是否为空 public boolean isEmpty() { return elements.length == 0; } }
package demo2.test; import demo2.MyStack; public class TestMyStack { public static void main(String[] args) { MyStack m = new MyStack(); m.push(5); m.push(6); m.push(7); Object t = m.pop(); System.out.println(t.toString()); Object t1 = m.pop(); System.out.println(t1.toString()); System.out.println(m.peek()); System.out.println(m.isEmpty()); } }
古之善为士者,微妙玄通,深不可识

浙公网安备 33010602011771号