2013-02-14 1 views
0

3 개의 클래스, 루트, CFile, 하위 디렉터리가 있습니다. 루트는 추상 클래스입니다. CFile 및 SubDirectory는 Root에서 파생됩니다. CFile에는 name : string, size : int, level : int 특성이 있습니다. SubDirectory에는 name : string, size : int, level : int, 파일과 디렉토리가 모두 포함 된 벡터 및 파일이나 디렉토리를 벡터로 푸시하는 void add() 함수가 있습니다. 디렉토리에있는 파일의 경우 파일의 레벨이 디렉토리의 레벨보다 높습니다. 모든 setter 및 getter가 정의됩니다.[C++] std :: stack을 사용하여 파일/디렉토리 계층을 처리하는 방법?

이제 현재 디렉터리 (컴퓨터 폴더)의 모든 항목을 구성 할 수있는 DirRead.h라는 파일이 있습니다. 각 항목에는 파일 이름, 크기, 수준 및 유형 (파일 또는 디렉토리)이 있습니다. main 함수에서 DirRead의 정보를 입력으로 사용하여 파일 시스템의 계층 구조를 작성해야합니다 (CFile 및 SubDirectory 사용). DirRead.h는 선주문 triversal을 수행합니다. 이 경우에는 재귀가 허용되지 않습니다 (시도했지만 DirRead.h에서 오류를보고했습니다). 입력을 처리하기 위해 스택을 사용하라는 요청을 받았지만 어떻게해야할지 모르겠다. 분명 여기 수준이 정말로 중요합니다. 스택을 만들고 모든 파일과 디렉토리를 스택에 넣으려고 시도한 다음 계층을 비교하여 계층을 구성했습니다. 하지만 Root에는 Add 기능이 없으므로 Subile에 모든 파일을 추가 할 수 없습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니다. 고마워.

답변

1

스택을 사용하여 아직 탐색하지 않은 디렉토리를 추적합니다. 다음 알고리즘을 사용할 수 있습니다.

  1. 루트 디렉토리를 스택으로 푸시합니다.

  2. 스택에서 맨 위 항목을 팝합니다. 스택이 비어 있으면 중지하십시오.

  3. 스택을 뺀 디렉토리를 탐색하십시오. 모든 파일과 디렉토리를 데이터 구조에 추가하십시오. 또한 찾은 모든 디렉토리를 스택에 푸시하십시오.

  4. 이동 훨씬 2.

+0

겠어요, 감사 단계! –

관련 문제