게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
(본삭금) C언어 정말 답답해서 질문좀 드릴게요 ,,
게시물ID : programmer_9260짧은주소 복사하기
작성자 : 5초안에
추천 : 1
조회수 : 648회
댓글수 : 3개
등록시간 : 2015/04/10 22:57:52
옵션
  • 본인삭제금지
그림 아래에 보시면 2 0 3 -1이 순서대로 보이실겁니다. 마지막 배열에는 -1을 넣어준것이고, 2 0 3은 이름순으로 정렬을 하여서 오름차순으로 해당 배열로 가라는것 입니다. 루트는 첫 시작을 가르킵니다.
여기서 2 0 3 -1 을 순서대로 어떻게하면 넣을 수 있는지 힌트좀 가르쳐주시면 감사하겠습니다.
선택정렬을 하게되면 값이 이상하게 들어가서 뭘 어떻게 해야 할지 모르겠습니다.

답변주시면 감사하겠습니다.

=====================================================================================
제가 일단 짜본 코드입니다.
구조체에 gets를 이용하여 토큰분리 후 넣어준거까지 했습니다. 

age.h 헤더파일입니다.
1
2
3
4
5
6
7
8
 
struct age{
        int tag;
        int age;
        char name[10];
        int next;
};
 
cs
본 파일입ㄴ다
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
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"age.h"
#define MAX 5
struct age Age[MAX];
int Root = -1;
void age_init();
int age_get();
main(){
        char get_str[40],name[10];
        char *token = NULL;
        int i,j,k,age,re_val;
        age_init();
 
        for(i=1;i<=MAX;i++){
                fgets(get_str,sizeof(get_str),stdin);
                get_str[strlen(get_str)-1]='\0';
                token = strtok(get_str," ");
                age = atoi(token);
                token = strtok(NULL," ");
                strcpy(name,token);
                re_val = age_get();
                strcpy(Age[re_val].name,name);
                Age[re_val].age=age;
                Age[re_val].next=Root;
                if(i>=2){//여기가 정렬해줄 부분인데 도저히 잘 모르겠네요,,,
                        for(j=0;j<i-1;j++){
                                for(k=j;k<i;k++){
                                        if(strcmp(Age[j].name,Age[k].name)>0)
                                                Age[k].next=j;
                                }
                        }
                }
 
 
        }
        for(i=0;i<MAX;i++)
                printf(" T : %d , Age : %d, Name : %s, next : %d\n",Age[i].tag,Age[i].age,Age[i].name,Age[i].next);
}
void age_init(){//모든 배열에 tag를 0으로 만들어줍니다.
        int i;
        for(i = 0; i<MAX;i++)
                Age[i].tag=0;
}
int age_get(){//tag가 0인부분을 1로 바꿔주는 함수입니다. 바꿔줌으로 인해 그 자리에 삽입을 해 주는거죠
        int i;
        for(i=0;;i++)
                if(Age[i].tag==0){
                        Age[i].tag=1;
                        return i;
                }
}
 
cs


추가내용.
1. fgets으로 "19, kim"형태로 나이와 이름을 받은 후, 토큰으로 분리
2. age_get을 호출하여 비어있는 Age 배열첨자를 얻은 후 그 원소에 입력 내용을 저장.
3. 위 그림과 같이 Root에서 출발해서 next로 연결되는 배열의 원소들이 오름차순을 이루도록 지금 입력받은 배열 원소를 적절한 위치에 삽입.(맨끝 next는 -1로 설정하여 마지막임을 표시)
4. Max번 반복.
5. 입력후, Root에서 출발하여 끝까지 따라가면서 모은원소들의 내용을 반복구문으로 "19, Kim"형태로 출력.

여기까지가 문제입니다. 답을 가르쳐 달라는건 아니고 힌트좀 부탁드립니다...
혼자 머리 몇일동안 싸매도 잘 안됩니다..   : (

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호