5-30 目录树 (30分)

5-30 目录树 (30分)

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

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

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

输出格式:

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

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

输出样例:

root
  a
    d
      z
      a
    bc
  ab
    cd
    d
  c
  b

思路
注意区别文件和目录,这是两个东西。不存在的目录要随时创建。文件底下是不能挂有别的什么东西。
点击访问 PTA-测验

#include <stdio.h>
#include<stdlib.h>
#include <string.h>

typedef int Bool;
typedef struct node *Node;
struct node {
    char*Name;
    Bool isMulu;//先判断是不是目录,是目录才有file和mulu,否则只可能有brother
    Node File;//指示本目录的子目录
    Node Mulu;//指示本目录的子文件
    Node Brother;//指示和本目录或文件平行的目录或文件
} Head;
void Print(Node,int);
void Read();
Node New(char*);
Node InsertMulu(Node,char*);
Node InsertFile(Node,char*);
/* 评测结果 时间  结果  得分  题目  编译器     用时(ms)  内存(MB)  用户
2016-08-30 11:00    答案正确    30  5-30    gcc     17  2   569985011
测试点结果 测试点   结果  得分/满分   用时(ms)  内存(MB)
测试点1    答案正确    18/18   2   1
测试点2    答案正确    2/2     1   1
测试点3    答案正确    10/10   17  2
查看代码*/
int main() {
//  printf("%d",strlen("12"));
    int n;
    scanf("%d",&n);
    Head.Name=(char*)malloc(sizeof(char)*5);
    strcpy(Head.Name,"root");
    Head.File=NULL;
    Head.Mulu=NULL;
    Head.Brother=NULL;
    Head.isMulu=1;
    for(int i=0; i<n; i++) {
        getchar();
        Read();
//      printf("-%p-",Head);
//      Print(Head.Son,0);
    }
    Print(&Head,0);
    return 0;
}

void Read() {
    char FileName[261];
    Node temp=&Head;
    scanf("%s",FileName);
//  printf("[%s]",FileName);

    char words[261];
    int j,L=0;
    for(int i=0; i<strlen(FileName); i++) {
        if(FileName[i]=='\\') {
            for(j=L; j<i; j++) {
                words[j-L]=FileName[j];
            }
            words[j-L]='\0';
//          printf("(%s)",words);
            temp->Mulu=InsertMulu(temp->Mulu,words);
            temp=temp->Mulu;
            while(strcmp(temp->Name,words))temp=temp->Brother;
            L=i+1;
        }
    }
    if(L<strlen(FileName)) {
        for(j=L; j<=strlen(FileName); j++) {
            words[j-L]=FileName[j];
        }
//      printf("(%s)",words);
        temp->File=InsertFile(temp->File,words);
    }
}


Node InsertMulu(Node H,char*K) {

    if(!H||strcmp(H->Name,K)>0) {
        Node temp=New(K);
        temp->Brother=H;
        return temp;
    }
    if(strcmp(H->Name,K)==0)return H;
    H->Brother=InsertMulu(H->Brother,K);
    return H;
}
Node InsertFile(Node H,char*K) {
    if(!H||strcmp(H->Name,K)>0) {
        Node temp=New(K);
        temp->isMulu=0;
        temp->Brother=H;
        return temp;
    }
    H->Brother=InsertFile(H->Brother,K);
    return H;
}
Node New(char*K) {
    Node temp=(Node)malloc(sizeof(struct node));
    temp->Name=(char*)malloc(sizeof(char)*(strlen(K)+1));
    strcpy(temp->Name,K);
    temp->Brother=NULL;
    temp->File=NULL;
    temp->Mulu=NULL;
    temp->isMulu=1;//默认是在建目录
    return temp;
}
void Print(Node H,int Space) {
    if(H) {
        for(int i=0; i<Space; i++)printf(" ");
        printf("%s\n",H->Name);
        if(H->isMulu==1)
            Print(H->Mulu,Space+2);
        Print(H->File,Space+2);
        Print(H->Brother,Space);
    }
}
  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本程序可列出 FTP 服务器的全部目录结构,并将其状结构以文本格式输出,具有以下特点: 1、使用单线程连接 FTP,适应恶劣网络条件,断线后可自动重连,可设置重试次数、手动跳过等; 2、支持与 cmd 的 tree 命令相同格式的目录文本输出,可依据输出参数设置重复输出结果; 3、可指定需要列表的 FTP 根目录、递归目录深度、结果输出格式(是否包含文件、是否输出文件大小信息等); 4、可指定单个目录获取出错时的最大尝试次数,可手动跳过某个获取出错的目录; 5、可设置常见的 FTP 连接、传输参数,支持中文目录/文件名; 6、运行过程中可暂停/继续、中止,可随时输出当前已获取到的部分结果; 7、结果可保存到文件,载入后可重新输出结果,也可以继续上次未成功完成的部分; 8、支持隐藏为托盘区图标和气泡提示,任务完成后自动断开 FTP 连接; 9、基于 VS2008 C# 编写,使用 FtpWebRequest 实现,提供可执行程序及全部源代码。 若有其它问题,欢迎与我联系交流:[email protected],^_^ ============= 版本更新记录 ============= 说明: [+]增加功能特性 [-]较少功能特性 [!]改进已有功能 [X]修正已有Bug ---------------- - 1.6.9.0802 - ---------------- [+]可以设定每隔指定的获取记录数自动保存结果到文件。 [+]保存结果文件可以 GZip 格式压缩,但速度较慢、较耗内存。 [+]增加一种快速存储文件的方式,在测试中速度可以提高7-30倍。 [+]可以设定任务结束后是否自动输出结果。 [+]输出结果时可以直接输出到文件。 [+]可以手动进行内存整理,即时释放闲置内存。 [!]外观修改,原外观在win2003下很难看。 [!]界面布局修改。 [X]在不运行任务情况下,载入结果再保存的话会异常。 ---------------- - 1.5.9.0717 - ---------------- [+]错误达到指定次数后显示提示信息时,可指定是否暂停后续尝试。 [+]显示当前文件夹获取进度条。 [+]保持当前结果到文件,可重新载入,以便重新输出结果,也可以继续上次未成功完成的搜索任务。 [!]提高实时生效参数的灵敏性,若输入无效数字字符(如abc),会自动修改为默认值,不会导致程序异常。 [!]等待重连过程中,会有时间倒数提示,并且能即时中止任务。 [!]界面布局修改。 [!]修改提示信息文字。
