博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PTA目录树c++版——山东科技大学
阅读量:4030 次
发布时间:2019-05-24

本文共 2314 字,大约阅读时间需要 7 分钟。

题目:

在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。
输入格式:
输入首先给出正整数N(≤1e4​​),表示ZIP归档文件中的文件和目录的数量。随后N行,每行有如下格式的文件或目录的相对路径和名称(每行不超过260个字符):
路径和名称中的字符仅包括英文字母(区分大小写);
符号“\”仅作为路径分隔符出现;
目录以符号“\”结束;
不存在重复的输入项目;
整个输入大小不超过2MB。
输出格式:
假设所有的路径都相对于root目录。从root目录开始,在输出时每个目录首先输出自己的名字,然后以字典序输出所有子目录,然后以字典序输出所有文件。注意,在输出时,应根据目录的相对关系使用空格进行缩进,每级目录或文件比上一级多缩进2个空格。
输入样例:

7bc\ab\cda\bcab\da\d\aa\d\z\

输出样例:

root  a    d      z      a    bc  ab    cd    d  c  b

参考大佬的代码

链接:
代码搬运工就是我了,记下来当模板

//https://www.cnblogs.com/linfangnan/p/12617499.html#include
using namespace std;typedef struct CSNode{
string data; //数据域 struct CSNode* firstchild; //指向对应长子结点的指针域 struct CSNode* rightsib; //指向对应右兄弟结点的指针域 int flag; //判断是文件还是目录的 flag} CSNode, * CSTree;CSTree insertNode(CSTree t,string s,int flag){
CSTree node=new CSNode; CSTree pre=t,ptr; node->data=s; node->firstchild=node->rightsib=NULL; node->flag=flag; if(t->firstchild==NULL) {
t->firstchild=node; return t->firstchild; } ptr=t->firstchild;//由于根结点本身插入时,是插在长子位,因此另外设置 pre 当前驱结点,ptr 当 pre 的后继,比较好写 while (ptr != NULL && ((ptr->flag>node->flag)||(ptr->flag==node->flag&&s>ptr->data))) {
pre = ptr; ptr = ptr->rightsib; } //要先判空,不然有段错误 if(ptr==NULL)//无处可插入,插在链尾 {
node->rightsib=pre->rightsib; pre->rightsib=node; return node;//接下来以 node 为根目录操作 } else if(ptr->data==node->data&&ptr->flag==node->flag)//目录或文件已存在 {
delete node; return ptr; } else {
if(pre->data==t->data)//插在根目录的长子位(pre)没改变 {
node->rightsib=pre->firstchild; pre->firstchild=node; } else//正常插入 {
node->rightsib=pre->rightsib; pre->rightsib=node; } return node; }}void CreatTree(CSTree pre,string s){
int index=0; getline(cin,s); for(int i=0; i
data<
firstchild,space+2); print(t->rightsib,space);}int main(){
//freopen("in.txt","r",stdin); int n; CSTree tree=new CSNode; tree->data="root"; tree->firstchild=tree->rightsib=NULL; tree->flag=1; cin>>n; string s; for(int i=0;i<=n;i++) CreatTree(tree,s); print(tree,0);}
你可能感兴趣的文章
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
系统架构:Web应用架构的新趋势---前端和后端分离的一点想法
查看>>
JVM最简生存指南
查看>>
漂亮的代码,糟糕的行为——解决Java运行时的内存问题
查看>>
Java的对象驻留
查看>>
自己动手写GC
查看>>
Java 8新特性终极指南
查看>>
logback高级特性使用(二) 自定义Pattern模板
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++指针常量与常量指针详解
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
STL::deque以及由其实现的queue和stack
查看>>
CS4344驱动
查看>>