반응형
3글자의 알파벳으로 이루어진 이름과, 4글자의 숫자로 이루어진 번호 쌍을 저장하는 주소록 프로그램이 있다고 해보자.
이 프로그램에서 이름과 번호쌍을 어떻게 관리할 수 있을까?
대부분의 언어에서 기본으로 제공하는 '배열' 자료구조를 이용하여 구현한다면 아래와 같이 구현할 수 있을 것이다.
1. 두 배열을 이용하여 데이터를 저장하기
첫 번째 방법은 두 배열을 이용해서 이름과 번호를 저장하는 방법이 있다.
이름과 번호를 연결짓는 기준은 '배열의 인덱스' 가 된다.
이렇게 저장한 자료에서 이름을 기준으로 번호를 찾는다고 하면 아래와 같이 코드를 짤 수 있다.
#include <stdio.h>
char name[10][3];
char number[10][4];
char find_name[3];
int main() {
printf("저장할 이륾과 번호를 공백으로 구분하여 입력하세요. >> ");
scanf("%s %s", name[0], number[0]);
printf("검색할 이륾 3글자를 입력하세요. >> ");
scanf("%s", find_name);
int is_found = 0;
for (int i = 0; i < 10; i++) {
int check = 1;
for (int j = 0; j < 3; j++) {
if (find_name[j] != name[i][j]) {
check = 0;
break;
}
}
if (check) {
printf("%s %s",name[i], number[i]);
return 0;
}
}
printf("찾는 이름이 없습니다.");
return 0;
}
하지만 만약 여러개의 이름-번호 쌍을 무작위로 저장하고,
그 주소록을 이름 순으로 정렬한다고 하면 어떨까?
이렇게 배열 2개를 이용하는 상황에서는 정렬하면서 이름의 인덱스가 바뀔 때마다
번호의 인덱스도 그에 맞게 관리하는 것이 쉽지 않을 것이다.
2. 구조체 배열을 이용하여 데이터를 저장하기
구조체를 이용하여 번호와 이름쌍을 묶어보자.
struct record {
char name[4];
char number[5];
};
struct record data[10];
구조체를 이용하는 경우, \0 문자까지 고려해서 1씩 사이즈를 더 늘려야 출력시 문제가 생기지 않았다.
#include <stdio.h>
struct record {
char name[4];
char number[5];
};
struct record data[10];
char find_name[3];
int main() {
printf("저장할 이륾과 번호를 공백으로 구분하여 입력하세요. >> ");
scanf("%s %s", data[0].name, data[0].number);
printf("검색할 이륾 3글자를 입력하세요. >> ");
scanf("%s", find_name);
int is_found = 0;
for (int i = 0; i < 10; i++) {
int check = 1;
struct record now_data = data[i];
for (int j = 0; j < 3; j++) {
if (find_name[j] != now_data.name[j]) {
check = 0;
break;
}
}
if (check) {
printf("%s %s",data[i].name, data[i].number);
return 0;
}
}
printf("찾는 이름이 없습니다.");
return 0;
}
이렇게 구조체 배열을 이용한다면, 정렬 기능을 추가하는 상황에도 대처할 수 있을 것이다.
앞으로 정리할 자료구조를 활용하여 이 주소록 프로그램을 점점 개선할 것이다.
다음 포스팅에서는 스택의 개념과 수도코드 구현, 실제 C코드 구현에 대하여 정리한다.
반응형
'CS > 자료구조' 카테고리의 다른 글
[자료구조 및 프로그래밍] 5. Stack & Queue With Linked List (0) | 2023.10.17 |
---|---|
[자료구조 및 프로그래밍] 4. Linked List (0) | 2023.10.12 |
[자료구조 및 프로그래밍] 3. Queue (Circular Queue) - 2 (0) | 2023.10.04 |
[자료구조 및 프로그래밍] 2. Queue (implement with Array) - 1 (2) | 2023.09.30 |
[자료구조 및 프로그래밍] 1. Stack (implement with Array) (2) | 2023.09.21 |