Data structures 浏览历史背后的数据结构

Data structures 浏览历史背后的数据结构,data-structures,linked-list,array-algorithms,Data Structures,Linked List,Array Algorithms,我正在写一个QML文件浏览器。现在,我想实现一个后退和前进功能。此功能类似于浏览器后退和前进功能。例如: 我从“/home/text/folder1”开始,浏览到“/home/text/folder1/src”。现在我浏览到“/home/text/folder1/src/java”。如果我按两次back,我应该在“/home/text/folder1”,我不能再按back(按钮应该是灰色的,或者以其他方式表示没有更多的“上一个”项目要显示) 我正在考虑通过一个双链接列表来实现这一点。然而,我在理

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

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

我正在考虑通过一个双链接列表来实现这一点。然而,我在理解应该在列表中插入新项目的位置和时间方面遇到了困难

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


这是一个数据结构问题,不是实现问题,所以不需要代码

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

我认为您使用双链接列表的想法是一个很好的起点。如果输入新目录,则在当前项之后添加新项,从而放弃链表的尾部


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

如果我有一个堆栈,那么我就不能实现前向功能了吗?或目前,我正在考虑使用一个currentItem指针,它告诉我在列表中的位置,从而告诉我上一个和下一个项目。我的问题主要是:-我什么时候插入一个新项目-如果要插入项目,我应该在哪里插入?好的,我在这方面考虑得更多。可能有:-在双链接列表中有一个当前节点指针,然后在当前节点后面添加一个函数。这样,如果我们没有更多的“前向”链接,就会添加一个新链接作为新的尾部。如果没有,链的其余部分(从当前项开始)将被丢弃,新的尾部只是新的链接,但您仍然拥有向后的链