剑指Offer_两个栈来实现队列_05

本文介绍了一种使用两个栈来模拟队列的方法,通过这种方式可以有效地实现队列的基本操作——入队和出队。该方法利用一个栈作为数据的主要存储栈,另一个栈则用于辅助出队操作,确保出队顺序符合先进先出的原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。


package code;

//题目描述:
//    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
//思路:
//    第一个栈时主要的用来模拟队列,第二个栈用来辅助
//    进队列时将数据插到队尾,相当于把数据压入第一个栈,
//    出队列时需要取出队头,可以把第一个栈的内容倒过来放到第二个栈,这样第二个栈的栈顶就是队头了。
//    将队头取出来后再将第二个栈剩下的内容倒过来放到第一个栈去,相当于出队列后的样子
import java.util.Stack;
public class Offer04 
{
	public static void main(String[] args)
	{
		Offer04 offer = new Offer04();
		offer.push(1);
		offer.push(2);
		offer.push(3);
		offer.pop();
		offer.print();
	}

	Stack<Integer> stack1 = new Stack<Integer>();
	Stack<Integer> stack2 = new Stack<Integer>();

	public void push(int node) 
	{
		stack1.push(node);
	}

	public int pop() 
	{

		while(!stack1.isEmpty())
			stack2.push(stack1.pop());
		
		int first = stack2.pop();

		while(!stack2.isEmpty())
			stack1.push(stack2.pop());
		return first;
    }
	
	public void print()
	{//打印队列内容(按出队列顺序打印)
		while(!stack1.isEmpty())
		{
			stack2.push(stack1.pop());
		}
		while(!stack2.isEmpty())
		{
			System.out.println(stack2.peek());
			stack1.push(stack2.pop());
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值