11
2015-04-11 01:50:02
2
/*
* 오늘의 유머 Ailenware 예제
*
* 1. fgets으로 "19, kim"형태로 나이와 이름을 받은 후, 토큰으로 분리
* 2. age_get을 호출하여 비어있는 Age 배열첨자를 얻은 후 그 원소에 입력 내용을 저장.
* 3. 위 그림과 같이 Root에서 출발해서 next로 연결되는 배열의 원소들이 오름차순을 이루도록 지금 입력받은 배열 원소를 적절한 위치에 삽입.(맨끝 next는 - 1로 설정하여 마지막임을 표시)
* 4. Max번 반복.
* 5. 입력후, Root에서 출발하여 끝까지 따라가면서 모은원소들의 내용을 반복구문으로 "19, Kim"형태로 출력.
*/
// Header Files
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
// Structure Definition
struct Person{
int tag;
int age;
char name[10];
int next;
};
// Global Variables
const int numOfPeople = 5;
struct Person people[numOfPeople];
int root = 0;
// Functions
int initPerson() {
int i;
for (i = 0; i < numOfPeople; i++) {
people[i].tag = 0;
people[i].next = -1;
}
return 0;
}
int insertionSort(int newerIndex) {
int index, pointer, ppointer;
ppointer = -1;
pointer = root;
for (index = 0; index < numOfPeople; index++)
{
if (people[newerIndex].age < people[pointer].age)
{
if (ppointer == -1)
root = newerIndex;
else
people[ppointer].next = newerIndex;
people[newerIndex].next = pointer;
break;
}
else if (people[pointer].next == -1)
{
people[pointer].next = newerIndex;
break;
}
else
{
ppointer = pointer;
pointer = people[pointer].next;
}
}
people[newerIndex].tag = 1;
return 0;
}
int getPerson(int index) {
if (people[index].tag != 0)
return 1;
char fgetBuffer[40];
char *tokenPointer;
fgets(fgetBuffer, sizeof(fgetBuffer), stdin);
fgetBuffer[strlen(fgetBuffer) - 1] = ' ';
tokenPointer = strtok(fgetBuffer, " ");
people[index].age = atoi(tokenPointer);
tokenPointer = strtok(NULL, " ");
strcpy(people[index].name, tokenPointer);
if (index != 0) // 첫 원소
insertionSort(index);
else
people[index].tag = 1;
return 0;
}
// Main
int main(){
// Init DataArray
initPerson();
// Get Data
int index;
for (index = 0; index < numOfPeople; index++)
{
getPerson(index);
}
// Print result
int pointer = root;
for (index = 0; index<numOfPeople; index++)
{
printf(" T : %d , Age : %d, Name : %s, next : %dn", people[pointer].tag, people[pointer].age, people[pointer].name, people[pointer].next);
pointer = people[pointer].next;
}
}