最近在看左神的算法课,理解之后在此将代码记录下来
将数组转换成队列:
class ArrayToQueue {
private Integer[] arr;
private Integer size;
private Integer start;
private Integer end;
public ArrayToQueue(int initSize) {
if (initSize < 0) {
throw new ArrayIndexOutOfBoundsException("参数不能小于0");
}
arr = new Integer[initSize];
size = 0;
start = 0;
end = 0;
}
public void push(int num) {
if (size == arr.length) {
throw new ArrayIndexOutOfBoundsException();
}
size++;
arr[end] = num;
end = (end == arr.length - 1) ? 0 : end + 1;
}
public Integer poll() {
if (size == 0) {
throw new ArrayIndexOutOfBoundsException();
}
size--;
int num = arr[start];
start = (start == arr.length - 1) ? 0 : start + 1;
return num;
}
public Integer peek() {
if (size == 0) {
return null;
}
return arr[start];
}
}
问题一:
如何仅用栈结构实现队列结构?
//两个栈实现一个队列
class TwoStackQueue{
private Stack<Integer> pushStack;
private Stack<Integer> popStack;
public TwoStackQueue(){
pushStack = new Stack<>();
popStack = new Stack<>();
}
public void push(int item){
pushStack.push(item);
}
public Integer poll(){
if(pushStack.isEmpty() && popStack.isEmpty()){
throw new RuntimeException("队列为空");
}else if(popStack.isEmpty()){
while (!pushStack.isEmpty()){
popStack.push(pushStack.pop());
}
}
return popStack.pop();
}
public Integer peek(){
if(pushStack.isEmpty() && popStack.isEmpty()){
throw new RuntimeException("队列为空");
}else if(popStack.isEmpty()){
while (!pushStack.isEmpty()){
popStack.push(pushStack.pop());
}
}
return popStack.peek();
}
}