请c语言实现:用树形结构表示文件目录。其中*表示为目录,*/表示根下的目录,其他为文件。 用**表示输入结束,每一级目录用"%-12s"输出。
时间: 2024-11-25 16:15:01 浏览: 29
在C语言中,我们可以使用链表结构来模拟树形结构表示文件目录。这里我们创建一个简单的结构体来存储目录信息,并使用递归函数来遍历并打印目录。首先,定义一个节点结构:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
char name[50];
int is_directory; // 1 表示目录,0 表示文件
struct Node* children; // 子目录指针
} DirectoryNode;
DirectoryNode* create_node(const char* name) {
DirectoryNode* newNode = (DirectoryNode*)malloc(sizeof(DirectoryNode));
strncpy(newNode->name, name, sizeof(newNode->name));
newNode->is_directory = *name == '*';
newNode->children = NULL;
return newNode;
}
void print_dir(DirectoryNode* node, int level) {
if (node != NULL) {
for (int i = 0; i < level; i++) {
printf("%-12s", "");
}
if (node->is_directory) {
printf("*%s/", node->name);
} else {
printf("%s", node->name);
}
printf("\n"); // 打印当前节点
if (node->children != NULL) { // 如果有子目录
print_dir(node->children, level + 1); // 递归打印子目录
}
}
}
```
接着,你可以通过以下方式读取输入并构建目录树:
```c
int main() {
char input[100];
while (fgets(input, sizeof(input), stdin) != NULL && input[0] != '**') { // 读取输入直到遇到**
DirectoryNode* root = create_node(input);
// 这里假设输入文件仅包含单层目录结构,更复杂的情况需要解析输入
// 在实际应用中,可能会使用堆栈来处理多层级目录输入
// 例如,你可以使用 `push` 和 `pop` 函数来操作堆栈
// 模拟输入的目录结构,如 "dir1/* file1.txt file2.txt"
// 分别创建子目录和文件
// ...
}
print_dir(root, 0); // 输出整个目录结构
free_tree(root); // 自定义的释放内存的函数
return 0;
}
```
注意:这个例子简化了实际的目录输入解析过程,实际应用中你需要根据具体的输入格式来调整读取和构建目录树的部分。同时,`free_tree`是一个假设的释放内存的辅助函数,用于清理动态分配的节点。
阅读全文