2012-09-18 1 views
2

비슷한 질문을하고 있었지만 해결책을 찾지 못했습니다. 구조가 2 개 이상의 노드가있는 트리와 비슷합니다. 또한 루트에 대한 포인터가 있습니다.C에서 트리 데이터를 파일에 쓰는 방법은 무엇입니까?

int writeData(TREE *root , char *filename){ 

    FILE *f = NULL; 
    int numWritten = 0; 

fopen_s(&f , filename, "w+"); 
fwrite(root , sizeof(TREE) , ??? , f); 

}

I 돈 :

typedef struct tree 
{ 
    char *name; 
    struct tree *children 
}TREE; 

내가 좀 도와 내가 사용 생각

을 얻을 싶어요 파일에 데이터를 쓰고 싶지만, 너무 혼란있어 어떻게 쓸 것인지 알 수 없습니다. 어떻게 할 수 있을까요? 모든 요소에 대해 자녀를 둔다면 모든 것이 던져 질 것입니다. 어떻게 할 수 있습니까?

+0

만 # 정의과 구조체를 형식 정의를하지 않는 하나님의 사랑에 대한 자본 이름을 사용합니다. –

답변

4

글쎄,이 문제는 '구조화 된 데이터 직렬화'로 알려져 있습니다. 기본적으로 구문 분석의 반대 방향은 입니다. 중요한 점은 메모리 내 데이터 구조의 원시 바이너리 데이터를 파일로 덤프 할 수 없다는 것입니다. 주소 변경시 다음에 프로그램을 시작할 때 의미가 없습니다. 데이터 구조를 설명하고 파일에 기록 할 수있는 형식을 찾아야합니다. 그런 다음 나중에 파일에서 데이터 구조를 복구하려는 경우 해당 형식의 파서도 작성해야합니다.

가볍고 쓰기 쉽고 읽기 쉬운 데이터 형식이며 일반적인 용도이기 때문에 간단한 추상 데이터 형식을 저장하는 것이 이상적입니다. 생성하고 기본 데이터 유형에서 JSON을 구문 분석 할 수 Here's my library (예 : 배열, 연관 배열, 문자열, 숫자 등 ...)

어떻게 내가 모든

그들을 던졌다 가고 beed 있도록 모든 요소에 자녀가있는 경우

이 질문에 : 아마도 recursion.을 찾고있을 것입니다. 데이터 구조를 재귀 적으로 탐색하고 각 노드/리프별로 걸을 때 데이터 구조를 나타내는 데이터를 생성해야합니다 (데이터 구조가 그래프/트리).

+0

감사합니다. 기본적으로 xml 파서를 사용하고 있습니다. 따라서 데이터를 저장할 때 xml 형식과 비슷하게 만들어야합니다. fprintf ("< %s >, exmaple.name)를 사용하고 싶습니까? – user1386966

+0

@ user1386966 네, 정확히! –

+0

그래서 직렬화가 필요한 이유는 무엇입니까? (미안 .. 완전히 얻지 못했습니다.) DFS를 사용하여 트리를 탐색 할 수 있다면 더 깊고 깊어집니다.) 그리고 특성에 대해 ">"및 "="과 같은 관련 기호를 추가하십시오. 직렬화는 어떻게하면 더 좋을까요? – user1386966

0

사용 된 모든 TREE가 TREE의 배열에 저장되고 모든 TREE 포인터가 배열로 색인화되도록 변경 한 다음 전체 TREE 배열을 이진 파일에 저장하도록 작업 데이터 구조를 복사 할 수 있습니다. 아, char 포인터는 저장된 문자의 단일 배열에 대한 포인터 여야합니다.

YAML 또는 JSON로 읽을 수

하지 않습니다,하지만 당신은 바이너리 형식을 필요 ...