码迷,mamicode.com
首页 > 其他好文 > 详细

【笔试】25、栈和队列

时间:2015-08-27 15:19:07      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:java   剑指offer   笔试   


用两个栈实现一个队列。队列的声明如下,请实现他的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。


/**
 *题目:用两个栈实现一个队列。队列的声明如下,请实现他的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
 *时间:2015年8月27日09:52:06
 *文件:CQueue.java
 *作者:cutter_point
 */
package bishi.Offer50.y2015.m08.d27;

import java.util.*;

public class CQueue<T>
{
	private Stack<T> stack1;
	private Stack<T> stack2;
	public CQueue()
	{
		stack1 = new Stack<T>();
		stack2 = new Stack<T>();
	}
	
	/**
	 * 给队列末尾添加一个元素
	 * @param element
	 */
	public void appendTail(final T element)
	{
		stack1.push(element);
	}
	
	/**
	 * 删除队首元素
	 * @return
	 * @throws Exception
	 */
	public T deleteHead() throws Exception
	{
		T p;
		if(stack2.empty()) //如果stack2是空的
		{
			if(stack1.empty())
			{
				throw new Exception("队列为空");
			}//if
			else
			{
				//把栈1中元素移动到栈2中
				while(!stack1.empty())
				{
					p = stack1.pop();
					stack2.push(p);
				}//while
			}//else
		}//if
		
		return stack2.pop();
	}
	
	public static void Test(char actual, char expected)
	{
		if (actual == expected)
			System.out.print("Test passed.\n");
		else
			System.out.print("Test failed.\n");
	}
	
	public static void main(String[] args) throws Exception
	{
		CQueue<Character> queue = new CQueue<Character>();	//我们自定义的队列
		//添加三个元素,a,b,c
		queue.appendTail('a'); queue.appendTail('b'); queue.appendTail('c');
		//看看我们的队列是否是按照队列的方式工作的
		char head = queue.deleteHead();
		Test(head, 'a');

		head = queue.deleteHead();
		Test(head, 'b');

		queue.appendTail('d');
		head = queue.deleteHead();
		Test(head, 'c');

		queue.appendTail('e');
		head = queue.deleteHead();
		Test(head, 'd');

		head = queue.deleteHead();
		Test(head, 'e');
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

【笔试】25、栈和队列

标签:java   剑指offer   笔试   

原文地址:http://blog.csdn.net/cutter_point/article/details/48027381

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