/**
* 数组实现栈和队列
*/
public class ArrayToQueueAndStack {

public static class MyStack<T> {

public Object[] arr;

public int size;

public int limit;

public MyStack(int limit) {
this.arr = new Object[limit];
this.limit = limit;
}

public void push(T value) {
if (size == limit) {
System.out.println("the stack is full");
return;
}
arr[size++] = value;
}

public T pop() {
if (isEmpty()) {
System.out.println("the stack is empty");
return null;
}
return (T) arr[--size];
}

public boolean isEmpty() {
return size == 0;
}

}

public static class MyQueue<T> {

public Object[] arr;

public int pushIndex;

public int pollIndex;

public int size;

public int limit;

public MyQueue(int limit) {
this.arr = new Object[limit];
this.limit = limit;
}

public void push(T value) {
if (size == limit) {
System.out.println("the queue is full");
return;
}
arr[pushIndex] = value;
size++;
pushIndex = nextIndex(pushIndex);
}

public T poll() {
if (isEmpty()) {
System.out.println("the queue is empty");
return null;
}
T value = (T) arr[pollIndex];
size--;
pollIndex = nextIndex(pollIndex);
return value;
}

public boolean isEmpty() {
return size == 0;
}

private int nextIndex(int pushIndex) {
return ++pushIndex % limit;
}

}

}