双栈数据结构设计:浏览器前进后退功能实现

作者头像 青和
2023-04-02 00:00:00
160 阅读
文章封面

双栈数据结构设计:浏览器前进后退功能实现

问题背景

浏览器历史记录管理是一个经典的数据结构问题。用户可以通过前进和后退按钮在访问过的页面之间导航,这需要高效的数据结构来支持这些操作。

双栈设计原理

双栈设计使用两个栈来分别存储后退和前进的历史记录。当用户访问新页面时,将当前页面压入后退栈;当用户后退时,从后退栈弹出页面并压入前进栈。

核心算法实现


class BrowserHistory:
    def __init__(self):
        self.back_stack = []      # 后退栈
        self.forward_stack = []   # 前进栈
        self.current_page = None
    
    def visit(self, url):
        """访问新页面"""
        if self.current_page:
            self.back_stack.append(self.current_page)
        self.current_page = url
        self.forward_stack.clear()  # 清空前进栈
    
    def back(self):
        """后退操作"""
        if not self.back_stack:
            return None
        self.forward_stack.append(self.current_page)
        self.current_page = self.back_stack.pop()
        return self.current_page
    
    def forward(self):
        """前进操作"""
        if not self.forward_stack:
            return None
        self.back_stack.append(self.current_page)
        self.current_page = self.forward_stack.pop()
        return self.current_page

时间复杂度分析

双栈设计的时间复杂度为O(1),空间复杂度为O(n),其中n为历史记录总数。这种设计非常适合频繁的前进后退操作。

评论区