采用深度优先(DFS)和广度优先(BFS)两种方法遍历Windows指定路径

本文介绍如何使用深度优先(DFS)和广度优先(BFS)遍历Windows目录。深度优先采用递归,需要栈,适合递归层次较少的情况;广度优先利用队列,非递归,栈空间控制更优,适用于目录遍历。
摘要由CSDN通过智能技术生成

       数据结构中对于树结构的节点遍历方式有深度优先和广度优先两种方法,其中广度优先也叫作层序遍历。在具体的代码实现中,深度优先算法采用的是递归算法,需要使用到栈这种数据结构;而广度优先采用的是非递归算法,需要用到队列这种数据结构;如果你之前对这两种方式有所了解的话那到这里你就已经知道我说的细节了,如果没有了解过,也没关系,可以直接看下面的代码,可以获取到更直接的感受和理解。

       因为Windows目录结构的组织其实也就是一棵树,这里以对Windows目录的遍历作为Demo来演示这两种遍历方式。

 

第一种方式:深度优先方式(DFS)。

/**********************************
函数名称:TravelPathByDFS
功    能:深度优先遍历(DFS)指定路径
参    数:lpPath:要遍历的起始路径
          IsRecursive:是否递归遍历(TRUE:递归遍历,FALSE:非递归遍历)
返 回 值:VOID
备    注:无
***********************************/
VOID TravelPathByDFS(CONST TCHAR* lpPath, BOOL IsRecursive) 
{  
  HANDLE               hFindFile   = INVALID_HANDLE_VALUE;  
  WIN32_FIND_DATA      tagFindData = {0};  
  TCHAR                szPath[BUFFER_SIZE] = {TEXT('\0')};  
  TCHAR                szTemp[BUFFER_SIZE] = {TEXT('\0')};   
 
  if(NULL == lpPath || lstrlen(lpPath) > (BUFFER_SIZE - 1))  
  {  
    return;  
  }//end if(NULL == lpPath || lstrlen(lpPath) > (BUFFER_SIZE - 1))  
 
  memset(szPath, 0, sizeof(szPath));  
  lstrcpy(szPath, lpPath);  
 
  if(TEXT('\\') != szPath[lstrlen(szPath) - 1])  
  {  
    szPath[lstrlen(szPath)] = TEXT('\\');  
  }//end if(TEXT('\\') != szPath[lstrlen(szPath) - 1])  
 
  lstrcat(szPath, TEXT("*.*"));  
 
  if((hFindFile = ::FindFirstFile(szPath, &tagFindData)) == INVALID_HANDLE_VALUE)  
  {  
    return;  
  }//end if((hFindFile = ::FindFirstFile(szPath, &tagFindData)) == INVALID_HANDLE_VALUE) 
 
  do   
  {  
    //首先排除掉 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值