게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C 언어 질문..
게시물ID : programmer_9649짧은주소 복사하기
작성자 : 5초안에
추천 : 0
조회수 : 1123회
댓글수 : 5개
등록시간 : 2015/04/30 23:41:26
옵션
  • 베스트금지
  • 본인삭제금지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 5
 struct age{  
         int tag;       
         int age;
        char name[10];
        struct age *next;
};
struct age Age[MAX];
struct age *Root = NULL;//루트
 
void age_init(){//태그 초기ㅗ하 함수
        int i;
        for(i=0; i<MAX; i++)
                Age[i].tag = 0;
}
struct age *age_get(int index){//tag가 0ㅇ인걸 1로 바꿔주는함수
        if(Age[index].tag ==0)
                Age[index].tag = 1;
        return Age;
}
int get_info(int index){//정보를 받는 함수
        char f_buffer[40];
        char *token;
        if(Age[index].tag !=0)
                return 1;
 
        fgets(f_buffer,sizeof(f_buffer),stdin);
        f_buffer[strlen(f_buffer)-1]='\0';
 
        token=strtok(f_buffer," ");
        Age[index].age=atoi(token);
        token=strtok(NULL," ");
        strcpy(Age[index].name,token);
 
        Age[index] = *age_get(index);// 태그를 1로 바꿔주는 함수
 
        if(index !=0)
                Sort(index);//정렬함수.
        return 0;
}
int Sort(int Index){
        int i, pt,ppt;
        ppt=-1;
        pt=0;
        for(i=0; i<MAX; i++){
                if(strcmp(Age[Index].name,Age[pt].name)<0){
                        if(ppt==-1)
Root= &Age[Index];
                        else
Age[ppt].next=&Age[Index];
                        Age[Index].next=&Age[pt];
                        break;
                }
                else if(Age[pt].next == NULL){
                        Age[pt].next=&Age[Index];
                        break;
                }
                else{
                        ppt=pt;
                        pt=atoi(Age[pt].next);
                }
        }
        return 0;
}
 
void print(){
        int i;
        struct age *pt = Root;
        for(i=0;i<MAX;i++){
                printf("%d, %s\n",pt->age,pt->name);
                pt=pt->next;
        }
}
int main(){
        int i;
        age_init();
 
        for(i=0; i<MAX; i++)
                get_info(i);
        printf("\n\n");
        print();
}
cs

 
위에서 아래로 순서대로 tagm age, name, next 입니다. 위에 사진처럼 맨밑인 next를 타고 해당 배열로 가서 출력해주는 시스템입니다. 마지막 next는 NULL값을 주는겁니다.
 루트는 가장 작은 값을 주게 되는데요 코드 에러는 안먹는데 코어덤프가 뜹니다 ..이 코든 예전에 에일리언님께 도움받아 짠 코드인데요.. 분명히 정렬에서 문제가 생긴거 같은데 도저히 어떻게 풀어야 할지 모르겠어요 :-(
힌트좀 주시면 감사하겠습니다 ..
출처 하........
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호