2011-04-29 6 views
3

마지막 학기 프로젝트의 경우, 내 운영 체제 클래스의 모든 사용자는 의사 "Linux 파일 시스템"을 구현해야합니다. 아이디어는 파일, 폴더, 디렉토리 변경 등을 시뮬레이트하는 것입니다.C의 구조체, 포인터 및 트리

나는 C로 프로그램 할 때 문자열과 포인터로 작업해야한다는 것에 싫어한다. 불행히도 마음의 평화를 위해이 프로젝트는이 두 가지를 모두 포함하는 것으로 보인다. 필자는 포인터에 대해 비교적 불편하기 때문에 기초적인 트리 구조의 백엔드 구현이 건전하다는 확신을 얻을 수 있기를 바랬다.

typedef struct floorNode 
{ 
    char floorName[30]; //the name of the tree node 
    struct floorNode *parentPointer; //this is a pointer to the parent node. Null for the root node. 
    struct floorNode *childPointers[10]; //this is an array holding pointers to up to 10 child nodes. 
    char fileArray[10][30]; //this is an array of 10 'files', each of up to length 30. 
          //for this assignment, strings are the only type of "file" 

} floorNode; 

C에서 트리를 구현하는 적절한 방법입니까?

+8

포인터로 작업하는 것을 좋아하지 않는다면 C에서 무엇이든 할 수 없을 것입니다. BTW에서는 대부분의 언어에 포인터가 있지만 참조로 호출하여 숨기려고하지만 대부분 동일한 문제가 적용됩니다. –

+0

@mu는 너무 짧습니다. 참고 문헌이 훨씬 더 좋아요.하지만 그 말은 저보다 더 많은 경험담 일 것입니다. –

+0

하나의 디렉토리에 10 개 미만의 파일과 하위 디렉토리가 있어야한다는 제한을 가진 파일 시스템이 당신이 원하는 전부라면 괜찮습니다. 그리고 노드의 절대 이름을 저장하는 것은 의미가 없다고 생각합니다. 왜 당신이 알아낼 수 있기를 바랍니다 –

답변

1

다소 적정한 데이터 유형입니다.

나는 fileArray[][]에 대해 우려하고 있습니다. 내가 그 목적을 오해하지 않는다면 나는 그것이 필요하다고 생각하지 않는다. 어린이의 floorName을 얻으려면 대신 childPointers[]을 트래버스하여 어린이 이름을 가져옵니다.

노드에 30 개의 문자열이있는 경우 고려해야 할 점은 모든 노드에 대한 저장소를 약간 더 크게 만드는 것입니다.이 경우 31 개이므로이 노드의 후행 NUL이 항상 존재하며 특별한 구별없이 처리해야합니다 NUL이없는 30 자 문자열과 하나가있는 모든 짧은 문자열.

+0

파일 배열 자체는 floorNodes가 아닌 자식을위한 배열입니다. (제 경우에는 단순한 문자열 일뿐입니다). 이제 내 운이 좋으면 Stack Overflow가 내 나무가 작동하지 않는다고 불평하는 또 다른 질문을 곧 갖게 될 것입니다. P –

0

아마도 연결된 하위 목록이 필요합니다. 당신은 확실히 이것을위한 포인터 배열을 원하지 않습니다. 파일이 실제로 디렉토리인지 여부를 아는 방법에 대해서도 생각해야합니다.

+0

각 노드에 연결된 자식 목록이 있다고 제안 하시겠습니까? –

+0

@Raven Dreamer - 예. 나는 또한 디렉토리와 정규 파일이 모두 파일이고 트리의 같은 종류의 노드로 있어야한다고 생각합니다. –

+0

괜찮은 제안입니다. –