package task9.stack;
import java.util.Objects;
public class TwoStackInOneArray {
private static final String INDEX_EXCEPTION_MSG = "数组越界了";
private static final int DEFAULT_SIZE = 10;
private Object[] data;
private int length = DEFAULT_SIZE;
public TwoStackInOneArray() {
data = new Object[length];
}
public TwoStackInOneArray(int size) {
this.length = size;
data = new Object[length];
}
private int leftSize = 0;
private int rightSize = 0;
/**
* 向第一个栈中压入元素
*
* @param o
*/
public void push1(Object o) {
checkIndexRange();
data[leftSize++] = o;
}
private void checkIndexRange() {
if (leftSize + rightSize > length) {
throw new RuntimeException(INDEX_EXCEPTION_MSG);
}
}
/**
* 从第一个栈中弹出元素
*
* @return
*/
public Object pop1() {
if (leftSize <= 0) {
throw new RuntimeException(INDEX_EXCEPTION_MSG);
}
Object result = data[0];
Object[] temp = new Object[length];
System.arraycopy(data, 1, temp, 0, leftSize - 1);
System.arraycopy(data, length - rightSize, temp, length - rightSize, rightSize);
data = temp;
leftSize--;
return result;
}
/**
* 获取第一个栈的栈顶元素
*
* @return
*/
public Object peek1() {
return data[0];
}
/*
* 向第二个栈压入元素
*/
public void push2(Object o) {
checkIndexRange();
data[length - rightSize - 1] = o;
rightSize++;
}
/**
* 从第二个栈弹出元素
*
* @return
*/
public Object pop2() {
if (rightSize <= 0) {
throw new RuntimeException(INDEX_EXCEPTION_MSG);
}
Object result = data[length - 1];
Object[] temp = new Object[length];
System.arraycopy(data, 0, temp, 0, leftSize);
System.arraycopy(data, length - rightSize, temp, length - rightSize + 1, rightSize - 1);
data = temp;
leftSize--;
return result;
}
/**
* 获取第二个栈的栈顶元素
*
* @return
*/
public Object peek2() {
return data[length - 1];
}
}