码迷,mamicode.com
首页 > 编程语言 > 详细

Java之用栈实现队列

时间:2017-08-29 14:38:46      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:cep   image   width   log   两个栈实现队列   private   结构   链表   span   

队列是一种典型的先进先出数据结构,队列的实现方式有很多种,比如数组,比如链表等,队列也可以用两个栈来实现,下面就用两个栈实现一个队列。

原理

  两个栈中,一个栈用来入队,叫他入队栈,另一个栈用来出队,叫出队栈。

  当入队时,我们直接把元素压入入队栈。

  当出队时,分两种情况:

         ①若出队栈不为空,则直接出队栈栈顶元素出栈

         ②若出队栈为空,则入队栈元素依次出栈并压入出队栈,然后出队栈出栈

技术分享

具体实现

  知道了原理后,实现起来就很简单啦,这里我们借助JDK中的java.util.stack类来作为我们队列中的栈,JDK实现的这个栈继承了Vector类,所以他的底层也是用到了数组。

  代码如下

package com.gdut.ds.queue;

import java.util.Stack;


/**
 * 用两个栈实现队列
 */
public class Queue<T> {
	/**
	 * 入队栈
	 */
	private Stack<T> inStack = new Stack<T>();
	
	/**
	 * 出队栈
	 */
	private Stack<T> outStack = new Stack<T>();
	
	/**
	 * 队列大小
	 */
	private int size;
	
	/**
	 * 入队
	 */
	public void enqueue(T obj) {
		inStack.push(obj);
		size++;
	}
	
	/**
	 * 出队
	 * @return
	 */
	public T dequeue() {
		T obj = null;
		if(outStack.empty()) {
			while(!inStack.empty()){
				outStack.push(inStack.pop());
			}
		}
		obj = outStack.pop();
		size--;
		return obj;
	}
	
	/**
	 * 队列的大小
	 * @return
	 */
	public int size() {
		return size;
	}
	
	/**
	 * 队列是否为空
	 * @return
	 */
	public boolean empty() {
		return size == 0;
	}
}

测试

        Queue<String> queue = new Queue<>();
        queue.enqueue("Hello");
        queue.enqueue("My");
        queue.enqueue("Name");
        queue.enqueue("is");
        queue.enqueue("YangHao");
        System.out.println(queue.size());
        while(!queue.empty()){
            System.out.println(queue.dequeue());
        }

  结果如下

5
Hello
My
Name
is
YangHao

  当队列没有元素时,Stack类会抛一个EmptyStackExcep。

 

Java之用栈实现队列

标签:cep   image   width   log   两个栈实现队列   private   结构   链表   span   

原文地址:http://www.cnblogs.com/gdutzyh/p/7447659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!