然后从页面C访问了一个新的页面E。此时,页面C作为用户浏览过的历史页面压入栈1中,而由于页面E是一个新页面,新页面是不存在前进按钮的,因此作为存放可供前进页面的栈2就需要进行清空,如下:
然后用户又从页面E访问了一个新的页面F。此时页面E作为用户浏览过的历史页面压入栈1中,如下:
最后用户从页面F连续两次点击了后退按钮后退到了页面C。此时页面F和页面E作为历史页面且为可供前进的页面存入栈2中,如下:
至此,用户的操作完成,而栈1,栈2中的数据如上图所示,用户如果在C页面点击后退页面将进入B页面。如果点击前进页面,将进入E页面。
我们对应对上述案例的方案做一个总结:
- 新建两个栈:栈1和栈2
- 用户浏览的历史页面依次放入栈1中,用户点击后退按钮时,栈1的栈顶元素出栈,顶替用户的当前页面,同时用户的当前页面进入栈2中。当用户点击前进按钮时,栈2的栈顶元素出栈,顶替用户的当前页面,同时用户的当前页面进入栈1中。
- 当栈1无元素时,代表已到达最初的页面,此时浏览器的后退按钮不可用。当栈2无元素时,代表已到达最新的页面,此时浏览器的前进按钮不可用。
- 当用户从当前页面不使用前进按钮,而是直接访问一个新的页面时(无论此页面之前是否浏览过),都需要清空栈2的数据,同时将当前页面压入栈1中。
相信通过上述的案例,大家对如何实现浏览器的前进和后退功能都有了一定的了解。其实这项功能就是我们之前介绍过的数据结构:栈的一种应用。数据结构和算法其实就是某些特定业务场景的一种抽象,因此没有无用的数据结构,在实际的业务开发过程中,需要结合具体的业务场景,来选择对应的数据结构和算法。而这就需要我们对数据结构的特性和使用场景有一定的了解。
栈这种数据结构我们就介绍到这里,下期我们将再次带来一种新的数据结构,下期再见。