栈的出入规则呢是先进后出,后进先出。就像我们往箱子里面放东西一样,先放进去的在下面,后面放进去的在上面,只有把后面放进去的先拿出来,。我们才能取到我们最开始放进去的东西
下面我们就用数组实现一下栈的push,pop和peek方法,因为是一次写的,就不一个个测试了,直接上所有的吧
package stack;
import java.util.Arrays;
/**
* Created by xiaobai on 2019/1/10.
*/
public class MyStack {
// 用数组的方式实现栈的底层
int[] elements ;
public MyStack(){
elements = new int[0];
}
//像栈中压入一个数据,
public void push(int element){
//创建一个新的长度比原数组大1的新数组
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");
}
//获取栈顶元素
int element = 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 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;
}
//查看栈内元素
public void show(){
System.out.println(Arrays.toString(elements));
}
}
下来我们写个main方法测试一下
package TestArrayDemo;
import stack.MyStack;
import java.util.Arrays;
/**
* Created by xiaobai on 2019/1/10.
*/
public class JavaStackTest {
public static void main(String[] args) {
MyStack stack = new MyStack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.push(6);
//查看栈内元素
stack.show();
//拿出栈顶元素
System.out.println(stack.pop());
//查看栈内元素
stack.show();
//查看栈顶元素
System.out.println(stack.peek());
System.out.println(stack.isEmpty());
}
}
好了,我们可以下看一下控制台的输出
[1, 2, 3, 4, 5, 6]
6
[1, 2, 3, 4, 5]
5
false
Process finished with exit code 0
关于栈的就写到这里了,大家互勉啊。有什么问题我们可以互相讨论哈