hdu   1413   文件系统         题目链接:

pid=1413" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=1413

题目分析:中小型模拟。较水,细心就可以。

以文件夹(Dir)为节点建树,涉及到数据结构的课内知识(顺便复习上学期课的内容)其他类另一个文件(File),文件夹下可有子文件夹和文件,其余规则refer to题意。

code:

package hdu1413;

import java.util.Scanner;

class File{
String fileName;
File next;
public File(String n){
fileName=n;
}
}
class Dir{
String dirName;
Dir firstC,NextS,parent;
File firstF;
boolean isnull;
public static void traversal(Dir root){
if(root==null)return;
System.out.print("-"+root.dirName);
traversal(root.NextS);
System.out.print("\n|");
traversal(root.firstC);
}
public boolean create(File f){
if(this.firstF==null){
this.firstF=f;
this.isnull=false;
return true;
}
else{
File p=this.firstF;
if(p.fileName.equals(f.fileName))return false;
while(p.next!=null){
p=p.next;
if(p.fileName.equals(f.fileName))return false;
}
p.next=f;
return true;
}
}
public boolean delete(String fname){
if(this.firstF==null)return false;
else if(this.firstF.fileName.equals(fname)){
//System.out.println("run here");
this.firstF=this.firstF.next;
if(this.firstC==null&&this.firstF==null)this.isnull=true;
return true;
}
else{
File p=this.firstF;
while(p.next!=null){
if(p.next.fileName.equals(fname)){
p.next=p.next.next;
return true;
}
p=p.next;
}
return false;
}
}
public Dir enter(String dname){
if(this.firstC==null)return null;
else{
Dir p=this.firstC;
while(p!=null){
if(p.dirName.equals(dname))return p;
p=p.NextS;
}
}
return null;
}
public boolean remove(String dname){
if(this.firstC==null)return false;
else if(this.firstC.dirName.equals(dname)){
//System.out.println("firstC.firstC exist? =="+this.firstC.firstC+"firstC.firstF exist?=="+this.firstC.firstF);
//System.out.println(this.firstC.isnull);
if(!this.firstC.isnull)return false;
this.firstC=this.firstC.NextS;
if(this.firstC==null&&this.firstF==null)this.isnull=true;
return true;
}
else{
Dir p=this.firstC;
while(p.NextS!=null){
if(p.NextS.dirName.equals(dname)&&p.NextS.isnull){
p.NextS=p.NextS.NextS;
return true;
}
p=p.NextS;
}
}
return false;
}//数据结构课上老师教的remove都是返回被删除元素,我不大习惯……
public boolean establish(Dir d){
if(this.firstC==null){
this.firstC=d;
this.isnull=false;
}
else{
Dir p=this.firstC;
if(p.dirName.equals(d.dirName))return false;
while(p.NextS!=null){
p=p.NextS;
if(p.dirName.equals(d.dirName))return false;
}
p.NextS=d;
}
d.parent=this;
return true;
}
public Dir(String n,Dir p){
dirName=n;
parent=p;
isnull=true;
}
public Dir(String n){
dirName=n;
isnull=true;
}
}
public class Main {
static Scanner in;
public static void main(String[] args) {
Dir dirP,root=new Dir("\\");
root.parent=root;
dirP=root;
String s,param;
in=new Scanner(System.in);
while(in.hasNext()){
s=in.nextLine();
switch(s.charAt(0)){
case'M':{
param=s.substring(3);
if(param.equals("\\")||param.equals(".."))
System.out.println("directory already exist");
else if(dirP.establish(new Dir(param)))System.out.println("success");
else System.out.println("directory already exist");
break;
}
case'R':{
param=s.substring(3);
if(dirP.remove(param))System.out.println("success");
else System.out.println("can not delete the directory");
break;
}
case'D':{
param=s.substring(7);
if(dirP.delete(param))System.out.println("success");
else System.out.println("no such file");
break;
}
case'T':Dir.traversal(root);break;
default:
if(s.charAt(1)=='D'){
param=s.substring(3);
if(param.equals(".."))dirP=dirP.parent;
else if(param.equals("\\"))dirP=root;
else{
Dir p=dirP.enter(param);
if(p==null){
System.out.println("no such directory");
break;
}
else dirP=p;
}
System.out.println("success");
}
else{
param=s.substring(7);
if(dirP.create(new File(param)))System.out.println("success");
else System.out.println("file already exist");
}
}
}
} }/*1.
CD ACM
MD ACM
CD ACM
CREATE ACM
MD ACM
CD ACM
CD \
RD ACM
CD ACM
RD ACM
DELETE ACM
CD ..
RD ACM 2.
CD ACM
MD ACM
CD ACM
CREATE ACM
MD ACM
CREATE ACM
MD ACM
CD ACM
CD \
RD ACM
CD ACM
RD ACM
DELETE ACM
CD ..
RD ACM 3.
MD ACM
MD ACM
CREATE ACM
CREATE ACM
RD ACM
MD ACM 4.
MD ACM
MD ADM
MD ADM
CREATE ACM
CREATE ADM
CREATE ADM
CD ADM
CREATE ACM
CD ..
RD ADM */

PS:直接复制上面代码去交的下场就是…………wrong,为啥呢?由于packge,不建包就好了。

PSS:看来数据结构还是学得不够扎实……

最新文章

  1. R可视化lend_club 全球最大的P2P平台数据75W条
  2. Chrome Developer Tools:Network Panel说明
  3. 【干货】解密监控宝Docker监控实现原理
  4. sql常见的面试题
  5. 关于EXCEL学习的那些事
  6. SRS文档 软件需求说明书
  7. 前端开发者需要的10个Sublime插件
  8. js字符串函数
  9. Linux Shell入门(转载)
  10. poj 1797 Heavy Transportation(最短路变种2,连通图的最小边)
  11. 依賴注入入門——Unity(二)
  12. 关于FragmentManager动态管理Fragment时Fragment生命周期的探究
  13. 全面理解Javascript中Promise
  14. WebService文件上传相关配置(404.13、超出限制、超时)
  15. 数据结构基础(1) --Swap & Bubble-Sort & Select-Sort
  16. Cocos2d中update与fixedUpdate的区别(六)
  17. Go-day03
  18. python inspect 模块 和 types 模块 判断是否是方法,模块,函数等内置特殊属性
  19. u-boot2010.06移植阶段三--norflash驱动
  20. RocketMQ服务搭建_1

热门文章

  1. faster-rcnn 目标检测 数据集制作
  2. 解决 Could not load hsdis-amd64.dll
  3. LeetCode OJ--Permutations *
  4. ListView 在设备切换横竖屏时保存状态
  5. SpringBoot中如何上传Upload
  6. Codeforces Round #295 (Div. 1) C. Pluses everywhere
  7. 第四期coding_group笔记_用CRF实现分词-词性标注
  8. Ubuntu 16.04下使用Wine安装正则表达式工具RegexBuddy 4
  9. Java Static Import的用法
  10. INDY9发送tstream