剑指offer面试题7:用两个栈实现队列(Java实现)

题目:

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


import java.util.*;

public class Queue1
{  
    private Stack<String> a;//插入栈  
    private Stack<String> b;//删除栈  
    public static void main(String[] args) 
	{  
		Queue1 queue = new Queue1();      
		queue.appendTail("a");  
		queue.appendTail("b");  
		queue.appendTail("c");   
		queue.appendTail("d");  
		queue.appendTail("e");   
		while (!queue.isEmpty()) 
		{  
			System.out.println(queue.deleteHead());   
		}  
    }  
    public Queue1()
	{  
        a = new Stack<String>();  
        b = new Stack<String>();  
    }  
    public void appendTail(String string)
	{  
        a.push(string);  
    }  
    public String deleteHead() 
	{  
        if (b.isEmpty()) 
		{  
			while (!a.isEmpty())
			{  
				b.push(a.pop());  
			}  
		}  
        return b.pop();  
    }  
  
    public boolean isEmpty() 
	{  
        return b.isEmpty() && a.isEmpty();  
    }  
}  
拓展:

用两个队列实现堆栈

注意:Queue只是一个接口,不能实例化。以下代码用LinkedList实现

import java.util.*;
public class QueueToStack 
{
	private Queue<String> q1=new LinkedList<String>();
	private Queue<String> q2=new LinkedList<String>();
	public static void main(String[] args) 
	{
		QueueToStack qs=new QueueToStack();
		qs.push("as");
		qs.push("fd");
		qs.push("hg");
		qs.push("w");
		qs.push("jg");
		while(!qs.isEmpty())
			System.out.println(qs.pop());
	}
	public void push(String s)
	{
		if(q1.isEmpty())
		{	
			q1.offer(s);
			while(!q2.isEmpty())
				q1.offer(q2.poll());
		}
		else
		{	
			q2.offer(s);
			while(!q1.isEmpty())
				q2.offer(q1.poll());
		}
	}

	public String pop()
	{
		if(q1.isEmpty())
			return q2.remove();
		return q1.remove();
	}
	public boolean isEmpty()
	{
		return q1.isEmpty()&&q2.isEmpty();
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值