7-30 目录树

Posted 我只有一件白T恤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7-30 目录树相关的知识,希望对你有一定的参考价值。

7-30 目录树(30 分)

在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。

输入格式:

输入首先给出正整数N(10?4??),表示ZIP归档文件中的文件和目录的数量。随后N行,每行有如下格式的文件或目录的相对路径和名称(每行不超过260个字符):

  • 路径和名称中的字符仅包括英文字母(区分大小写);
  • 符号“\”仅作为路径分隔符出现;
  • 目录以符号“\”结束;
  • 不存在重复的输入项目;
  • 整个输入大小不超过2MB。

输出格式:

假设所有的路径都相对于root目录。从root目录开始,在输出时每个目录首先输出自己的名字,然后以字典序输出所有子目录,然后以字典序输出所有文件。注意,在输出时,应根据目录的相对关系使用空格进行缩进,每级目录或文件比上一级多缩进2个空格。

输入样例:

7
b
cab\cd
a\bc
ab\d
a\d\a
a\d\z

输出样例:

root
  a
    d
      z
      a
    bc
  ab
    cd
    d
  c
  b

思路:记得数据结构课的时候确实讲过数的创建,但是一直没有自己动手实现过,今个儿这个要点时间。首先学了下字符串按照指定符号分割,然后百度了下输的创建,所以先待续~
#include<stdio.h>
#include<string>
#include<queue>
#include<sstream>
#include<algorithm>
#include<iostream>
using namespace std;
typedef struct treenode{
    char name[260];
    struct treenode *firstchild;            //第一个儿子
    struct treenode *nextsibling;        //下一个兄弟
}Treenode, *Treep;
int main()
{
    int n; cin >> n;
    Treep tree = new Treenode;
    strcpy(tree->name , "root");
    tree->firstchild = NULL;
    tree->nextsibling = NULL;

    char s[260];
    const char *sep = "\\";        //按\分割的字符
    char *p;
    
    while (n--){
        getchar(); gets(s);
        p = strtok(s, sep);
        Treep temp = tree;
    
        while (temp)
        {
            if (strcmp(temp->name, p))
                temp = temp->firstchild;
            else temp = temp->nextsibling;
        }
        temp = new Treenode;
        strcpy(temp->name, p);
        temp->firstchild = NULL;
        temp->nextsibling = NULL;

        while (p){
            //printf("%s\n", p);
            Treep cnt = new Treenode;
            strcpy(cnt->name, p);

            
            p = strtok(NULL, sep);
        }
    
        
    }
    return 0;
}

 



以上是关于7-30 目录树的主要内容,如果未能解决你的问题,请参考以下文章

Treap树(21.7.30)

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

C# 获得目录创建时间的源码片段

vscode必装插件

线段树详解