【问题标题】:datastructure behind browsing history浏览历史背后的数据结构
【发布时间】:2011-10-12 13:09:33
【问题描述】:

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

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

我正在考虑通过双链表来实现这一点。但是,我很难理解应该在哪里插入新项目到列表中,以及应该在什么时候插入。

以前面的例子: 如果不是按两次,我只按一次(我现在在“/home/text/folder1/src”中)。如果我突然转到 "/home/text/folder2" ,现在怎么办?我的双链表现在应该是什么样子?

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

【问题讨论】:

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


    【解决方案1】:

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

    假设我们在文件夹 1,2,3 中(即我们有列表 1->2->[3],方括号表示当前节点)。现在我们返回两次,得到[1]->2->3,如果我们现在去一个新的文件夹4,我们得到1->[4],所以我们丢弃了2->3部分。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果我有一个堆栈,那么我不能实现转发功能?要么?目前,我正在考虑有一个 currentItem 指针,它告诉我我在列表中的位置,因此告诉我上一个和下一个项目。我的问题主要是: - 我什么时候插入新项目 - 如果要插入项目,我应该在哪里插入?
      • 好的,我想多了。也许有: - 双链表中的当前节点指针,然后只有一个函数可以添加到当前节点后面。这样,如果我们没有更多的“前向”链接,则会添加一个新链接作为新的尾部。如果不是,则链的其余部分(从当前项目开始)被丢弃,新的尾部只是新的链接,但你仍然有向后的链
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2015-10-10
      • 2018-05-28
      • 2015-04-03
      相关资源
      最近更新 更多