структура данных за историю просмотра - PullRequest
3 голосов
/ 25 июля 2011

Я пишу браузер файлов QML. Теперь я хочу реализовать функции back и forward . Эта функция аналогична функциональности браузера вперед и назад. Пример:

Я начинаю с "/ home / text / folder1" и просматриваю "/ home / text / folder1 / src". Теперь я просматриваю "/ home / text / folder1 / src / java". Если я нажму два раза назад, я окажусь в «/ home / text / folder1», и я больше не смогу нажать назад (кнопка должна быть серой или каким-либо другим способом указывать, что больше нет «предыдущих» элементов, которые будут показаны ).

Я думал о реализации этого через двойной список. Однако у меня возникают проблемы с пониманием того, где я должен добавлять новые элементы в список, и когда я должен это делать.

Возьмите предыдущий пример: Если вместо того, чтобы нажимать назад дважды, я нажимаю назад только один раз (сейчас я нахожусь в "/ home / text / folder1 / src"). Если я вдруг перейду в "/ home / text / folder2", что теперь? Как теперь должен выглядеть мой двойной связанный список?

Это вопрос структуры данных, а не реализации, поэтому код не требуется.

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Я думаю, что ваша идея с использованием двукратного LinkedList является хорошей отправной точкой.Если вы вводите новый каталог, вы добавляете новый элемент после текущего элемента, отбрасывая хвост связанного списка.

Предположим, что мы были в папках 1,2,3 (т.е. у нас есть список 1->2->[3]квадратные скобки, обозначающие текущий узел).Теперь мы возвращаемся дважды, в результате чего [1]->2->3, если мы теперь перейдем к новой папке 4, мы получим 1->[4], поэтому мы отбросили часть 2->3.

1 голос
/ 25 июля 2011

У меня был бы стек, а не список.Каждая прямая навигация помещает ссылку в стек;каждый раз, когда вы возвращаетесь, вы удаляете предмет из стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...