golang剑指offer-007.用两个栈实现队列

本文介绍了一种使用两个栈来实现队列的方法,通过将一个栈作为输入栈用于入队,另一个栈作为输出栈用于出队,实现了队列的基本操作。当输出栈为空时,将输入栈的所有元素倒置到输出栈,再进行出队操作。

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

大家在一开始接触数据结构的时候,应该就会学习过如何用栈来表示队列,方法很简单,两个栈的栈底相接,两个栈顶一个负责入队,一个负责出队。

题目描述

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

解题思路

在最开始说的很明白,利用数组实现栈。用一个栈做输入栈,一个做输出栈

  • 入队时,将元素压入输入栈。
  • 出队时,判断输出栈是否为空,如不为空,则直接弹出顶元素;如为空,则将输入栈的元素逐个“倒入”输出栈中,并把最后一个元素弹出并出队。
// 将栈定义为[]interface{},具体方法不再具体实现
// 主要使用的是栈的Push(),Pop(),IsEmpty()方法
type Que struct {
	in Stake
	out Stake
}

func (q *Que) Push(value interface{}) {
	q.in.Push(value)
}

func (q *Que) Pop() (interface{}, error) {
	if q.IsEmpty() {
		return nil, errors.New("Queue is empty.")
	}
	var value interface{}
	if !q.out.IsEmpty() {
		value, _ = q.out.Pop()
		return value, nil
	}
	for !q.in.IsEmpty() {
		value, _ = q.in.Pop()
		q.out.Push(value)
	}
	value, _ = q.out.Pop()
	return value, nil
}

利用栈实现队列是很容易的,只要逻辑理清即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值