1. 題目描述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。
2. 解題思路
- 入隊:將元素進棧A
- 出隊:判斷棧B是否爲空,如果爲空,則將棧A中所有元素pop,並push進棧B。
- 如果棧B不爲空,棧B出棧。
3. 代碼
public class TwoStackImplementationQueues {
public static Stack<Integer> stack1 = new Stack<Integer>();
public static Stack<Integer> stack2 = new Stack<Integer>();
public static void main(String [] args){
TwoStackImplementationQueues mm=new TwoStackImplementationQueues();
for (int i=0;i<5;i++){
mm.push(i);
}
while(true){
System.out.println(mm.pop());
}
}
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack1.empty()&&stack2.empty()){
throw new RuntimeException("Queue is empty!");
}
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
運行:
0
1
2
3
4
Exception in thread "main" java.lang.RuntimeException: Queue is empty!
4. 兩個隊列實現棧
解題思路:
- 在push的時候,把元素向非空的隊列內添加
- 在pop的時候,把不爲空的隊列中的size()-1個元素poll出來,添加到另爲一個爲空的隊列中,再把隊列中最後的元素poll出來
- 兩個隊列在棧不爲空的情況下始終是有一個爲空,另一個不爲空的。push添加元素到非空的隊列中,pop把非空隊列的元素轉移到另一個空的隊列中,直到剩下最後一個元素,這個元素就是要出棧的元素(最後添加到隊列中的元素)。
- 最終兩個隊列都爲空,這裏其實只是利用隊列的先進先出做了一箇中間轉換。
代碼;
import java.util.LinkedList;
import java.util.Queue;
public class TwoQueuesImplementStack {
private static Queue<Object> queue1=new LinkedList<Object>();
private static Queue<Object> queue2=new LinkedList<Object>();
public static void main(String[] args) {
TwoQueuesImplementStack mm =new TwoQueuesImplementStack();
for (int i=0;i<5;i++){
mm.push(i);
}
System.out.println("..............");
while(true){
mm.pop();
}
}
// 向隊列中執行入棧操作時,把元素添加到非空的隊列中
public void push(Object item){
if(!queue1.isEmpty())
queue1.offer(item);
else
queue2.offer(item);
System.out.println("入棧元素爲:"+item);
}
public void pop(){
if((!queue1.isEmpty())||(!queue2.isEmpty())){
if(queue1.isEmpty()){
while(queue2.size()>1){
queue1.offer(queue2.poll());
}
System.out.println("出棧元素爲:"+queue2.poll());
}else{
while(queue1.size()>1){
queue2.offer(queue1.poll());
}
System.out.println("出棧元素爲:"+queue1.poll());
}
}
else
throw new RuntimeException("棧爲空,無法執行出棧操作");
}
}
運行:
入棧元素爲:0
入棧元素爲:1
入棧元素爲:2
入棧元素爲:3
入棧元素爲:4
..............
出棧元素爲:4
出棧元素爲:3
出棧元素爲:2
出棧元素爲:1
出棧元素爲:0
Exception in thread "main" java.lang.RuntimeException: 棧爲空,無法執行出棧操作
以上是學習筆記,進攻參考。