非遞迴實現資料夾遍歷

2021-09-08 17:12:46 字數 2447 閱讀 7370

之前有個**面試,其中一道題就是:用非遞迴的方式實現資料夾遍歷?在電面的時候沒有答出來,過後分分鐘就想到了答案,因為之前自己實現過按層序的方式列印一棵樹,用的也是非遞迴的方式,現在遍歷資料夾不就是遍歷這顆樹嗎!怎麼就沒想出來呢!在這裡簡單的記錄下,用了c#和c++兩個版本實現。

我這裡的實現的功能是:用非遞迴的方式獲得乙個資料夾中檔案的個數。

思路簡單介紹:

1:先將這個資料夾的路徑加入乙個佇列中;

2:判斷佇列的元素個數是否大於0,如果元素個數大於0,遍歷第乙個元素對應的資料夾,用乙個變數filecounts記錄這個資料夾中檔案的個數,如果這個資料夾中有資料夾,就將這個資料夾的路徑加入佇列中,掃瞄完乙個資料夾後,第乙個元素彈出佇列,繼續執行第二步,如果佇列中沒有元素,就執行第三步;

3:退出迴圈

c++版如下:

#include "

stdafx.h

"#include

#include

#include

using

namespace

std;

intqueryfilecounts( lpctstr path )

tempfolder=qfolders.front();"\\

" qfolders.push(tempfolder);

}else

}while (findnextfile(handle, &findresult));

qfolders.pop();

} if(handle)

return

filecounts;

}int _tmain(int argc, _tchar*ar**)

system(

"pause");

return0;

}

執行結果如下:

c#版**如下:

using

system;

using

system.collections.generic;

namespace

filefind

[system.runtime.interopservices.dllimport(

"kernel32.dll

", charset = system.runtime.interopservices.charset.auto, setlasterror = true

)]

private

static

extern intptr findfirstfile(string pfilename, ref

win32_find_data pfindfiledata);

[system.runtime.interopservices.dllimport(

"kernel32.dll

",charset = system.runtime.interopservices.charset.auto,setlasterror = true

)]

private

static

extern

bool findnextfile(intptr hndfindfile, ref

win32_find_data lpfindfiledata);

[system.runtime.interopservices.dllimport(

"kernel32.dll

", setlasterror = true

)]

private

static

extern

bool

findclose(intptr hndfindfile);

static

int queryfilecounts( string

path )

do tempfolder=floder+"

\\"+findfiledata.cfilename;

qfolders.enqueue(tempfolder);

}else

}while (findnextfile(hfind,ref

findfiledata));

}if (hfind !=invalid_handle_value)

return

filecounts;

}static

void main(string

args)}}

執行結果如下:

非遞迴實現資料夾遍歷

之前有個 面試,其中一道題就是 用非遞迴的方式實現資料夾遍歷?在電面的時候沒有答出來,過後分分鐘就想到了答案,因為之前自己實現過按層序的方式列印一棵樹,用的也是非遞迴的方式,現在遍歷資料夾不就是遍歷這顆樹嗎!怎麼就沒想出來呢!在這裡簡單的記錄下,用了c 和c 兩個版本實現。我這裡的實現的功能是 用非...

使用遞迴遍歷資料夾

using system using system.data using system.configuration using system.collections using system.web using system.web.security using system.web.ui usin...

work Python 遞迴遍歷資料夾

import os def get log path dict log path home logs for root,dirs,files in os.walk log path log path dict dict for dir name in dirs dir path os.path.jo...