设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件。

我实现的功能是提供父目录(兄弟目录),输入文件名,创建树型目录结构,文本文件不可以再有子目录。最终打印出每个创建的文件夹或文本文件的路径。

代码:

#include <cstdio>
#include <cstdlib>
#include <iostream> using namespace std; typedef struct node //节点
{
char *data; //文件名
int dir_file; //文件夹或者文本文件
struct node *first_child,*next_sibling;
} tree; //多叉树 typedef struct //存放树节点的队列
{
tree * data;
int pre;
} Box; typedef struct
{
Box data[];
int front,rear;
} Queue; Queue que; void height(tree *t) // 层序遍历
{
tree *p = t,*q;
que.data[].data = p;
que.data[].pre = -;
que.front = -;
que.rear = ;
if(p->first_child == NULL)
return ;
while(que.front != que.rear)
{
que.front++;
q = que.data[que.front].data->first_child;
while(q != NULL)
{
que.rear++;
que.data[que.rear].data = q;
que.data[que.rear].pre = que.front;
q = q->next_sibling;
}
}
} tree *insertTree(char *ch, tree *parent, tree *pre_sibling,int judge) //插入节点
{
tree *child = (tree *)malloc(sizeof(tree));
child->data = ch;
child->dir_file = judge; if (parent != NULL)
{
parent->first_child = child;
}
if (pre_sibling != NULL)
{
pre_sibling->next_sibling = child;
} child->first_child = NULL;
child->next_sibling = NULL; return child;
} tree *create() //创建头节点
{
tree *root = (tree *)malloc(sizeof(tree));
root->data = "root";
root->dir_file = ;
root->first_child = NULL;
root->next_sibling = NULL;
return root;
} void insert(Queue q,int index,int tj) //插入函数
{
char *name;
name = new char [];
bool judge;
if(q.data[index].data->dir_file == ) //文本文件
{
cout<<"the current file is "<<q.data[index].data->data<<endl;
cout<<"input the name :";
cin>>name;
cout<<"input \"0\":";
cin>>judge;
tree *node = insertTree(name,NULL,q.data[index].data,judge);
}
else if(q.data[index].data->dir_file == && tj == ) //要在同一目录下创建另一文件
{
cout<<"the current file is "<<q.data[index].data->data<<endl;
cout<<"input the name :";
cin>>name;
cout<<"if it is folder, input \"1\",else input \"0\":";
cin>>judge;
tree *node = insertTree(name,NULL,q.data[index].data,judge);
}
else //在某一目录下创建文件
{
cout<<"the current folder is "<<q.data[index].data->data<<endl;
cout<<"input the name :";
cin>>name;
cout<<"if it is folder, input \"1\",else input \"0\":";
cin>>judge;
tree *node = insertTree(name,q.data[index].data,NULL,judge);
} } int main()
{
int mark = ;
int num = ;
int tj = ;
int temp[];
tree *root = create();
height(root);
while(mark != -)
{
cout<<"now is No."<<num<<",input the number of file(must be existed):";
cin>>num;
cout<<"the same level(the first can't choose Yes) ? 1.Yes 2.No"<<endl;
cin>>tj;
if(tj == )
tj = ;
else
tj = ;
insert(que,num-,tj);
height(root);
cout<<"Quit input -1 ,continue input 1 :";
cin>>mark;
}
for(int i = ; i<=que.rear; i++) //打印路径
{
int k = que.data[i].pre;
int j = ;
while(k != -)
{
temp[j] = k;
j++;
k = que.data[k].pre;
}
while(j > )
{
j--;
cout<<"/"<<que.data[temp[j]].data->data;
}
cout<<"/"<<que.data[i].data->data<<endl;
}
}

运行实例:

 

