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

+ Recent posts