浏览历史背后的数据结构

时间:2011-07-25 12:03:00

标签: data-structures linked-list array-algorithms

我正在编写一个QML文件浏览器。现在,我想实现后退前进功能。此功能类似于浏览器后退和前进功能。示例:

我从“/ home / text / folder1”开始,然后浏览到“/ home / text / folder1 / src”。现在我浏览到“/ home / text / folder1 / src / java”。如果我按两次,我应该在“/ home / text / folder1”,我不能再按回(按钮应该变灰或以其他方式表示没有更多的“上一个”项目要显示)。

我正在考虑通过双链表实现这一点。但是,我很难理解我应该在列表中插入新项目的位置,以及何时应该这样做。

采取前面的例子: 如果不按两次,我只按一次(我现在在“/ home / text / folder1 / src”)。如果我突然去“/ home / text / folder2”,现在怎么办?我的双链表怎么样呢?

这是一个数据结构问题,而不是实现,因此不需要代码。

2 个答案:

答案 0 :(得分:3)

我认为使用双重LinkedList的想法是一个很好的开始。如果输入新目录,则在当前项目之后添加新项目,丢弃链接列表的尾部。

假设我们在文件夹1,2,3中(即我们有列表1->2->[3],方括号表示当前节点)。现在我们返回两次,如果我们现在转到新文件夹4,则生成[1]->2->3,我们获得1->[4],因此我们放弃了2->3部分。

答案 1 :(得分:1)

我会有一个堆栈,而不是一个列表。每个前进导航都会在堆栈上放置一个链接;每次返回时,都会从堆栈中删除该项目。