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. Linux System Programming 学习笔记(二) 文件I/O

    1.每个Linux进程都有一个最大打开文件数,默认情况下,最大值是1024 文件描述符不仅可以引用普通文件,也可以引用套接字socket,目录,管道(everything is a file) 默认情 ...

  2. utilize HttpClient to generate a SSL access and generate REST access to fetch data, async programming? cool and brief

    WebRequestHandler handler = new WebRequestHandler(); try { X509Certificate2 certificate = new X509Ce ...

  3. 《Linux命令行与shell脚本编程大全 第3版》

    第一部分 Linux 命令行 第1章  初识Linux she1.1   什么是Linux 21.1.1 深入探究Linux 内核 31.1.2 GNU 工具 61.1.3 Linux 桌面环境 81 ...

  4. Yii框架Yiiapp()的理解

    Yii::app() 是一个实例化的对象,是我们在当前框架里边可以直接操作的对象,        我们可以把这个对象理解成请求应用的第一个对象. Yii框架是纯OOP面向对象框架,也就是利用对象调用类 ...

  5. hdu 1254(搜索题)

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  6. 无法安装64位版本的visio/office,因为在您的PC上找到了以下32位程序的解决办法

    解决方案:按下win+R键,打开运行,输入regedit,打开注册表,依次定位到 HKEY_CLASSES_ROOT\Installer\Products,展开Products后  将这些“00005 ...

  7. HDU 5988最小网络流(浮点数)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5988 哇,以前的模版一直T,加了优先队列优化才擦边过. 建图很好建,概率乘法化成概率加法不 ...

  8. [原创][FPGA][IP-Core]altlvds_tx & altlvds_rx

    1. 概述 Alter公司的QuartusII软件提供了LVDS发送和接收的IP核供我们使用,其在本质上可以理解为并行-串行数据的转换器.其在官方文档(见附件)上也这样说过.其中的应用场景有告诉AD/ ...

  9. ML | spectral clustering

    What's xxx In multivariate statistics and the clustering of data, spectral clustering techniques mak ...

  10. MQTT协议介绍

    http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.pdf   MQTT 文档 http://mqtt.org/new/wp-c ...