用栈来实现队列的操作
2015-10-06 20:02
417 查看
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()); } }
相关文章推荐
- C#线程队列用法实例分析
- 算法系列15天速成 第九天 队列
- C++基于栈实现铁轨问题
- C语言单链队列的表示与实现实例详解
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- mysql 队列 实现并发读
- C#队列Queue用法实例分析
- C#多线程处理多个队列数据的方法
- C语言循环队列的表示与实现实例详解
- C++循环队列实现模型
- C#内置队列类Queue用法实例
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- C#通过链表实现队列的方法
- java数据结构之java实现栈
- C#队列Queue多线程用法实例
- C#数据结构与算法揭秘五 栈和队列
- JAVA 虚拟机 栈