2012-04-17 4 views
-1

그래서 나는 약간의 독서를하고 친구로부터 도움을 받았습니다. 그리고 나는 그것을 얻었 을까? 사실, 프로젝트의 제 부분은 문자 및 빈도 테이블을 연결된 목록에 저장하는 것입니다. 몇 가지 코드를 적어 두었습니다. 누구든지 개선 할 수 있다면 가능합니다. .txt 파일테이블을 연결된 목록에 저장하는 방법은 무엇입니까?

샘플 입력 (문자 및 주파수의 테이블) :
B1
D3
E7
J9

구조체 :

struct node { 
    char info; 
    int freq; 
    struct node * next; 
    struct node * left, *right, *father; 
}; 

typedef struct node * nodeptr; 

nodeptr getnode(){ 
return malloc(sizeof(struct node)); 
} 

메인 프로그램 (단지까지 테이블을 링크 된 목록에 저장하는 부분) :

string input; 
nodeptr list = NULL; 
FILE *fopen(); 
int c; 
list = fopen("Huffman Table.txt","r"); 
c = getc(input) ; 
while (c!= EOF) 
{ 
    putchar(c); 
    c = getc(input); 
} 
getch(); 
fclose(input); 

for (node * row = table; row != NULL; row = row->next){ 
fprintf(file, "%s %i %i", row->info, row->freq); 
} 

는 그래도 난이 부분에 대해 확실하지 않다 :

for (node * row = table; row != NULL; row = row->next) 

난 그냥 대신를 사용해야합니까?

for(i=0;i<strlen(input);i++){ 
+0

코드는 실제로 어떤 목록에도 문자를 저장하지 않습니다. 파일에서 읽는 코드를 개선하고 목록 노드에 항목을 저장하고 전에 작성한 다음 목록에 링크하십시오. –

답변

0

I는 당신이 첫 번째 세미콜론 전에 할당에 전달한다고 가정하고 있기 때문에

for (node * row = table; row != NULL; row = row->next)

이 작동합니다 생각하지 않습니다. 무엇 당신이하고있는

... 난 정말

for(i=0;i<strlen(input);i++){

이 더 잘 작동 것 .. 모르겠어요. 하지만 난 개최 가정 무엇 문자열 입력 모르기 때문에, 확실하지 않다 당신이 테이블을 사용하는 방법 루프 (구문) 때문이다

0

사용 된 완벽하게 확인을 ISN 드물다. 그러나 "테이블"포인터는 무엇입니까? 귀하의 목록의 뿌리입니까? 작은 의견 - "nodeptr"typedef를 만든 경우, 거기에 사용해야합니다. 그것이 바로 그 때문입니다. 이 내가 당신이 연결리스트로되어 있다고 말했다

  1. 에 대한 걱정 코드의 일부 다른 부분이있다, 그래서 당신의 구조체는 "아버지"포인터를 가지고 왜? 그것은 나에게 나무처럼 보입니다. 의도가 아니라면 해당 필드를 제거하십시오.

  2. 내가 작성한 코드의 마지막 부분을 잘 모르겠다. 목록의 내용을 파일에 쓰려면 위에서 언급 한 for 루프를 사용해야합니다.

그리고 (나에게 숙제처럼 보이는, 그리고 난 같은 태그되어야한다 생각)이 코드 일반적인 개선 등

은> 표준 : : 목록 <을 사용하는 것입니다. 그러나 C 언어 대신 C 언어로 코딩 할 수있는 경우에만 수행 할 수 있습니다.

+0

오 그게 나중에 나무로 사용되기 때문입니다. 프로젝트의 제 부분은 .txt 테이블을 링크 된 목록으로 구현하는 것입니다.그래서 그 테이블에 대한 다른 구조체와 트리에 대한 다른 나중에 만들어야한다는 뜻입니까? – nutellafella

+0

글쎄, 지금 당장은 그냥 떠날 수 있지만, 약간 오도하는 편이다. 아직도, 그것은 여기에서 주된 문제가 아닙니다 ... –

관련 문제