mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-19 20:55:57 +08:00
build
This commit is contained in:
@ -14,22 +14,22 @@ comments: true
|
||||
|
||||
### 2. Q & A
|
||||
|
||||
!!! question "浏览器的前进后退是否是双向链表实现?"
|
||||
**Q**:浏览器的前进后退是否是双向链表实现?
|
||||
|
||||
浏览器的前进后退功能本质上是“栈”的体现。当用户访问一个新页面时,该页面会被添加到栈顶;当用户点击后退按钮时,该页面会从栈顶弹出。使用双向队列可以方便地实现一些额外操作,这个在“双向队列”章节有提到。
|
||||
浏览器的前进后退功能本质上是“栈”的体现。当用户访问一个新页面时,该页面会被添加到栈顶;当用户点击后退按钮时,该页面会从栈顶弹出。使用双向队列可以方便地实现一些额外操作,这个在“双向队列”章节有提到。
|
||||
|
||||
!!! question "在出栈后,是否需要释放出栈节点的内存?"
|
||||
**Q**:在出栈后,是否需要释放出栈节点的内存?
|
||||
|
||||
如果后续仍需要使用弹出节点,则不需要释放内存。若之后不需要用到,`Java` 和 `Python` 等语言拥有自动垃圾回收机制,因此不需要手动释放内存;在 `C` 和 `C++` 中需要手动释放内存。
|
||||
如果后续仍需要使用弹出节点,则不需要释放内存。若之后不需要用到,`Java` 和 `Python` 等语言拥有自动垃圾回收机制,因此不需要手动释放内存;在 `C` 和 `C++` 中需要手动释放内存。
|
||||
|
||||
!!! question "双向队列像是两个栈拼接在了一起,它的用途是什么?"
|
||||
**Q**:双向队列像是两个栈拼接在了一起,它的用途是什么?
|
||||
|
||||
双向队列就像是栈和队列的组合,或两个栈拼在了一起。它表现的是栈 + 队列的逻辑,因此可以实现栈与队列的所有应用,并且更加灵活。
|
||||
双向队列就像是栈和队列的组合,或两个栈拼在了一起。它表现的是栈 + 队列的逻辑,因此可以实现栈与队列的所有应用,并且更加灵活。
|
||||
|
||||
!!! question "撤销(undo)和反撤销(redo)具体是如何实现的?"
|
||||
**Q**:撤销(undo)和反撤销(redo)具体是如何实现的?
|
||||
|
||||
使用两个栈,栈 `A` 用于撤销,栈 `B` 用于反撤销。
|
||||
使用两个栈,栈 `A` 用于撤销,栈 `B` 用于反撤销。
|
||||
|
||||
1. 每当用户执行一个操作,将这个操作压入栈 `A` ,并清空栈 `B` 。
|
||||
2. 当用户执行“撤销”时,从栈 `A` 中弹出最近的操作,并将其压入栈 `B` 。
|
||||
3. 当用户执行“反撤销”时,从栈 `B` 中弹出最近的操作,并将其压入栈 `A` 。
|
||||
1. 每当用户执行一个操作,将这个操作压入栈 `A` ,并清空栈 `B` 。
|
||||
2. 当用户执行“撤销”时,从栈 `A` 中弹出最近的操作,并将其压入栈 `B` 。
|
||||
3. 当用户执行“反撤销”时,从栈 `B` 中弹出最近的操作,并将其压入栈 `A` 。
|
||||
|
Reference in New Issue
Block a user