자료구조란 ?
우리가 부여한 데이터들을 , 어디에, 어떤 구조로 저장할 것인가.
일반적으로 대부분의 경우에는, 자료구조를 결정하고 , 그 다음, 코드를 작성한다.
어떤 데이터를 보관하고, 유지하고, 다뤄야 하는지를 생각해본다.
이 경우에는 비교적 자명하다.
프로그램이 저장해야 할 데이터는 기본적으로
사람의 이름과, 전화번호부 이다.
여러 사람의 이름들과 , 그 사람들의 전화번호부.
가장 기본적인 방법은 물론, '배열' 을 사용하기.
왜 ? 사람이 여러명이니까,
전화번호도 여러명이니까
사람 이름은 각각이 문자열인데, 그 문자열이 여러개 있는것.
우리가 일반적으로 동일한 타입의 데이터가 여러개 있을 때, 그 데이터를 저장하는 가장 기본적인 자료구조는 '배열'이다.
이 경우에는 데이터가 2 가지 ( 전화번호, 이름 )
그래서 names, numbers 라는 2개의 배열을 지정한다.
그렇다면 '배열'은 어떻게 정의할까 ?
# define CAPACITY 100 # defien BUFFER_SIZE 100 char *names[CAPACITY}; // 배열을 정의할 때 필요한 것은 3가지이다. // 1. 배열의 이름 ex. names // 2. 배열의 크기 ex. CAPACITY // 3. 배열의 type ex. char *
< 보조 설명 >
배열의 type ??
= 그 배열의 각 칸에 저장되는 data 의 type 이 뭐냐.
이와 같이 예를 들어서,
names[ ] 라는 배열에 저장되는 데이터의 타입은 "John\0" 과 같은 문자열 이다. 즉, 문자의 배열이다.
즉, names[ ] 라는 배열에 저장되는 것은 사람의 '이름' 이고,
사람의 '이름' 이란, 그 자체로 하나의 string 이다.
string 이라는 것은 다시 문자들의 배열이다.
예를 들어 ,John 은, 이 자체가 길이가 4 인 문자열이다.
복습하자면, C 언어 에서 문자열을 만드는 방법은,
배열을 만들어서
각 칸에 문자 하나씩을 넣는 것이다.
J O H N \n 이렇게 .
그리고 names 라는 배열의 첫칸.
즉, names[ 0 ] 은,
J o h n \0 이라는 배열의 "주소"를 가리키는 것이다.
' \0 ' 이 들어가는 이유는, C 언어에서
모든 문자열의 끝에는
NULL CHAR 을 넣어주기 때문이다.
즉, names 라는 배열의 각칸에 저장되는 것은 " 주소 " 이다.
그리고 그 "주소" 에 가면, 있는 것이 하나의 "문자" 이므로
그것은 char * 이 되는 것이다.
names 라는 배열의 type 은 char* 이 되는 것이다.
char *number{CAPACITY};
비록 전화번호부도, 숫자이지만, 숫자로 다루는 것보다는
하나의 문자열 처럼 다루는 것이 좋다. 왜 ?
예를 들어
051-234-6787 : 이렇게 번호 사이사이에 - 부호를 넣거나.
하는 경우가 많기 때문에,
그 외에도 다양한 이유가 있어서
전화번호부 도, 문자열 처럼 다루기
# define CAPACITY 100
# defien BUFFER_SIZE 100
char *name[CAPACITY};
// 배열을 정의할 때 필요한 것은 3가지이다.
// 1. 배열의 이름 ex. names
// 2. 배열의 크기 ex. CAPACITY
// 3. 배열의 type ex. char *
char *number{CAPACITY};
int n = 0; // 현재 저장된 사람 수. ( 처음에는 0 명)
// 이후에 n ++ 시키면서, 점차 사람 수 한명 씩 증가시킬 것.
void add();
void find();
void status();
void remove();
int main() {
char command[BUFFER_SIZE];
while(1){
// while(1) 이라는 것은 무한 루프를 말하는 것이다.
printf("$ ");
scanf("%s" , command) ;
// while 문 안에서 명령어를 하나 받고 다시 올라와라.
// scanf("%s") 로 사용자의 명령을 입력받아서, 그것을 command 라는 배열에 저장한다.
if( strcmp ( command , "add" ) == 0 )
add();
// strcmp 는 문자열을 비교하는 함수이고,
// 그 안에는 우리가 비교할 2개의 문자열을 넣는다.
// command 는 우리가 넣는 문자열
// add 는, 우리가 비교하고 싶은 문자열이다.
// 이 2개의 문자열이 동일하면, 0 를 반환한다.
else if( strcmp ( command , "find" ) == 0 )
find();
else if( strcmp ( command , "status") == 0 )
status();
else if( strcmp ( command, "delete") == 0 )
remove();
else if( strcmp ( command , "exit" ) == 0 )
break;
}
return 0;
}
'C_Data Structure_Algorithm > C telephone v1.0' 카테고리의 다른 글
C 전화번호부 v1.0_2) (0) | 2020.02.28 |
---|