hdu 1413 文件系统
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 文件系统的更多相关文章
- 比起Windows,怎样解读Linux的文件系统与目录结构?
比起Windows,怎样解读Linux的文件系统与目录结构? Linux 和Windows的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习. 本文先对Window ...
- HDU 5643 King's Game 打表
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...
- 转载:hdu 题目分类 (侵删)
转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...
- 比起 Windows,怎样解读 Linux 的文件系统与目录结构?
Linux 和 Windows 的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习. 本文先对 Windows 和 Linux 上面文件系统原理.组织概念进行区分, ...
- hier - 文件系统描述
DESCRIPTION 描述 一个典型的Linux系统具有以下几个目录: / 根目录,是所有目录树开始的地方. /bin 此目录下包括了单用户方式及系统启动或修复所用到的所有执行程序. /boot 包 ...
- 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 ...
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- Linux学习之探索文件系统
Linux,一起学习进步- ls With it, we can see directory contents and determine a variety of important file ...
- Linux之搭建自己的根文件系统
Hi!大家好,我是CrazyCatJack.又和大家见面了.今天给大家带来的是构建Linux下的根文件系统.希望大家看过之后都能构建出符合自己需求的根文件系统^_^ 1.内容概述 1.构造过程 今天给 ...
随机推荐
- IOs动画的那些事儿
CoreAnimation介绍 1:Core Animation是直接作用在CALayer上的(并非UIView上)非常强大的跨Mac OS X和iOS平台的动画处理API,Core Animatio ...
- chef and churu 分块 好题
题目大意 有一个长度为n的数组A 有n个函数,第i个函数 \[f(l[i],r[i])=\sum_{k=l[i]}^{r[i]}A_k\] 有两种操作: 1)修改A[i] 2)询问第x-y个函数值的和 ...
- poj Pseudoprime numbers 3641
Pseudoprime numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10903 Accepted: 4 ...
- c语言第二题
在我们的业务中经常会遇到很多业务,字符串会有一系列的操作,请写出以下的方法 1.写一个函数,给定char *p,char q,判断char *p中是否包含char q这个字符,包含则返回这个字符的下标 ...
- 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 ...
- How to debug Android Native Application with eclipse
This blog is inspired by this tutorial http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-a ...
- Linux 设备驱动的固件加载【转】
转自:http://blog.csdn.net/zqixiao_09/article/details/51106663 版权声明:本文为博主原创文章,未经博主允许不得转载. 作为一个驱动作者, 你可能 ...
- 推荐!手把手教你使用Git(转)
原文出处: 涂根华的博客 欢迎分享原创到伯乐头条 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放 ...
- 深入理解js中的立即执行函数(function(){…})()
javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( f ...
- vs-插件+配置
{ "window.zoomLevel": 0, "files.autoSave": "off", "editor.fontSiz ...