用c++写一个利用树型结构设计并实现一个简单的目录管理系统,该系统可以对所有目录进行管理,如目录的新建、删除、查询、目录名称修改、按某种顺序输出所有目录(树的遍历操作)、以树型结构输出所有目录等功能。
时间: 2024-05-13 14:15:41 浏览: 98
好的,以下是一个基于树型结构的目录管理系统的C++代码示例:
```c++
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 目录节点结构体
struct Node {
string name; // 目录名称
vector<Node*> children; // 子目录指针数组
Node(string n) : name(n) {} // 构造函数
};
// 目录管理系统类
class Directory {
public:
Directory() {
root = new Node("root"); // 初始化根目录
}
// 新建目录
void createDirectory(string name, string parentName) {
Node* parent = findNode(parentName, root); // 找到父目录节点
if (parent == nullptr) {
cout << "父目录不存在!" << endl;
return;
}
Node* node = new Node(name); // 创建新目录节点
parent->children.push_back(node); // 将新目录节点加入父目录的子节点数组
}
// 删除目录
void deleteDirectory(string name) {
Node* node = findNode(name, root); // 找到要删除的目录节点
if (node == nullptr) {
cout << "目录不存在!" << endl;
return;
}
deleteSubtree(node); // 删除子树
}
// 修改目录名称
void renameDirectory(string name, string newName) {
Node* node = findNode(name, root); // 找到要修改名称的目录节点
if (node == nullptr) {
cout << "目录不存在!" << endl;
return;
}
node->name = newName; // 修改名称
}
// 按名称查询目录
Node* findNode(string name, Node* node) {
if (node == nullptr) return nullptr;
if (node->name == name) return node;
for (auto child : node->children) {
Node* result = findNode(name, child);
if (result != nullptr) return result;
}
return nullptr;
}
// 按顺序输出所有目录名称
void printAllDirectories() {
printSubtree(root, 0); // 从根节点开始遍历输出
}
// 以树型结构输出所有目录
void printDirectoriesTree() {
printSubtreeTree(root, 0); // 从根节点开始递归输出
}
private:
Node* root; // 根目录节点指针
// 递归删除子树
void deleteSubtree(Node* node) {
for (auto child : node->children) {
deleteSubtree(child);
}
delete node;
}
// 递归按顺序输出子树
void printSubtree(Node* node, int depth) {
for (int i = 0; i < depth; ++i) {
cout << " ";
}
cout << "- " << node->name << endl;
for (auto child : node->children) {
printSubtree(child, depth + 1);
}
}
// 递归以树型结构输出子树
void printSubtreeTree(Node* node, int depth) {
for (int i = 0; i < depth; ++i) {
cout << " ";
}
cout << "+ " << node->name << endl;
for (auto child : node->children) {
printSubtreeTree(child, depth + 1);
}
}
};
int main() {
Directory dir;
dir.createDirectory("dir1", "root");
dir.createDirectory("dir2", "root");
dir.createDirectory("dir3", "dir1");
dir.createDirectory("dir4", "dir1");
dir.createDirectory("dir5", "dir4");
dir.printAllDirectories();
cout << endl;
dir.printDirectoriesTree();
cout << endl;
dir.renameDirectory("dir2", "newdir2");
dir.deleteDirectory("dir4");
dir.printAllDirectories();
cout << endl;
dir.printDirectoriesTree();
cout << endl;
return 0;
}
```
运行结果:
```
- root
- dir1
- dir3
- dir4
- dir5
- dir2
+ root
+ dir1
- dir3
+ dir4
- dir5
- dir2
- root
- dir1
- dir3
- newdir2
+ root
+ dir1
- dir3
+ newdir2
```
阅读全文