`
128kj
  • 浏览: 604177 次
  • 来自: ...
社区版块
存档分类
最新评论

列磁盘目录(深度优先和广度优先实现)

阅读更多
    有两种常用的方法可用来搜索图:即深度优先搜索和广度优先搜索。它们最终都会到达所有连通的顶点。深度优先搜索通过栈来实现,而广度优先搜索通过队列来实现。 

深度优先搜索:
下面图中的数字显示了深度优先搜索顶点被访问的顺序。


为了实现深度优先搜索,首先选择一个起始顶点并需要遵守三个规则:
(1) 如果可能,访问一个邻接的未访问顶点,标记它,并把它放入栈中。
(2) 当不能执行规则1时,如果栈不空,就从栈中弹出一个顶点。
(3) 如果不能执行规则1和规则2,就完成了整个搜索过程。

广度优先搜索:
在深度优先搜索中,算法表现得好像要尽快地远离起始点似的。相反,在广度优先搜索中,算法好像要尽可能地靠近起始点。它首先访问起始顶点的所有邻接点,然后再访问较远的区域。它是用队列来实现的。

下面图中的数字显示了广度优先搜索顶点被访问的顺序。


实现广度优先搜索,也要遵守三个规则:
(1) 访问下一个未来访问的邻接点,这个顶点必须是当前顶点的邻接点,标记它,并把它插入到队列中。

(2) 如果因为已经没有未访问顶点而不能执行规则1时,那么从队列头取一个顶点,并使其成为当前顶点。
(3) 如果因为队列为空而不能执行规则2,则搜索结束。

下面是一个练习的简单例子:列磁盘目录(深度优先和广度优先实现)
import java.io.File;
import java.io.IOException;
import java.util.Stack;
import java.util.Queue;
import java.util.LinkedList;
public class ListFile{

        public static void main(String[] args) throws IOException {
              File file = new File("c:/java/guest");
               DFS1(file);
               System.out.println("--------------------------------");
               System.out.println("--------------------------------");
               // DFS2(file);
               BFS(file);

        }

        // 文件深度非递归遍历

        private static void DFS1(File file) throws IOException {
               Stack<File> stack = new Stack<File>();
               stack.push(file);
               File fileInStack = null;
               while (!stack.isEmpty()) {
                 fileInStack = stack.pop();
                 System.out.println("dir:" + fileInStack.getCanonicalPath());
                 File[] files = fileInStack.listFiles();
                 for (File eachFile : files) {
                    if (eachFile.isFile()) {
                        System.out.println("file:" + eachFile.getCanonicalPath());
                    } else {
                         stack.push(eachFile);

                    }
                  }

                }

        }

        // 文件深度递归遍历

        private static void DFS2(File file) throws IOException {
             System.out.println("dir:" + file.getCanonicalPath());
             File[] files = file.listFiles();
             for (File eachFile : files) {
               if (eachFile.isFile()) {
                   System.out.println("file:" + eachFile.getCanonicalPath());
               } else {
                   DFS2(eachFile);
                 
             }

          }

     }

     // 文件广度非递归遍历
        private static void BFS(File file) throws IOException{  
            System.out.println(file.getCanonicalPath());
            Queue<File> queue = new LinkedList<File>();  
            queue.offer(file);  
             File fileInQueue = null;
            while (queue.size() > 0) {  
               fileInQueue = queue.poll();  
               //System.out.println("dir--:" + fileInQueue.getCanonicalPath());
               File[] files =fileInQueue.listFiles(); 

                for (File eachFile : files) {
                    if (eachFile.isFile()) {
                        System.out.println("file:" + eachFile.getCanonicalPath());
                    } else {
                         System.out.println("dir--:" + eachFile.getCanonicalPath());
                         queue.offer(eachFile);

                    }
                }

            }  
            
       }  

}

下载源码:
  • 大小: 7.3 KB
  • 大小: 10.1 KB
分享到:
评论

相关推荐

    邻接矩阵存储的无向图广度和深度遍历文件操作

    本话题将深入探讨如何使用邻接矩阵来实现无向图的广度优先搜索(BFS)和深度优先搜索(DFS)的文件操作。 首先,邻接矩阵是一个二维数组,其中的元素代表图中节点之间的连接。如果节点i与节点j之间有一条边,那么在...

    批量删除磁盘中的空文件夹(可以遍历所有子目录)

    2. **深度优先或广度优先遍历**:程序可以采用深度优先或广度优先策略来遍历目录树。深度优先是从根目录开始,深入到最深层的子文件夹,然后回溯;广度优先则是先遍历根目录的所有子文件夹,再进入子文件夹的子...

    课程设计 磁盘调度算法实现

    在本课程设计中,我们将深入探讨和实现几种常见的磁盘调度算法,包括FCFS(先来先服务)、SJF(最短作业优先)、SCAN(扫描)、C-SCAN(循环扫描)以及FIFO(先进先出)。这些算法各有优缺点,适用于不同的系统需求...

    易语言源码磁盘搜索+文件查找.7z

    深度优先会先搜索当前目录的所有子目录,再回溯到父目录;广度优先则是先搜索当前目录,再遍历子目录。 4. **查找文件**:遍历指定目录下的文件,使用字符串比较函数检查文件名是否符合搜索条件。如果找到匹配的...

    多线程全面遍历磁盘文件

    4. **遍历算法优化**:遍历文件时,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)。DFS通常用于查找特定文件,而BFS更适合获取文件系统的整体结构。在多线程环境下,BFS通常更合适,因为它能更好地分配工作负载...

    实现Windows的目录树源码

    7. **深度优先与广度优先**:遍历目录树有两种主要策略:深度优先(DFS)和广度优先(BFS)。DFS通常从根目录开始,深入到最深的子目录,然后回溯;BFS则先访问所有直接子目录,再访问它们的子目录。选择哪种策略取...

    易语言 全盘寻找指定文件或目录

    4. **递归搜索**:对于找到的子目录,需要再次调用相同搜索逻辑,实现深度优先或广度优先的递归遍历,直到遍历完整个磁盘。 5. **错误处理**:在程序中加入适当的错误处理机制,如捕获无法访问的目录或文件,防止...

    mini_spider:在调研过程中,经常需要对一些网站进行定向抓取。由于python包含各种强大的库,使用python做定向抓取比较简单。请使用python开发一个迷你定向抓取器mini_spider.py,实现对种子链接的广度优先抓取,并把URL长相符合特定pattern的网页保存到磁盘上

    #####使用python开发定向抓取器mini_spider.py,实现对种子链接的广度优先抓取,并把URL长相符合特定pattern的网页保存到磁盘上。程序运行:python mini_spider.py -c spider.conf#####配置文件spider.conf:[spider]...

    易语言全盘搜索查找指定文件

    而广度优先搜索则是先遍历完当前目录的所有文件和子目录,再进入下一个目录。根据实际需求,可以选择合适的搜索策略。 在查找过程中,我们需要比较文件名,这就涉及到字符串比较函数。易语言中的“字符串等于”或...

    易语言源码易语言快速搜索磁盘源码.rar

    3. **遍历算法**:无论是深度优先还是广度优先搜索,易语言的源码都将演示如何遍历文件系统。这可能涉及到对目录结构的理解和处理,以及递归函数的应用。 4. **性能优化**:为了提升搜索速度,源码可能采用了缓存...

    提取磁盘中是所有图片

    在C#中,可以使用`Directory.GetDirectories()`方法获取一个目录下的所有子目录,并通过递归调用来处理每个子目录,实现深度优先或广度优先的遍历。 3. **文件过滤**:根据描述,用户可以设置需要提取的图片类型。...

    遍历本地磁盘所有文件夹

    - 常用的遍历方法有两种:深度优先搜索(DFS)和广度优先搜索(BFS)。在这个实例中,我们通常使用DFS,因为它更适合处理文件系统的层次结构。 - DFS可以递归地访问每个文件夹中的子文件夹,直到遍历完所有层级。 ...

    磁盘清理软件源码

    2. 文件扫描算法:为了高效地找到大文件或特定类型的文件,清理软件通常会采用某种扫描策略,如深度优先或广度优先搜索。 3. 文件属性检查:判断一个文件是否可以安全删除,需要检查其是否正在被使用、是否是系统...

    易语言源码非递归算法遍历目录.7z

    3. **深度优先与广度优先**:虽然这里是非递归遍历,但依然可以选择先遍历当前目录的所有文件再进入子目录(广度优先),或者先遍历子目录再处理当前目录的文件(深度优先)。 4. **性能优化**:在处理大量文件时,...

    易语言源码寻找磁盘文件.7z

    - **文件查找算法**:源码可能使用了深度优先搜索或广度优先搜索等算法来遍历磁盘上的文件,寻找目标文件。 3. 文件路径处理: - **绝对路径与相对路径**:源码可能需要处理这两种路径,确保能在不同环境下正确...

    c++结合配置文件,扫描磁盘获取特定后缀名的所有文件

    - 要实现深度优先或广度优先的磁盘扫描,需要使用递归函数。在C++中,递归函数会调用自身以处理子目录。 - 对于每个找到的目录,先检查是否为文件夹(通过`WIN32_FIND_DATA`结构体的`dwFileAttributes`成员),...

    C++语言实现一个多级文件目录管理系统,采用链表的数据结构。.zip

    6. **遍历目录**:为了查找特定文件或遍历整个目录树,我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)。链表数据结构特别适合DFS,通过递归调用,逐个访问每个节点及其子节点。 7. **内存管理**:在链表中...

    vbs脚本, 生成磁盘文件列表

    在遍历目录时,堆栈可以用来实现深度优先搜索(DFS, Depth-First Search),但在这个特定的场景中,通常我们使用广度优先搜索(BFS, Breadth-First Search),因为FSO的`Subfolders`属性已经按照这个顺序返回了目录...

    振南znFAT--嵌入式FAT32文件系统设计与实现 上

    5. **目录管理**:解释znFAT如何组织和查找目录项,包括深度优先和广度优先搜索算法的应用。 6. **内存管理**:探讨znFAT如何在有限的嵌入式内存环境中高效地管理文件系统的缓存和数据结构。 7. **错误处理和恢复*...

Global site tag (gtag.js) - Google Analytics