树的实例--模拟文件系统

实例,模拟,文件系统 · 浏览次数 : 3

小编点评

## 代码解析和归纳总结 这段代码展示了一种基于链式存储的 Node 结构的实现,用于构建一个文件系统树结构。 **主要类:** * **Node:** 用于链式存储节点,包含名称、类型、子节点和父节点等信息。 * **FileSystemTree:** 负责构建和管理文件系统树。它包含一个 `root` 属性,指向根目录的 Node 对象。 **主要方法:** * **__init__:** 初始化方法,根据类型设置节点属性。 * **__repr__:** 返回节点的字符串表示形式。 * **mkdir:** 创建子节点,并将其加入当前节点的子节点列表。 * **ls:** 返回当前节点的所有子节点。 * **cd:**切换到指定的子节点。 * **tree:** 创建一个新的文件系统树。 **代码解析:** 1. **Node** 类定义了一个 `name` 和 `type` 属性用于存储节点的名称和类型。 2. **FileSystemTree** 类定义了一个 `root` 属性,指向根目录的 Node 对象。 3. **mkdir** 方法用于创建子节点并将其加入当前节点的子节点列表。 4. **ls** 方法用于返回当前节点的所有子节点。 5. **cd** 方法用于切换到指定的子节点。 6. **tree** 方法用于创建一个新的文件系统树。 **归纳总结:** 这段代码展示了使用链式存储和面向对象编程风格构建文件系统树的一种有效方法。它可以用来构建各种类型的文件系统,例如 Linux 文件系统、可扩展文件系统等。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

# -*- coding: utf-8 -*-

class Node:
    # 链式存储
    def __init__(self, name, type='dir'):
        self.name = name
        self.type = type  # "dir" or "file"
        self.children = []
        self.parent = None
        
    def __repr__(self):
        return self.name


class FileSystemTree:
    def __init__(self):
        self.root = Node("/")
        self.now = self.root

    def mkdir(self, name):
        # name 以 / 结尾
        if name[-1] != "/":
            name += "/"
        node = Node(name)
        self.now.children.append(node)
        node.parent = self.now

    def ls(self):
        return self.now.children

    def cd(self, name):
        # "/var/python/"
        if name[-1] != "/":
            name += "/"
        if name == "../":
            self.now = self.now.parent
            return
        for child in self.now.children:
            if child.name == name:
                self.now = child
                return
        raise ValueError("invalid dir")


tree = FileSystemTree()
tree.mkdir("var/")
tree.mkdir("bin/")
tree.mkdir("usr/")

tree.cd("bin/")
tree.mkdir("python/")

tree.cd("../")

print(tree.ls())

与树的实例--模拟文件系统相似的内容:

树的实例--模拟文件系统

博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- class Node: # 链式存储 def __init__(self, name, type='dir'): self.name = name self.type = t

[转帖]jmeter线程组与循环次数的区别

在压测的时候,有些接口需要携带登录信息,但是我们只想登录一次,然后其他接口进行多用户压测,此时你会怎么办?用仅一次控制器实现吗?下面我们来看看用仅一次控制器能不能实现 压测时jmeter中的线程数是模拟并发用户的,我们设置线程数5,然后登录请求添加一个仅一次控制器,我们通过察看结果树看到登录请求是执

递归解析Json,实现生成可视化Tree+快速获取JsonPath

内部平台的一个小功能点的实现过程,分享给大家: 递归解析Json,可以实现生成可视化Tree+快速获取JsonPath。 步骤: 1.利用JsonPath读取根,获取JsonObject 2.递归层次遍历JsonObjec,保存结点信息 3.利用zTree展示结点为可视化树,点击对应树的结点即可获取

图解B树及C#实现(2)数据的读取及遍历

前言 本文为系列文章 B树的定义及数据的插入 数据的读取及遍历(本文) 数据的删除 前一篇文章为大家介绍了 B树 的基本概念及其插入算法。本文将基于前一篇的内容,为大家介绍插入到 B树 中的数据该怎么读取及遍历, 本文的代码基于前一篇文章的代码,已经实现的功能可能会被省略,只介绍新增的功能。 在本文

分享一个关于Avl树的迭代器算法

1 研究过程 前段时间在研究avl树的迭代实现,在节点不使用parent指针的情况下,如何使用堆栈来实现双向地迭代。我参考了网络上的大部分迭代器实现,要么是使用了parent指针(就像c++的map容器中的迭代算法),要么就是前中后序遍历,没找到一种真正意义上可以双向迭代的算法,于是乎在我的不屑努力

与堆和堆排序相关的问题

与堆和堆排序相关的问题 作者:Grey 原文地址: 博客园:与堆和堆排序相关的问题 CSDN:与堆和堆排序相关的问题 堆结构说明 堆结构就是用数组实现的完全二叉树结构,什么是完全二叉树?可以参考如下两篇博客: 使用二叉树的递归套路来解决的问题 快速求完全二叉树的节点个数 完全二叉树中如果每棵子树的最

使用c#强大的表达式树实现对象的深克隆

一、表达式树的基本概念 表达式树是一个以树状结构表示的表达式,其中每个节点都代表表达式的一部分。例如,一个算术表达式 a + b 可以被表示为一个树,其中根节点是加法运算符,它的两个子节点分别是 a 和 b。在 LINQ(语言集成查询)中,表达式树使得能够将 C# 中的查询转换成其他形式的查询,比如

循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表TreeView的使用

在我们展示一些参考信息的时候,有所会用树形列表来展示结构信息,如对于有父子关系的多层级部门机构,以及一些常用如字典大类节点,也都可以利用树形列表的方式进行展示,本篇随笔介绍基于WPF的方式,使用TreeView来洗实现结构信息的展示,以及对它的菜单进行的设置、过滤查询等功能的实现逻辑。

再谈vue中的differ算法

Differ算法 在 Vue 中,当数据变化时,Vue 会使用 Virtual DOM 和 diff 算法来尽可能地减少 DOM 操作的次数,以提高性能。 diff 算法是 Virtual DOM 实现中的核心算法之一,其主要作用是比较新旧虚拟 DOM 树的差异,并将差异应用到真实的 DOM 树上。

图解B树及C#实现(3)数据的删除

前言 本文为系列文章 B树的定义及数据的插入 数据的读取及遍历 数据的删除 阅读本文前,建议先复习前两篇文章,以便更好的理解本文。 从删除的数据所在的节点可分为两种情况: 从叶子节点删除数据 从非叶子节点删除数据 无论从叶子节点还是非叶子节点删除数据时都需要保证B树的特性:非根节点每个节点的 key