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:看来数据结构还是学得不够扎实……

hdu 1413 文件系统的更多相关文章

  1. 比起Windows,怎样解读Linux的文件系统与目录结构?

    比起Windows,怎样解读Linux的文件系统与目录结构? Linux 和Windows的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习. 本文先对Window ...

  2. HDU 5643 King's Game 打表

    King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...

  3. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  4. 比起 Windows,怎样解读 Linux 的文件系统与目录结构?

    Linux 和 Windows 的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习. 本文先对 Windows 和 Linux 上面文件系统原理.组织概念进行区分, ...

  5. hier - 文件系统描述

    DESCRIPTION 描述 一个典型的Linux系统具有以下几个目录: / 根目录,是所有目录树开始的地方. /bin 此目录下包括了单用户方式及系统启动或修复所用到的所有执行程序. /boot 包 ...

  6. tpcc-mysql测试mysql5.6 (EXT4文件系统)

    操作系统版本:CentOS release 6.5 (Final)  2.6.32-431.el6.x86_64 #1 内存:32G CPU:Intel(R) Xeon(R) CPU E5-2450 ...

  7. .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

  8. Linux学习之探索文件系统

    Linux,一起学习进步-    ls With it, we can see directory contents and determine a variety of important file ...

  9. Linux之搭建自己的根文件系统

    Hi!大家好,我是CrazyCatJack.又和大家见面了.今天给大家带来的是构建Linux下的根文件系统.希望大家看过之后都能构建出符合自己需求的根文件系统^_^ 1.内容概述 1.构造过程 今天给 ...

随机推荐

  1. 关于pymongo的一些说明

    问题 一: 在pymongo中使用find是得到1个游标对象的,如果你想实现MongoDB shell中find操作,例如: > db.test.find() { "_id" ...

  2. LeetCode OJ--Subsets II

    https://oj.leetcode.com/problems/subsets-ii/ 求一个集合的子集,但集合中有重复元素. 求子集的问题,对应着数的二进制,相当于对二进制的一个遍历. #incl ...

  3. EXT.JS以下两种写法在初始载入时是一样的效果

    /* Ext.application({ name: 'MyfirstApplication', launch: function () { Ext.Msg.alert("Hello&quo ...

  4. js-input file 文件上传(照片,视频,音频)

    在此做一个笔记 <input type="file" accept="image/*" capture="camera"> &l ...

  5. 在Eclipse中打开Hadoop工程

    1. 安装虚拟机,我用的是VMware Workstation 12 Player 2. 在VM中安装Ubuntu,我用的镜像文件是ubuntu-15.10-desktop-amd64.iso 3. ...

  6. es6 ---- babel

    babel-polyfill是ES6的补丁,由于babel只支持ES6语法部分的编译,对于新增的类我们还需要安装额外的polyfill,虽然现在Chrome和Firefox都已经添加了Promise等 ...

  7. 域名缓存侦测(DNS Cache Snooping)技术

    域名缓存侦测(DNS Cache Snooping)技术 在企业网络中,通常都会配置DNS服务器,为网络内的主机提供域名解析服务.这些DNS不仅解析自己的私有域名,还会用递归方式,请求公网的DNS解析 ...

  8. 【Maven jar】打包单个或多个文件,有依赖jar包的将架包一起打包成一个jar包供别的项目引用

    之前有一片文章,是打包单个java文件的.这次想要将http://www.cnblogs.com/sxdcgaq8080/p/8398780.html  打包成jar包,发现这个java文件中引用了多 ...

  9. weblogic日志管理

    服务器日志  每个 WebLogic Server 实例将来自子系统和应用程序的所有消息写入位于本地主机上的服务器日志文件.默认情况下,服务器日志文件位于服务器实例根目录下的 logs 目录中: 例如 ...

  10. SVN服务器配置说明 【转】

    http://www.cnblogs.com/ricksun/articles/1564905.html 1.前 言 花了72小时,终于把 Subversion 初步掌握了.从一个连“什么是版本控制” ...