Структура данных используется для структуры каталогов? - PullRequest
10 голосов
/ 01 ноября 2008

Я создаю программу, в которой пользователь создает каталоги (не в Windows, в моем приложении), и в этих папках есть подпапки и т. Д .; каждая папка должна содержать папки или документы. Какую структуру данных лучше всего использовать? Обратите внимание, что пользователь может выбрать подпапку и искать документы в ней и в ее подпапках. И я не хочу ограничивать уровни папок или подпапок.

Ответы [ 7 ]

13 голосов
/ 01 ноября 2008

Вот что я делаю:

Каждая запись в базе данных имеет два поля: ID и ParentID. Идентификаторы состоят из 4-5 символов (Base36, a-z: 0-9 или что-то подобное). Родительские идентификаторы являются объединением полной структуры родителя ...

Итак ...

Эта структура:

Root
   Folder1
   Folder2
      Folder3
   Folder4
      Folder5
         Folder6

Будет выглядеть так:

ID     ParentID     Name

0000   NULL           ROOT
0001   0000           Folder1
0002   0000           Folder2
0003   00000002       Folder3
0004   0000           Folder4
0005   00000004       Folder5
0006   000000040005   Folder6

Мне нравится эта структура, потому что, если мне нужно найти все файлы в папке, я могу сделать запрос вроде:

SELECT * FROM Folders WHERE ParentID LIKE '0000%' -- to find all folders under Folder1

Чтобы удалить папку и все ее дочерние элементы:

DELETE FROM Folders WHERE ID='0004' AND ParentID LIKE '00000004%'

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

И я не хочу выравнивать уровни папок или подпапок

Очевидным ограничением является то, что количество подпапок ограничено размером вашего поля ParentID.

8 голосов
/ 01 ноября 2008

Я могу придумать несколько способов структурировать это, но ничто не сравнится с очевидным:

Использовать актуальную файловую систему.

5 голосов
/ 01 ноября 2008

Я хотел бы изучить использование какой-то древовидной структуры данных

1 голос
/ 17 октября 2013

Я должен порекомендовать B + Tree .... Вы можете легко использовать индексацию (страницы, папки и т. Д.) И все.

B + Дерево http://commons.wikimedia.org/wiki/File:Btree.png

для получения дополнительной информации: http://ozark.hendrix.edu/~burch/cs/340/reading/btree/index.html

0 голосов
/ 02 апреля 2010

вы можете использовать m-way древовидную структуру данных

0 голосов
/ 01 ноября 2008

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

Я бы ожидал, что каталоги - это массив объектов, например, каталогов или файлов.

0 голосов
/ 01 ноября 2008

Я знаю, что вопрос специально задает структуру данных, но ...

Если вы используете объектно-ориентированный язык, возможно, вы можете использовать составной шаблон проектирования, который идеально подходит для этого типа иерархической древовидной структуры. Вы получаете то, что просите.

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