如何开发一个自己的栈
1.栈是数组
2.先进后出
3.出栈
4.入栈
/**
* 手写一个双向链表 栈
*/
public class StackPopAndPush {
//1.明确:用数组来实现
private Object[] stack;
//元素个数
private int size;
//默认长度为15个元素
public StackPopAndPush() {
this(15);
}
public StackPopAndPush(int lens) {
stack = new Object[lens];
}
//返回元素个数
public int size() {
return size;
}
//返回数组长度,容量,栈数据长
private int capacity() {
return stack.length;
}
//动态实现数组 如果栈满了 自动扩充栈
private void ExpandCapacity() {
if (size()==capacity()) {
Object[] newStack = new Object[size()*2];
System.arraycopy(stack, 0, newStack, 0, size());
stack = newStack;
}
}
//出栈时判空
public boolean isEmpty() {
if (size==0) {
return true;
}
return false;
}
//入栈
public void push(Object o) {
size++;
ExpandCapacity();
stack[size-1] = o;
}
public Object pop() {
//判断一下
if (isEmpty()) {
throw new ArrayIndexOutOfBoundsException("不能为空");
}
Object o = stack[--size];
stack[size]=null;
return o;
}
public static void main(String[] args) {
StackPopAndPush andPush = new StackPopAndPush();
String[] arr = {"小小狗","磕到了","痛痛痛"};
for (int i = 0; i < arr.length; i++) {
andPush.push(arr[i]);
System.out.println(arr[i]);
}
System.out.println("——————————————————————————————————");
while (!andPush.isEmpty()) {
System.out.println(andPush.pop());
}
}
}
出栈 1 2,是1进来然后出来,在压2 在出2.