阿赛形论坛系统V5(AsaiSXBBSV5) 通用说明书   注意: A - 使用之前,请认真阅读一下这个说明书,然后,要注意在您上传论坛到网上之前一定要修改一下bbsconfig.asp文件内的内容; B - 使用IIS调试请启用父目录,并设置Default.asp为默认首页; C - 如果IIS调试中遇上NTFS、权限问题等,请复制地址http://77ya.com/rar/iis.rar,下载阿赛网站系统专用IIS调试工具; D - 官方可以下载简介的截图使用说明http://77ya.com/rar/AsaiSXBBSV5-ReadMe.mht。 演示网址:http://77ya.com/bbs/ 登录帐户:管理员(帐户:77ya.com,密码:77ya.com,从会员登录入口直接登录即可!);普通会员(郭言赛,77ya.com) 精辟概括:AsaiSXBBS是一套新颖、高速、安全、实用的论坛系统,拥有普通论坛的所有功能,基于ASP ACCESS的全伪静态(后缀为.html)访问模式。   二、系统功能介绍 01、独立完整的论坛体系,具备发帖、回帖、置顶、精华、经验帖、会员帖等常用论坛的所有功能; 02、独立完整的会员体系,与论坛体系分离,可删除、替换其他会员系统,并能无缝对接各种大中型网站的会员系统; 03、优化各大搜索引擎的收录,全站默认全伪静态(后缀名.html)访问; 04、全新原创的形论坛架构理念,速度更快、外形更加美观,帖子之间的关系一目了然; 05、集成管理员功能,提供编辑、删除、一键清理过期帖子,删除帖子等多种高级功能; 06、提供热门点击、热门回帖、最新发帖等帖子标记方便检索浏览,同时提供热门关键词、热门标签等栏目类功能; 07、支持帖子搜索、标签分类等、帖子主题、发帖心情等论坛高级功能; 08、提供单帖浏览、单帖回复,支持回复贴置顶、标记精华等操作; 09、会员登录后可修改、删除自己的发帖,管理员可批量对帖子进行操作; 10、支持我的帖子列表、热门帖子列表、火热帖子排行、精华帖子列表、帖子排序列表等各种列表方式; 11、会员系统支持E-Mail在线认证,认证后可获得一定经验和金币的奖励; 12、管理员可对会员进行查找、筛选、修改、删除等基本操作; 13、会员登录后可修改自己的资料,也可自行通过对邮箱进行认证; 14、全伪静态(后缀名.html)模式的会员系统,更安全、更快捷; 15、精简程序为4个文件,解压后空系统大小约200KB,所有调用修改及网站标题等修改均在AsaiFun.asp文件中,方便大家设置; 16、设置入库贴,放置会员或管理员不当操作删除掉,有效保护好帖、精华帖,提供类似信息系统一般的过期废帖删除功能; 17、金币贴,可以任意设置查看需要收取的金币个数,所有收取金币回归系统; 18、金币内容,可设置固定的金币内容查看需要收取的金币个数,设置金币内容的可以从购买者处获得50%的收益,其他被系统回收; 19、回复贴与回复内容功能,只有参与回复的会员才能浏览帖子内容或被设为仅回复可看的内容; 20、可以设置是否关闭论坛、关闭论坛的时间; 21、可以限制发布特殊贴(回复贴、金币贴等)的会员等级,默认仅VIP会员和管理员可发布; 22、可以设置发帖、回帖间隔时间; 23、支持UBB所见即所得编辑器,可以编辑视频、音频、动画SWF、图片等媒体文件,同时可以插入QQ在线状态,添加免费信息、回复信息、金币信息、引用信息等等,超强的可视化帖子编辑器; ——V4新增功能—— 24、支持普通论坛模式、普通形模式、豪华形模式三种个性模式,支持自由切换,可以自行设定默认的论坛显示模式; 25、默认提供8种论坛风格,可以设置默认的论坛,也可以在前台由用户自己选择喜欢的风格,所有风格均全颜色格式,没有使用图片,方便大家打造自己风格皮肤; 26、提供用户发帖权限设置,可以指定某一等级用户才能发帖; 27、支持设置在某一时段不容许任何用户发帖子和修改帖子; 28、论坛和用户数据分离,方便大家整合其他用户网站系统; 29、可以自由修改论坛、用户、数据库的文件夹所在地,而不影响系统运行,增加论坛的安全性; ——V5新增功能—— 30、更新编辑器为阿赛经典HTML编辑器,功能强大、使用方便 快捷; 31、增加短消息功能; 32、增加金币交易管理,支持购买记录查看、出售记录查看; 33、管理员可以对交易订单直接取消、退款的功能; 34、重新优化会员和管理功能,使用同一个入口,指定某一会员为管理员的功能,获取登录后的管理权利; 35、支持热门关键词功能,自动记录搜索字词,后台可设置热门关键; 36、支持网站在线设置; 37、提供帖子自动锁定和手工锁定的功能; 38、增加帖子批量删除、会员批量删除、短信批量删除、交易记录批量删除等各式批量操作功能; 39、支持过滤敏感词汇的功能,提供过滤词汇替换功能; 40、提供发帖间隔控制功能,分时段发帖功能,更多功能请使用体验; 41、可设置仅会员可以访问论坛; 42、可以锁定帖子,禁止修改、回复该帖的功能; 43、可严格控制各个等级会员的发帖权限,普通会员可以发布普通贴、会员帖、回复贴,认证会员可以发布金币贴,高级会员可以发布金币贴、可以回复锁定帖子,超级会员和管理员可以发布入库贴。   三、常见问题 1、怎么修改数据库以及数据库链接? 答:AsaiBBSInc文件夹中的bbsconfig.asp可以直接修改数据库的具体位置与名称,修改后同时需要修改AsaiBBSData文件夹下的数据库名称[为防止恶意下载,请上传使用前务必修改一下]。 2、论坛的名称以及相关信息怎么修改为自己需要的信息? 答:所有需要修改的地方都在AsaiBBSInc文件夹中的bbsconfig.asp里面,高级修改设置请打开AsaiBBSInc和AsaiBBSUser文件夹下的AsaiBBSFun.asp、AsaiFun.asp,所有的系统过程与设置均在里面。 3、如何修改论坛界面? 答:我们做了一些论坛风格和用户界面,大家可以打开AsaiBBSUser文件夹下的Default.asp中修改论坛会员界面,打开AsaiBBSInc文件夹的AsaiBBSFun.asp修改首页风格,所有程序部分内容均封装在**Fun.asp中,全开源大家可以自行改动。 4、如何登录后台? 答:首先注册一个会员帐户,在AsaiBBSInc文件夹中的bbsconfig.asp中可指定某一个论坛会员为管理员,从会员登录口登录该会员以后,可以获得管理员功能,管理所有会员信息,管理所有帖子信息等。 5、从网上下载的和官方演示的相同吗? 答:是不同的,网上共享的是MF(免费版),仅供学习使用,不可商用,如觉得系统不错可以至官网http://77ya.com购买商业版使用,谢谢您的支持。 6、用IIS调试的时候无法打开首页? 答:如果您的IIS文档中没有设置Default.asp为默认首页,请添加,否则无法正常运行,建议初学者关闭IIS,复制地址http://77ya.com/rar/iis.rar,下载阿赛网站系统专用IIS调试工具,进行调试。   四、版权声明及购买者义务 1、本程序由阿赛工作室促权,阿赛独立开发完成,与其他网站和个人无关,所有版权均由阿赛工作室所有; 2、购买者不得公开、传播本程序,如发现,将予以民事诉讼,请务必遵守; 3、支持购买者对程序进行再开发使用,但禁止将非共享版内的任何源程序暴露; 4、《阿赛形论坛系统》最终解释权归阿赛工作室,藉由江苏律师事务所提供全程法律支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值