Risposta rapida breve
Scegli prima una struttura ad albero normale, successivamente cerca una versione ottimizzata simile
Risposta estesa lunga e noiosa
Utilizza prima una struttura ad albero normale.
Ho letto che sembra che tu tenti di memorizzare l'intero percorso in ogni elemento del nodo,
e questo è uno dei motivi per cui la tua struttura potrebbe richiedere un'ottimizzazione non necessaria.
Nota: i seguenti esempi sono pseudocodici. Questi non sono specifici linguaggi di programmazione, esempi finiti.
Invece di avere qualcosa di simile:
public struct NodeStruct
{
public string FullPath;
public *NodeStruct Container;
public List<*NodeStruct> Items;
}
int main()
{
int ErrorCode = 0;
*NodeStruct MyFileSystem =
new nodeStruct;
MyFileSystem->FullPath = "FileSystem";
MyFileSystem->Container = null;
*NodeStruct CDrive =
new nodeStruct;
CDrive->FullPath = "C:\";
CDrive->Container = MyFileSystem;
*NodeStruct DDrive =
new nodeStruct;
DDrive->FullPath = "D:\";
DDrive->Container = MyFileSystem;
*NodeStruct SomeFolder = null;
*NodeStruct SomeFile = null;
SomeFolder =
new nodeStruct;
SomeFolder->FullPath = "C:\Program Files";
SomeFolder->Container = CFolder;
SomeFolder =
new nodeStruct;
SomeFolder->FullPath = "C:\My Documents";
SomeFolder->Container = CFolder;
SomeFile =
new nodeStruct;
MyFileSystem->FullPath = "C:\My Documents\Homework1.doc";
MyFileSystem->Container = SomeFolder;
free MyFileSystem;
return ErrorCode;
} // int main(...)
Potresti volere qualcosa di simile a questo:
public struct NodeStruct
{
string Identifier;
public *NodeStruct Container;
public List<*NodeStruct> Items;
}
string GetFullPath(*NodeStruct AFileSystemItem)
{
string ErrorCode = "";
// code to "traverse" a tree item or tree node
// and get the full path
return ErrorCode;
} // string GetFullPath(...)
int main()
{
int ErrorCode = 0;
*NodeStruct MyFileSystem =
new nodeStruct;
MyFileSystem->FullPath = "FileSystem";
MyFileSystem->Container = null;
*NodeStruct CDrive =
new nodeStruct;
CDrive->FullPath = "C:";
CDrive->Container = MyFileSystem;
*NodeStruct DDrive =
new nodeStruct;
DDrive->FullPath = "D:";
DDrive->Container = MyFileSystem;
*NodeStruct SomeFolder = null;
*NodeStruct SomeFile = null;
SomeFolder =
new nodeStruct;
SomeFolder->FullPath = "Program Files";
SomeFolder->Container = CFolder;
SomeFolder =
new nodeStruct;
SomeFolder->FullPath = "My Documents";
SomeFolder->Container = CFolder;
SomeFile =
new nodeStruct;
MyFileSystem->FullPath = "Homework1.doc";
MyFileSystem->Container = SomeFolder;
string AFullPath = GetFullPath(SomeFile);
// "AFullPath" should have the "C:\My Documents\Homework1.doc" value
free MyFileSystem;
return ErrorCode;
} // int main(...)
Non hai specificato una particolare lingua di programmazione nella tua domanda. Né se utilizzi una P.L. imperativa, procedurale, funzionale o orientata agli oggetti, ciò potrebbe aiutarti a suggerirti una libreria.
Saluti.