兩個棧實現一個隊列,兩個隊列實現一個棧

一、兩個棧實現一個隊列java

import java.util.Stack;

public class TwoStackToQueue {
	
	Stack<Integer>s1 = new Stack<Integer>();
	Stack<Integer>s2 = new Stack<Integer>();
	public void push(int node){
		s1.push(node);
	}
	
	public int pop(){
		if(s2.isEmpty()){
			while(!s1.isEmpty()){
				s2.push(s1.pop());
			}
		}
		return s2.pop();
	}

	public static void main(String[] args) {
		TwoStackToQueue tsq = new TwoStackToQueue();
		tsq.push(1);
		tsq.push(2);
		tsq.push(3);
		System.out.println(tsq.pop());
		System.out.println(tsq.pop());
		tsq.push(4);
		tsq.push(5);
		System.out.println(tsq.pop());
		System.out.println(tsq.pop());
	}
}

二、兩個隊列實現一個棧node

import java.util.LinkedList;
import java.util.Queue;

public class TwoQueueToStack {
	Queue<Integer> q1 = new LinkedList<Integer>();
	Queue<Integer> q2 = new LinkedList<Integer>();
	
	public void push(int node){//添加元素,若是q1不爲空,向q1添加;若是q2不爲空,向q2添加;都爲空時,向q1添加
		if(!q1.isEmpty()){
			q1.offer(node);
		}else if(!q2.isEmpty()){
			q2.offer(node);
		}else{
			q1.offer(node);
		}
	}
	public int pop(){	
		if(q1.isEmpty()&&q2.isEmpty()){
			try{
				throw new RuntimeException("Stcak is Empty!!!");
			}catch(Exception e){
				
			}
		}
		//若是Q1爲空,q2有元素,將q2中的元素依次出隊添加到q1,保留最後一個元素,而後出棧。
		if(q1.isEmpty()){
			while(q2.size()>1){
				q1.offer(q2.poll());
			}
			return q2.poll();
		}
		//若是Q2爲空,q1有元素,將q1中的元素依次出隊添加到q2,保留最後一個元素,而後出棧。
		if(q2.isEmpty()){
			while(q1.size()>1){
				q2.offer(q1.poll());
			}
			return q1.poll();
		}
		return (Integer) null;
	}

	public static void main(String[] args) {
		TwoQueueToStack tqs = new TwoQueueToStack();
		tqs.push(1);
		System.out.println(tqs.pop());
		tqs.push(2);
		tqs.push(3);
		
		System.out.println(tqs.pop());
		System.out.println(tqs.pop());
		
	}
}
相關文章
相關標籤/搜索