方法一:两个栈分别为stack和queuestack
push():stack.push()
enqueue():queuestack.push()
pop():首先释放push操作的元素,若释放完毕,则将queuestack的元素释放并压入stack中,顺序颠倒,回到enqueue的顺序,释放stack的一个元素,再将其它元素释放压回queuestack中,清空stack,因为下一次操作可能为push和enqueue
import edu.princeton.cs.algs4.StdOut;
public class E1_4_29 {
public static void main(String[]args){
Steque<Integer> steque=new Steque<>();
for (int i=9;i>=7;i--)
steque.push(i);
steque.enqueue(4);
steque.enqueue(5);
steque.enqueue(6);
for (int i=3;i>=0;i--)
steque.push(i);
while (!steque.isEmpty())
StdOut.print(steque.pop()+" ");
}
public static class Steque<Item>{
Stack<Item> stack=new Stack<>();
Stack<Item> queueStack=new Stack<>();
public boolean isEmpty(){return size()==0;}
public int size(){return stack.size()+queueStack.size();}
public void push(Item item){
stack.push(item);
}
public Item pop(){
Item item;
if (stack.isEmpty()) {
while (!queueStack.isEmpty())
stack.push(queueStack.pop());
item = stack.pop();
while (!stack.isEmpty())
queueStack.push(stack.pop());
}
else
item=stack.pop();
return item;
}
public void enqueue(Item item){
queueStack.push(item);
}
}
}
方法二:两个栈stack和tempstack
push():stack.push
pop():stack.pop
enqueue():将stack的所有元素弹出压入tempstack中,此时stack为空,stack.push新元素,再将 tempstack所有元素弹出压回stack中。