Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
两个栈实现一个队列
- 请用两个栈,实现一个队列
- 功能 add delete length 队列
队列是遵循先进先出(FIFO,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。
在现实中,最常见的队列的例子就是排队。
在计算机科学中,一个常见的例子就是打印队列。比如说我们需要打印五份文档。我们会打开每个文档,然后点击打印按钮。每个文档都会被发送至打印队列。第一个发送到打印队列的文档会首先被打印,以此类推,直到打印完所有文档。
- 先进先出
- API:add delete length
- 队列是逻辑结构,抽象模型
- 简单的,可以用数组、链表实现,数组和链表是一个物理结构
- 复杂的队列服务,需要单独设计
TS代码
class MyQueue {
private numStack;
private helpStack;
constructor() {
this.numStack = [];
this.helpStack = [];
}
push(x: number): void {
this.numStack.push(x);
}
pop(): number {
this.peek();
return this.helpStack.pop();
}
peek(): number {
if (this.helpStack.length === 0) {
while (this.numStack.length !== 0) {
this.helpStack.push(this.numStack.pop());
}
}
return this.helpStack[this.helpStack.length-1];
}
empty(): boolean {
return this.numStack.length === 0 && this.helpStack.length === 0
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* var obj = new MyQueue()
* obj.push(x)
* var param_2 = obj.pop()
* var param_3 = obj.peek()
* var param_4 = obj.empty()
*/
划重点
- 队列
- 逻辑结构VS物理结构
- 画图,帮助梳理解题思路