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. centos7配置国内yum源

    文章目录 1.什么是yum仓库? 2.yum仓库配置 2.1.阿里镜像仓库配置 2.1.1.配置步骤 2.1.2.epel源 安装和配置 2.1.3.查看yum源 2.2.配置 清华大学镜像仓库 1. ...

  2. 2018.7.31 Noip2018模拟测试赛(十六)

     日期: 七月最后一天  总分: 300分  难度: 提高 ~ 省选  得分: 30分(少的可怜) 我太弱了:(题目目录) T1:Mushroom追妹纸 T2:抵制克苏恩 T3:美味 失分分析:(QA ...

  3. How to fix the gray screen bug in VirtualBox

    If you see a gray screen instead of GNOME when entering the system, simply switch to a virtual conso ...

  4. 升级 GCC 支持C++11 或 configure: error: *** A compiler with support for C++11 language features is required.

    configure: error: *** A compiler with support for C++11 language features is required. 参考链接: (1)升级 G ...

  5. LeetCode OJ--Reverse Nodes in k-Group **

    http://oj.leetcode.com/problems/reverse-nodes-in-k-group/  链表  指针 对链表翻转的变形 #include <iostream> ...

  6. 洛谷——P1294 高手去散步

    P1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开始 ...

  7. 空扫描Idle Scanning

    空扫描Idle Scanning   空扫描Idle Scanning是一种借助第三方实施的端口扫描技术,可以很好的隐蔽扫描主机本身.它的实现基于以下两个TCP工作机制.   (1)在TCP三次握手阶 ...

  8. Android View源码解读:浅谈DecorView与ViewRootImpl

    前言 对于Android开发者来说,View无疑是开发中经常接触的,包括它的事件分发机制.测量.布局.绘制流程等,如果要自定义一个View,那么应该对以上流程有所了解.研究.本系列文章将会为大家带来V ...

  9. dubbo开发者指南

    开发者指南 参与 流程 任务 版本管理 源码构建 框架设计 整体设计 模块分包 依赖关系 调用链 暴露服务时序 引用服务时序 领域模型 基本原则 扩展点加载 扩展点配置 扩展点自动包装 扩展点自动装配 ...

  10. squirrelsql安装

    官网下载安装,第一次安装mac上,失败,后续重启mac看下.重启完后,还是起不来,估计和某些环境冲突,或者缺少环境 使用squirrelsql如何连接hive? http://lxw1234.com/ ...