设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件。的更多相关文章

  1. JSP中的一个树型结构

    看方力勋的javaWeb,采用左右值来表示树型结构(就是俺门的多级分类)表结构 页面代码 <%@ page language="java" import="java ...

  2. Nginx虚拟目录(alias)和根目录(root)

    功能要求: 假设nginx配置的域名是www.kazihuo.com,现有静态资源/home/www/oye目录需要通过nginx访问. 功能实现: 前提要求: 1.在nginx.conf中到处第二行 ...

  3. Linux文件系统的目录结构

    Linux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的.各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差 ...

  4. Linux 文件系统的目录结构

    http://www.jb51.net/LINUXjishu/151820.htmlLinux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些 ...

  5. WPF 4 目录树型显示

    原文:WPF 4 目录树型显示      本篇将通过WPF4 制作简单的目录树型结构显示实例,完成本篇内容我们将作出下图所示的应用程序.      从图中我们可以看到程序主要分为两部分:左边显示本地驱 ...

  6. Linux文件系统简介一(磁盘分区、开机过程、目录结构、文件权限、文件扩展名、目录管理)

    Linux:就是一组软件,一套操作系统=核心+系统呼叫接口层. 1.操作系统 操作系统 = 核心(内核) + 系统呼叫(接口) 操作系统其实也是一组程序,重点在于管理计算机的所有活动以及驱动系统中的所 ...

  7. Linux文件系统的主要目录结构说明及分区方案

    Linux操作系统有一些固定的目录.各种Linux发行版的目录结构虽然不会一模一样,但是不会有很大差异.知道了这些目录的作用,不仅对你进行磁盘分区规划很有帮助,而且会让你以后的日常维护工作变得轻松.只 ...

  8. python os.walk处理树状目录结构的文件

    在项目工作中,时常需要用到处理文件的方法,尤其是在windows环境下的树状目录结构 os.walk恰好能完美的处理这种树状目录结构文件,能高效地帮助我们得到我们需要处理的文件 目录结构: Deskt ...

  9. linux系统的目录结构

    前言 对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要 ...

随机推荐

  1. k8s安装ingress

    1. 环境准备 安装nginx-ingress-controller和backend cd /etc/yum.repos.d/mainfests 下载镜像的脚本 vi ingressnginx.sh ...

  2. linux 系统运维工具13款

    1. 查看进程占用带宽情况 - Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽. 下载:http://sourceforge.net/projects/ ...

  3. Node.js 实战(一)之—防灾备措施

    前言 博客系统上线已经3个多月了,中间没有出现过宕机事故,一直稳定运行.自己写的代码还是挺严谨的,小小鼓励一下!上周对云服务器进行了一次内存扩容,扩容后重启了一次服务器.虽然过程很短,但是因重启后导致 ...

  4. js入门之DOM动态创建数据

    一. 知识点回顾 1. DOM结构 nodeName: '' 标签名 nodeType: '' 类型 1元素节点 2属性节点 3文本节点 nodeValue: '' 如果是元素节点 nodeValue ...

  5. window.postMessage()实现(iframe嵌套页面)跨域消息传递

    window.postMessage()方法可以安全地实现Window对象之间的跨域通信.例如,在页面和嵌入其中的iframe之间. 不同页面上的脚本允许彼此访问,当且仅当它们源自的页面共享相同的协议 ...

  6. uni-app 入门之 nvue (weex) 爬坑记

    前言 uni-app 是 DCloud 出品的新一代跨端框架,可以说是目前跨端数最多的框架之一了,目前支持发布到:App(Android/iOS).H5.小程序(微信小程序/支付宝小程序/百度小程序/ ...

  7. 剑指offer-链表相关

    剑指offer面试常考手撸算法题-链表篇 1. 从头到尾打印链表 class Solution { public: // 可以先压栈,再出栈到vector // 时间/空间:O(n) vector&l ...

  8. Python——getpass(密码不显示)

    为了用户输入密码时,不被其他人员看到,可以使用getpass模块来将密码以不显示的形式来表达. import getpass pwd = getpass.getpass() #在PyCharm中,运行 ...

  9. TLS之殇如何把我逼上绝望

    1.协议的形式化分析,前提是弄清楚协议结构和协议参与者之间的会话交互,以及会话之间使用的加解密算法,签名算法,认证算法,等牵扯的算法.之后便是将要分析的协议部分进行抽象化,具体抽象涉及协议参与者(发起 ...

  10. 【转】Lombok Pojo默认初始值问题

    Lombok以注解形式来简化java代码,提高开发效率.比如我们常用的@Builder.@Data.@AllArgsConstructor.@NoArgsConstructor.@ToString等. ...