package main.coding_170507;
import java.util.EmptyStackException;
/**
* 用一个数组实现两个栈
* 将数组的起始位置看作是第一个栈的栈底,将数组的尾部看作第二个栈的栈底,压栈时,栈顶指针分别向中间移动,直到两栈顶指针相遇,则扩容。
*/
public class TwoStackInOneArray {
Object[] data = new Object[10];
private int start = 0;
private int end = data.length-1;
/**
* 向第一个栈中压入元素
*
* @param o
*/
public void push1(Object o) {
if(start==end){
throw new RuntimeException("栈满");
}
data[start++] = o;
}
/**
* 从第一个栈中弹出元素
*
* @return
*/
public Object pop1() {
if(start==0){
throw new EmptyStackException();
}
return data[--start];
}
/**
* 获取第一个栈的栈顶元素
*
* @return
*/
public Object peek1() {
if(start==0){
throw new EmptyStackException();
}
return data[start-1];
}
/*
* 向第二个栈压入元素
*/
public void push2(Object o) {
if(start==end){
throw new RuntimeException("栈满");
}
data[end--] = o;
}
/**
* 从第二个栈弹出元素
*
* @return
*/
public Object pop2() {
if(end==data.length-1){
throw new EmptyStackException();
}
return data[++end];
}
/**
* 获取第二个栈的栈顶元素
*
* @return
*/
public Object peek2() {
if(end==data.length-1){
throw new EmptyStackException();
}
return data[end+1];
}
}