栈(先进后出)
栈相当于手枪弹夹(不停地往下压子弹)
具体实现
具体方法
1. 压入元素(新数组在旧数组基础上加上压入的元素之后替换旧数组)
2. 取出栈顶(取出并返回栈顶 然后新数组将其他元素放入后替换旧数组)
3. 查看栈顶(只需要返回数组最后一个)
4. 判空(返回数组长度是否为空)
底层方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| public class Main { //底层用数组来存储数据 int[] elements;
public Main(){ 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){ System.out.println("有异常"); } //取出数组最后一个数(栈顶) int top= elements[elements.length-1]; //新建数组存放其他数据 int[] newArr=new int[elements.length-1]; //旧数组除了最后一个存到新的数组 for(int i=0;i<elements.length-1;i++){ newArr[i]=elements[i]; } //替换数组 elements=newArr;
return top; //返回栈顶 }
//查看栈顶元素(只需要返回数组最后一个) public int look(){ return elements[elements.length-1]; //只是查看栈顶 }
//判断栈是否为空(只需要返回是不是为空) public boolean isEmpty(){ return elements.length==0; }
}
|
测试Test类
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Test { public static void main(String[] args){ //创建一个栈 Main m=new Main(); //压入数组 m.push(9); m.push(8); m.push(7); // 从上到下: 7 8 9 //取数 System.out.println(m.pop()); // 7 因为目前最后压进去的是7 System.out.println(m.pop()); // 8 7已经弹出去了 System.out.println(m.look()); // 9 7.8都弹出去了 } }
|
最终执行测试: