剑指 Offer 09-用两个栈实现队列

本文详细介绍了如何使用两个栈来模拟队列的行为,通过不断将输入栈的元素转移到输出栈,实现在不改变栈结构的前提下实现元素的逆序排列。通过代码示例展示了CQueue类如何利用这种原理实现appendTail和deleteHead操作。
摘要由CSDN通过智能技术生成

题目

思路

解法一

我们都知道队列是一种先进先出的结构,而栈是一种先进后出的结构。因此只需要将一个栈中的元素倒入另一个栈,就可以实现元素的逆序排列,进而实现类似队列的先进先出效果。
下面通过一个例子说明:



代码很简单:

public class CQueue
{
	private readonly Stack<int> _inStack, _outStack;
	public CQueue()
	{
		_inStack = new();
		_outStack = new();
	}

	public void AppendTail(int value) {
		// 新元素直接压入输入栈
		_inStack.Push(value);
	}

	public int DeleteHead()
	{
		if (_outStack.Count == 0)
		{
			// 两个栈都没有元素,直接返回-1
			if (_inStack.Count == 0)
			{
				return -1;
			}
			// 把输入栈的元素挪入输出栈
			while (_inStack.Count > 0)
			{
				_outStack.Push(_inStack.Pop());
			}
		}
		return _outStack.Pop();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值