- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计 实验报告 学院: 专业: 班级: 姓名: 学号:
实验报告
实验题目:二叉树应用——文件目录结构显示 实验目的和要求: 给出Unix下目录和文件信息,要求编程实现将其排列成一定缩进的树。具体要求如下。 输入要求: 输入数据包含几个测试方案。每一个案例由几行组成,每一行都代表了目录树的层次结构。第一行代表目录的根节点。若是目录节点,那么它的孩子节点将在第二行中被列出,同时用一对圆括号“ ”界定。同样,如果这些孩子节点钟某一个也是目录的话,那么这个目录所包含的内容将在随后的一行中列出,有一对圆括号将首位界定。目录的输入格式为:*name size,文件的输入格式为:name size,其中*代表当前节点的目录,name代表文件或目录的名称,由一串长度不大于10的字符组成,并且name字符串中不能包含有‘ ’,‘ ’,‘[’,‘]’,‘*’。size是该文件/目录的大小,为大于0的整数。每一个案例中最多只能包含10层,每一层最多有10个文件/目录。 输出要求: 对每一个测试案例,输出时要求:第d层的文件/目录名前面需要插入8*d个空格,兄弟节点之间要在同一列上。不要使用Tab 制表符 来统一输出的缩进。每一个目录的大小 size 是它包含的所有子目录和文件大小以及它自身大小的总和。 实验过程:
目录结构是一种典型的树形结构,为了方便对目录的查找、遍历等操作,可以选择孩子兄弟双亲链表来存储树的结构。程序中要求对目录的大小进行重新计算,根据用户的输入来建立相应的孩子兄弟双亲链表,最后输出树形结构。可以引用一个Tree类,将树的构造、销毁、目录的大小重新计算 reSize 、建立树形链表结构 parse 、树形结构输出 outPut 等一系列操作都封装起来,同时对于每一个树的节点,它的私有变量除了名称 Name 、大小 Size 和层数 Depth 之外,根据孩子兄弟双亲链表表示的需要,还要设置三个指针,即父指针 Tree*parent 、下一个兄弟指针 Tree*NextSibling 和第一个孩子指针 Tree*FirstChild 。 1.建立树形链表结构的函数parse 根据输入来确定树形关系时,首先读取根节点目录/文件名和大小值,并根据这些信息建立一个新的节点;然后读入后面各行信息,对于同一括号中的内容,即具有相同父节点的那些节点建立兄弟关联。这个函数实际上是采取遍历建立树形链表结构。 定义一个Tree*类型的数组treeArray[],用来存放目录的节点信息,并定义两个整型变量head和rear,head值用来标记当前节点的父节点位置,每处理完一对括号,head需要增加1,即下一对待处理括号的父节点在treeArray[]中要往后移一个位置。如果当前处理的节点是目录类型,则将它放在treeArray[]数组中,rear是treeArray[]的下标变量,加入一个目录节点信息,rear就增加1;如果是文件类型的目录,则需要按照Name和Size建立一个树的节点,并和head所指的父节点建立关联,但是不用放入treeArray[]中。 为进一步说明这个树形链表结构的构成,可参考下图。
它是根据如下的具体输入例子所形成的结构示意。
输入:
*/usr1 *mark 1 *alex 1 hw.c3 *course 1
hw.c 5 aa.txt 12 2.目录大小重新计算函数reSize 输入数据中对目录大小的初始值一般为1,而目录的真正大小应该是自身的大小和它包含的所有文件及子目录的大小之和。因此,在计算目录大小的时候,需要遍历它下面所有的文件和子目录,可以采用递归嵌套的后序遍历方式。另外要注意,采用孩子兄弟双亲链表表示时,父目录下的所有子目录和子文件都在该父目录的左子树上(右子树第一个节点是该目录的兄弟节点),所以白努力的时候只需要遍历目录对的左子树即可。
3.输出树形结构的函数outPut 输出是一个先序遍历的过程。为完成对树形的输出,兄弟目录之间需要相同的缩进,用‘|’上下相连,而父子目录或父目录和子文件之间需要设定正确的缩进,子目录或子文件要比父目录向右缩进8个空格。设置一个标志数组flag[11] 每个目录下最大的层次数为10 ,当前Tree*temp指针所指的节点如果有兄弟节点,则置flag数组值为1,否则置为0;并由此节点反复查询它的祖先节点的情况,直到根节点为止。输出时,遇到flag[] 1时,屏幕输出“| ”,表明是兄弟节点;遇到flag[] 0则输出“ ”, 有相同的缩进,而子节点总比父节点向右缩进8个空格。 4.消除输入中多余空格的函数skipWhiteSpace string s,int *i 从用户输入数据中读入一行后,调用该函数来跳
您可能关注的文档
最近下载
- 合作协议书(15篇)(模板) .pdf VIP
- 《电动汽车充电站设计规范》GB50966-2014(完整).docx VIP
- 网御星云网闸技术宝典.pdf VIP
- 江淮CPC(D)20-30-CPC(D)30A叉车零件图册.pdf VIP
- DB32T 3610.2-2025 道路运输车辆智能监控系统技术规范 第2部分:终端及测试方法.docx VIP
- 驾驶员的夜间行车视觉与夜间驾驶技巧.pptx VIP
- 中医临床三基(医师)临床基本知识针灸推拿考试真题.docx VIP
- GB50156-2012(2014年版) 汽车加油加气站设计与施工规范.pdf VIP
- 临近既有地铁的异形深基坑支护设计与施工.pdf VIP
- 《葡萄沟》精品课件.pptx VIP
文档评论(0)