mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-12 05:20:59 +08:00
update 0232.用栈实现队列: 更新go代码
This commit is contained in:
@ -38,14 +38,14 @@ queue.empty(); // 返回 false
|
|||||||
|
|
||||||
## 思路
|
## 思路
|
||||||
|
|
||||||
《代码随想录》算法公开课:[栈的基本操作! | LeetCode:232.用栈实现队列](https://www.bilibili.com/video/BV1nY4y1w7VC),相信结合视频在看本篇题解,更有助于大家对链表的理解。
|
《代码随想录》算法公开课:[栈的基本操作! | LeetCode:232.用栈实现队列](https://www.bilibili.com/video/BV1nY4y1w7VC),相信结合视频再看本篇题解,更有助于大家对链表的理解。
|
||||||
|
|
||||||
|
|
||||||
这是一道模拟题,不涉及到具体算法,考察的就是对栈和队列的掌握程度。
|
这是一道模拟题,不涉及到具体算法,考察的就是对栈和队列的掌握程度。
|
||||||
|
|
||||||
使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈**一个输入栈,一个输出栈**,这里要注意输入栈和输出栈的关系。
|
使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈**一个输入栈,一个输出栈**,这里要注意输入栈和输出栈的关系。
|
||||||
|
|
||||||
下面动画模拟以下队列的执行过程如下:
|
下面动画模拟以下队列的执行过程:
|
||||||
|
|
||||||
执行语句:
|
执行语句:
|
||||||
queue.push(1);
|
queue.push(1);
|
||||||
@ -120,7 +120,7 @@ public:
|
|||||||
|
|
||||||
这样的项目代码会越来越乱,**一定要懂得复用,功能相近的函数要抽象出来,不要大量的复制粘贴,很容易出问题!(踩过坑的人自然懂)**
|
这样的项目代码会越来越乱,**一定要懂得复用,功能相近的函数要抽象出来,不要大量的复制粘贴,很容易出问题!(踩过坑的人自然懂)**
|
||||||
|
|
||||||
工作中如果发现某一个功能自己要经常用,同事们可能也会用到,自己就花点时间把这个功能抽象成一个好用的函数或者工具类,不仅自己方便,也方面了同事们。
|
工作中如果发现某一个功能自己要经常用,同事们可能也会用到,自己就花点时间把这个功能抽象成一个好用的函数或者工具类,不仅自己方便,也方便了同事们。
|
||||||
|
|
||||||
同事们就会逐渐认可你的工作态度和工作能力,自己的口碑都是这么一点一点积累起来的!在同事圈里口碑起来了之后,你就发现自己走上了一个正循环,以后的升职加薪才少不了你!哈哈哈
|
同事们就会逐渐认可你的工作态度和工作能力,自己的口碑都是这么一点一点积累起来的!在同事圈里口碑起来了之后,你就发现自己走上了一个正循环,以后的升职加薪才少不了你!哈哈哈
|
||||||
|
|
||||||
@ -231,56 +231,51 @@ class MyQueue:
|
|||||||
Go:
|
Go:
|
||||||
```Go
|
```Go
|
||||||
type MyQueue struct {
|
type MyQueue struct {
|
||||||
stack []int
|
stackIn []int //输入栈
|
||||||
back []int
|
stackOut []int //输出栈
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Initialize your data structure here. */
|
|
||||||
func Constructor() MyQueue {
|
func Constructor() MyQueue {
|
||||||
return MyQueue{
|
return MyQueue{
|
||||||
stack: make([]int, 0),
|
stackIn: make([]int, 0),
|
||||||
back: make([]int, 0),
|
stackOut: make([]int, 0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Push element x to the back of queue. */
|
// 往输入栈做push
|
||||||
func (this *MyQueue) Push(x int) {
|
func (this *MyQueue) Push(x int) {
|
||||||
for len(this.back) != 0 {
|
this.stackIn = append(this.stackIn, x)
|
||||||
val := this.back[len(this.back)-1]
|
|
||||||
this.back = this.back[:len(this.back)-1]
|
|
||||||
this.stack = append(this.stack, val)
|
|
||||||
}
|
|
||||||
this.stack = append(this.stack, x)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Removes the element from in front of queue and returns that element. */
|
// 在输出栈做pop,pop时如果输出栈数据为空,需要将输入栈全部数据导入,如果非空,则可直接使用
|
||||||
func (this *MyQueue) Pop() int {
|
func (this *MyQueue) Pop() int {
|
||||||
for len(this.stack) != 0 {
|
inLen, outLen := len(this.stackIn), len(this.stackOut)
|
||||||
val := this.stack[len(this.stack)-1]
|
if outLen == 0 {
|
||||||
this.stack = this.stack[:len(this.stack)-1]
|
if inLen == 0 {
|
||||||
this.back = append(this.back, val)
|
return -1
|
||||||
|
}
|
||||||
|
for i := inLen - 1; i >= 0; i-- {
|
||||||
|
this.stackOut = append(this.stackOut, this.stackIn[i])
|
||||||
|
}
|
||||||
|
this.stackIn = []int{} //导出后清空
|
||||||
|
outLen = len(this.stackOut) //更新长度值
|
||||||
}
|
}
|
||||||
if len(this.back) == 0 {
|
val := this.stackOut[outLen-1]
|
||||||
return 0
|
this.stackOut = this.stackOut[:outLen-1]
|
||||||
}
|
|
||||||
val := this.back[len(this.back)-1]
|
|
||||||
this.back = this.back[:len(this.back)-1]
|
|
||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get the front element. */
|
|
||||||
func (this *MyQueue) Peek() int {
|
func (this *MyQueue) Peek() int {
|
||||||
val := this.Pop()
|
val := this.Pop()
|
||||||
if val == 0 {
|
if val == -1 {
|
||||||
return 0
|
return -1
|
||||||
}
|
}
|
||||||
this.back = append(this.back, val)
|
this.stackOut = append(this.stackOut, val)
|
||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns whether the queue is empty. */
|
|
||||||
func (this *MyQueue) Empty() bool {
|
func (this *MyQueue) Empty() bool {
|
||||||
return len(this.stack) == 0 && len(this.back) == 0
|
return len(this.stackIn) == 0 && len(this.stackOut) == 0
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user