HDU1413(文件系统)
来源:互联网 发布:网络架构师 工作职责 编辑:程序博客网 时间:2024/05/16 05:13
心得:
一道比较裸的数据结构题,没什么算法可言,关键是要熟练各种数据结构的各种操作,其次还要有耐心。
传送门:HDU1413
#include <iostream>#include <cstring>#include <cstdio>using namespace std;struct directory //一个文件系统的主要组成部分:目录和文件{ char directory_Name[99]; //目录名 char file_Name[99][99]; //文件名,因为一个目录下可包含多个文件,故用二维数组 int directory_Num; //目录名的数量 int file_Num; //文件名的数量 directory *pre; //前驱 directory *next[99]; //后继}*dir; //总的来说,这个数据结构比较像树char output[6][99] //对应输出的各种情况{ "success" ,"no such directory" ,"directory already exist" ,"can not delete the directory" ,"file already exist" ,"no such file"};int main(){ dir=new directory; directory *root=dir; //根节点 strcpy(dir->directory_Name,"\\"); //初始化 dir->directory_Num=dir->file_Num=0; //初始化 dir->pre=dir; //初始化 int flag,tag; //用于标记 char cmd[9],str[29]; //cmd:对文件操作的命令 str:目录名或文件名 while(~scanf("%s%s",cmd,str)) { if(!strcmp(cmd,"CD")) { flag=1; //先假设找不到 if(dir->directory_Num) //目录不为空 { for(int i=0;i<dir->directory_Num; i++) //遍历寻找与输入同名的目录名(不知道有没有更高效的办法~) if(!strcmp(dir->next[i]->directory_Name,str)) { flag=0; dir=dir->next[i]; //实现进入目录的操作 break; } } if(!strcmp(str,"..")) //实现返回上一级目录的功能 { dir=dir->pre; flag=0; } if(!strcmp(str,"\\")) //呃....不是很清楚为什么是\\而不是\,参考的别人AC代码 { dir=root; //返回到根目录 flag=0; } printf("%s\n",output[flag]); } else if(!strcmp(cmd,"MD")) { flag=0; if(dir->directory_Num) { for(int i=0; i<dir->directory_Num; i++) if(!strcmp(dir->next[i]->directory_Name,str)) { flag=2; //与之前的目录重名则创建失败 break; } } if(strcmp(str,"..")==0||strcmp(str,"\\")==0) flag=2; //不允许创建..或\\目录 printf("%s\n",output[flag]); if(!flag) //数据结构中“增”的操作 { directory *another=new directory; strcpy(another->directory_Name,str); another->file_Num=another->directory_Num=0; another->pre=dir; dir->next[dir->directory_Num]=another; (dir->directory_Num)++; } } else if(!strcmp(cmd,"RD")) { flag=0; if(dir->directory_Num) { for(int i=0; i<dir->directory_Num; i++) { if(!strcmp(dir->next[i]->directory_Name,str)) //找到了要删除的目录 { if(dir->next[i]->directory_Num||dir->next[i]->file_Num) { flag=3; //目录下还有文件或目录则不能删除 break; } else { tag=i; break; } } if(i==dir->directory_Num) flag=3; } } else flag=3; printf("%s\n",output[flag]); if(!flag) //“删”操作 { for(; tag<dir->directory_Num; tag++) { dir->next[tag]=dir->next[tag+1]; } (dir->directory_Num)--; } } else if(!strcmp(cmd,"CREATE")) //文件的“增” { flag=0; if(dir->file_Num) { for(int i=0; i<dir->file_Num; i++) if(!strcmp(dir->file_Name[i],str)) { flag=4; break; } } printf("%s\n",output[flag]); if(!flag) { strcpy(dir->file_Name[dir->file_Num],str); (dir->file_Num)++; } } else //文件的“删” { flag=5; if(dir->file_Num) { for(int i=0; i<dir->file_Num; i++) { if(!(strcmp(dir->file_Name[i],str))) { flag=0; tag=i; break; } } } printf("%s\n",output[flag]); if(!flag) { for(; tag<dir->file_Num; tag++) strcpy(dir->file_Name[tag],dir->file_Name[tag+1]); (dir->file_Num)--; } } } return 0;}
0 0
- HDU1413(文件系统)
- HDU1413-文件系统
- 文件系统 HDU1413
- HDU1413文件树
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- js select option对象
- 数据库记录转树形
- 九种 JS 弹出对话框的方法总结
- APACHE RANGER 调研----1.基础介绍和安装
- 专题1.内行看门道
- HDU1413(文件系统)
- ubuntu下多个opencv版本的管理
- 引入Option优雅地保证健壮性
- yii 的认识
- MVC
- 二叉树的广度优先遍历
- Spring事务理解-2
- launch failed.Binary not found 。关于在Ubuntu下新建eclipse c++项目时出现launch failed.Binary not found问题
- RecycleView探究(1)——实现瀑布流及问题