public class ArrayAsStackAndQueue {
/*
* 数组实现栈和队列
*/
public static void main(String[] args) {
MyArray myArr = new MyArray();
//栈实现
for(int i =0;i<15;i++) {
myArr.push(i);
}
for(int i=0;i<myArr.size;) {
System.out.print(myArr.getRight());
System.out.print(",");
}
System.out.println();
//队列实现
for(int i =0;i<15;i++) {
myArr.push(i);
}
for(int i=0;i<myArr.size;) {
System.out.print(myArr.getLeft());
System.out.print(",");
}
}
}
class MyArray{
int capacity = 10;
int size;
int leftIndex;
int rightIndex;
int [] arr = new int[capacity];
//添加元素
public void push(int value) {
if(rightIndex == capacity) {
copyArr();
}
arr[rightIndex++] = value;
size++;
}
//从右侧拿
public int getRight() {
int value = arr[--rightIndex];
size--;
return value;
}
//从左侧拿
public int getLeft() {
int value = arr[leftIndex++];
size--;
return value;
}
//复制数组
private void copyArr() {
capacity += capacity >> 1;
int [] newArr = new int[capacity];
int index = 0;
for(int i = leftIndex;i<rightIndex;i++) {
newArr[index++] = arr[i];
}
arr = newArr;
rightIndex = size;
leftIndex = 0;
}
}