忘记网站后台登陆地址,网站仿站,wordpress 4.8 wpmu,北京互联网上市公司有哪些用栈实现队列
题目#xff1a;用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作#xff08;push、pop、peek、empty#xff09;#xff1a;
实现 MyQueue 类#xff1a;
void push(int x) 将元素 x 推到队列的末尾int pop() 从队列…用栈实现队列
题目用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作push、pop、peek、empty
实现 MyQueue 类
void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空返回 true 否则返回 false
说明
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。你所使用的语言也许不支持栈。你可以使用 list 或者 deque双端队列来模拟一个栈只要是标准的栈操作即可。
示例 1
输入
[MyQueue, push, push, peek, pop, empty]
[[], [1], [2], [], [], []]
输出
[null, null, null, 1, 1, false]解释
MyQueue myQueue new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false提示
1 x 9最多调用 100 次 push、pop、peek 和 empty假设所有操作都是有效的 例如一个空的队列不会调用 pop 或者 peek 操作
方法一
栈的实现。使用两个栈。一个进一个出。因为调用规模不超过100所以我们可以用两个70的栈。
type MyQueue struct {LStack []intRStack []intLSize intRSize int
}func Constructor() MyQueue {return MyQueue{LStack: make([]int, 70), RStack: make([]int, 70),LSize: -1, RSize: -1}
}func (this *MyQueue) Push(x int) {if this.Full() {return}this.LSizethis.LStack[this.LSize] xif this.LSize len(this.LStack)/2 this.RSize -1 {for this.LSize 0 {this.RSizethis.RStack[this.RSize] this.LStack[this.LSize]this.LSize--}}
}func (this *MyQueue) Pop() int {val : this.Peek()this.RSize--return val
}func (this *MyQueue) Peek() int {if this.Empty() {return -1}if this.RSize -1 {for this.LSize 0 {this.RSizethis.RStack[this.RSize] this.LStack[this.LSize]this.LSize--}}return this.RStack[this.RSize]
}func (this *MyQueue) Empty() bool {if this.LSize -1 this.RSize -1 {return true}return false
}func (this *MyQueue) Full() bool {if this.LSizethis.RSize len(this.LStack)len(this.RStack)-2 {return true}return false
}