package datastruct.linearlist;
import java.util.ArrayDeque;
import java.util.Queue;
public class HtqTwoQueueStack<E> {
private Queue<E> queue1 = new ArrayDeque<>();
private Queue<E> queue2 = new ArrayDeque<>();
public int size(){
return queue1.size()+queue2.size();
}
public boolean isEmpty(){
return queue1.isEmpty()&&queue2.isEmpty();
}
public void clear(){
queue1.clear();
queue2.clear();
}
public void push(E e){
if (queue1.isEmpty()&&queue2.isEmpty()){
queue1.offer(e);
return;
}
if (!queue1.isEmpty()&&queue2.isEmpty()){
queue1.offer(e);
return;
}
if (queue1.isEmpty()&&!queue2.isEmpty()){
queue2.offer(e);
return;
}
}
public E pop(){
if (queue1.isEmpty()&&queue2.isEmpty()){
throw new IllegalArgumentException();
}else if (!queue1.isEmpty()&&queue2.isEmpty()){
while (queue1.size()>1){
queue2.offer(queue1.poll());
}
return queue1.poll();
}else if (queue1.isEmpty()&&!queue2.isEmpty()){
while (queue2.size()>1){
queue1.offer(queue2.poll());
}
return queue2.poll();
}
return null;
}
public E peek(){
E e = null;
if (queue1.isEmpty()&&queue2.isEmpty()){
throw new IllegalArgumentException();
}else if (!queue1.isEmpty()&&queue2.isEmpty()){
while (queue1!=null){
if (queue1.size()==1){
e = queue1.peek();
}
queue2.offer(queue1.poll());
}
return queue1.poll();
}else if (queue1.isEmpty()&&!queue2.isEmpty()){
while (queue2!=null){
if (queue2.size()==1){
e = queue2.peek();
}
queue1.offer(queue2.poll());
}
return queue2.poll();
}
return e;
}
}
数据结构之两个队列实现栈
最新推荐文章于 2020-07-16 11:57:06 发布