1. 배열에 대하여
배열은 아주 쉽고 기초적으로 사용할 수 있는 자료구조이다.
숫자가 한정된 자료에 대하여 효과적인 방법이나, 큰 데이터를 다루기에는 부적합하다.
2. C에서의 배열
C에서는 아주 간단하게 배열을 선언하기만 하면 사용할 수 있다.
int array[100];
단 코드 한줄로 배열을 만들 수 있다.
위의 코드는 정수형 100칸짜리 배열을 선언하는 코드이다.
3. 배열을 사용한 자료구조
배열을 그 자체로 사용하여 자료구조를 활용할 수 있다.
예시로 학생의 출석부를 작성하는 프로그램을 구상해보자.
우리가 저장해야할 정보에 대해서는 다음과 같다.
- 학생의 출석번호
- 학생의 이름
4. 배열을 이용한 출석부의 구현
#include<stdio.h>
typedef struct stud{
int stud_num;
char* stud_name;
}student;
int main(void){
student roster[30];
roster[0].stud_num = 1;
roster[0].stud_name = "김철수";
printf("%d %s\n", roster[0].stud_num, roster[0].stud_name);
return 0;
}
위의 코드는 stud_num과 stud_name을 가진 구조체를 선언하고, 구조체의 배열을 활용하여 출석부를 만든 예제이다.
sample data로 0번째 인덱스에 1번 김철수 학생을 넣었다.
따라서 출력은 다음과 같이 나온다.
1 김철수
위의 코드에서 입력을 받고 그 값을 출력하도록(조금더 있어 보이게) 만들면 다음과 같아진다.
// #01
// 배열을 이용한 출석부 만들기
#include<stdio.h>
#include<stdlib.h>
typedef struct stud{
int stud_num;
char* stud_name;
}student;
int main(void){
int N;
printf("number of student : ");
scanf("%d", &N);
//출석부 역할의 roster, student 배열 선언
student roster[30];
for(int i=0; i<N; i++){
//문자열을 저장하기 위하여 동적 할당
roster[i].stud_name = (char*)malloc(sizeof(char)*5);
scanf("%d %s", &roster[i].stud_num, roster[i].stud_name);
}
printf("\n\n----print roster...----\n");
for(int i=0; i<N; i++)
printf("%d %s\n", roster[i].stud_num, roster[i].stud_name);
printf("end print...\n");
for(int i=0; i<N; i++)
free(roster[i].stud_name);
printf("end free...\n");
return 0;
}
실행화면은 다음과 같다.
5. 정리
배열을 활용하여서 간단한 출석부를 만들고, 출석부의 내용을 출력하는 프로그램을 만들어 보았다.
다만, 여기서 마음에 안드는 부분이 생길 수 있다.
- 출석부 배열이 30명인데 5명을 저장하면 나머지 25명 분량은 메모리 손해를 본다.
- 인원이 30명 이상이 되버리면 저장을 하지 못한다.
이를 해결하기 위하여 다음 시간엔 링크드리스트를 학습하도록 하겠다.
'자료구조 및 알고리즘 > C' 카테고리의 다른 글
C - 스택/큐의 응용 (0) | 2021.01.21 |
---|---|
C - 큐(Queue)의 기본 구현 (0) | 2021.01.12 |
C - 스택(Stack) (0) | 2021.01.11 |
C - 연결 리스트(Linked List) (0) | 2021.01.11 |
C - 자료구조 및 알고리즘의 시작 (0) | 2021.01.10 |