【数据结构与算法】(6):用两个栈实现一个队列


字数:344 阅读时长:1分钟 阅读:85

队列是一种 先进先出FIFO)的数据结构,本文就演示一下 用两个栈(Stack)实现一个队列(Queue)

数据结构与算法 · 用两个栈实现一个队列

一、前言

  • 队列是逻辑结构,是一个理论模型。
  • 只能在队尾插入元素,在队头删除元素。

数据结构与算法 · 队列

二、代码演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
export class MyQueue {
private stack1: number[] = []
private stack2: number[] = []

add(n: number) {
this.stack1.push(n)
}
delete():number | null {
let res
const stack1 = this.stack1
const stack2 = this.stack2

// 将 stack1 所有元素移动到 stack2 中
while (stack1.length) {
const n = stack1.pop()
if (n!=null) {
stack2.push(n)
}
}

// stack2 pop
res = stack2.pop()

// 将 stack2 所有元素还给 stack1
while (stack2.length) {
const n = stack2.pop()
if (n!=null) {
stack1.push(n)
}
}

return res || null

}
get length(): number {
return this.stack1.length
}
}

const q = new MyQueue()
q.add(100)
q.add(200)
q.add(300)
console.log(q.length)
console.log(q.delete())
console.log(q.length)
console.log(q.delete())
console.log(q.length)
  • 逻辑结构 VS 物理结构

逻辑结构 VS 物理结构

三、算法复杂度

  • 时间复杂度 add O(1); delete O(n)
  • 空间复杂度 整体是 O(n)

《数据结构与算法》系列

  1. 什么是算法复杂度
  2. 堆(heap)、栈(stack)、队列(queue)
  3. 把一个数组旋转k步
  4. 判断字符串是否括号匹配
  5. 数组、栈、链表、队列结构与对比
  6. 用两个栈实现一个队列
  7. 反转单向链表
  8. 用链表实现队列
  9. 二分查找
  10. 查找两数之和

欢迎访问:天问博客

本文作者: Tiven
发布时间: 2023-07-14
最后更新: 2023-07-20
本文标题: 【数据结构与算法】(6):用两个栈实现一个队列
本文链接: https://www.tiven.cn/p/bf65fdf9/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
欢迎留言,提问 ^_^
个人邮箱: tw.email@qq.com
notification icon
博客有更新,将会发送通知给您!