data-structures - rutas - los caracteres..(doble punto) se usan para representar linux
Estructura de datos utilizada para la estructura de directorios (7)
Estoy creando un programa en el que el usuario compila directorios (no en Windows, en mi aplicación) y en estas carpetas hay subcarpetas, etc. cada carpeta debe contener carpetas o documentos. ¿Cuál es la mejor estructura de datos para usar? Tenga en cuenta que el usuario puede seleccionar una subcarpeta y buscar documentos en ella y en sus subcarpetas. Y no quiero limitar las carpetas o los niveles de las subcarpetas.
Esto es lo que hago:
Cada registro en la base de datos tiene dos campos: ID y ParentID. Los ID son de 4 a 5 caracteres (Base36, az: 0-9 o algo similar). Los ID de los padres son una concatenación de la estructura completa de los padres ...
Asi que...
Esta estructura:
Root
Folder1
Folder2
Folder3
Folder4
Folder5
Folder6
Sería representado de esta manera:
ID ParentID Name
0000 NULL ROOT
0001 0000 Folder1
0002 0000 Folder2
0003 00000002 Folder3
0004 0000 Folder4
0005 00000004 Folder5
0006 000000040005 Folder6
Me gusta esta estructura porque si necesito encontrar todos los archivos en una carpeta puedo hacer una consulta como:
SELECT * FROM Folders WHERE ParentID LIKE ''0000%'' -- to find all folders under Folder1
Para eliminar una carpeta y todos sus elementos secundarios:
DELETE FROM Folders WHERE ID=''0004'' AND ParentID LIKE ''00000004%''
Para mover una carpeta y sus elementos secundarios, debe actualizar todos los registros que usan el mismo elemento primario al nuevo elemento primario.
Y no quiero lintear las carpetas o los niveles de las subcarpetas
Una limitación obvia a esto es que el número de subcarpetas está limitado al tamaño de su campo ParentID.
La mayoría de los lenguajes de OO vienen con algún tipo de abstracción para el sistema de archivos, por lo que es allí donde comenzaría. Luego subclases si es necesario.
Esperaría directorios como una matriz de objetos que son directorios o archivos, por ejemplo.
Puedo pensar en algunas formas en que podrías estructurar esto, pero nada superaría lo obvio:
Usa el sistema de archivos actual.
Sé que la pregunta es específicamente pedir una estructura de datos, pero ...
Si está utilizando un lenguaje orientado a objetos, tal vez pueda usar el patrón de diseño compuesto que es ideal para este tipo de estructura de árbol jerárquica. Obtienes lo que estás pidiendo.
puedes usar la estructura de datos de árbol m-way
Me gustaría utilizar algún tipo de estructura de datos de árbol
Debo recomendar B + Tree ... Puede usar fácilmente indexación (página, carpeta, etc.) y todo.
B + Tree http://commons.wikimedia.org/wiki/File:Btree.png
para más información: http://ozark.hendrix.edu/~burch/cs/340/reading/btree/index.html