首页 > 其他 > 详细

用栈来实现队列的操作

时间:2015-10-06 20:56:47      阅读:105      评论:0      收藏:0      [点我收藏+]

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());
	}
	
}

用栈来实现队列的操作

原文:http://my.oschina.net/lovewxm/blog/513808

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!