スタックによるキューの操作


JAvaコード:
import java.util.ArrayList;
/*
 *  
 */
class MyStack {
	
	private ArrayList<Object> stack;
	
	public MyStack() {
		stack = new ArrayList<Object>();
	}
	
	public Object pop() {
		if(stack.size() == 0) {
			return null;
		}
		return stack.remove(stack.size() - 1);
	}
	
	public void push(Object o) {
		stack.add(o);
	}
	
	public int depth() {
		return stack.size();
	}
}

/*
 * 
 */
class MyQueue {

	private MyStack myEnqueue, myDequeue;
	
	public MyQueue() {
		myEnqueue = new MyStack();
		myDequeue = new MyStack();
	}
	
	public int length() {
		return myEnqueue.depth() + myDequeue.depth();
	}
	
	public void enqueue(Object o) {
		myEnqueue.push(o);
	}

	public Object dequeue() {
		if(this.length() == 0) {
			System.out.println("the queue is empty !");
			return null;
		}
		
		if(myDequeue.depth() == 0) {
			transfer();
		}
		
		return myDequeue.pop();
	}
	
	public boolean isEmpty() {
		if(this.length() == 0) {
			return true;
		} else {
			return false;
		}
	}
	
	private void transfer() {
		int depth = myEnqueue.depth();
		for(int i = 0; i < depth; i++) {
			myDequeue.push(myEnqueue.pop());
		}
	}
}

/*
 *  
 */
public class Test {
	
	public static void main(String[] args) {
		MyQueue myQueue = new MyQueue();
		
		System.out.println("------ ------");
		myQueue.enqueue(10);
		myQueue.enqueue(20);
		myQueue.enqueue(30);

		System.out.println(" :" + myQueue.length());
		
		System.out.println("------ ------");
		System.out.println(" :" + myQueue.dequeue());
		System.out.println(" :" + myQueue.dequeue());
		System.out.println(" :" + myQueue.dequeue());
		System.out.println(" :" + myQueue.dequeue());
	}
	
}