여기에서 만드는 동적 배열은 순차적으로 자료를 보관하게 만들기로 해요.
그리고 자료를 보관하는 저장소가 꽉 차면 알아서 저장소의 크기를 늘려주는 확장 가능한 배열로 만들어요.
이를 위해서는 동적 배열 구조체의 멤버로 동적으로 할당한 저장소의 위치 정보를 기억하고 있어야겠죠.
그리고 현재 저장소의 크기 및 현재 보관 개수를 기억하고 있게 멤버를 정하세요.
여기에서는 동적으로 생성한 자료를 보관할 수 있게 void * 형식을 요소 형식으로 정의하세요.
1 2 3 4 5 6 7 8 |
typedef struct _EHArray EHArray; typedef void *Element; struct _EHArray { Element *base; //저장소의 위치 정보 int capacity; //현재 저장소의 크기 int size; //현재 보관한 요소 개수 }; |
그리고 동적 배열을 사용하기 위한 여러 함수들을 제공해야겠죠.
먼저 사용자 정의 배열 구조체에 있는 멤버 속성을 확인하는 함수도 제공하세요.
C언어에서는 구조체 멤버를 어디서나 접근할 수 있어요.
하지만 형식 내부의 멤버를 다른 곳에서 접근을 허용할 것이지를 개발자가 정하는 언어도 많아요.
특히 C++, Java, C# 등의 OOP언어들은 자료의 신뢰성을 높이기 위해 개발자가 멤버의 접근 가시성을 정할 수 있어요.
이번 실습에서는 다른 소스 파일에서 구조체 배열의 멤버에 접근하지 않고 사용하기로 해요.
먼저 동적 배열을 생성할 때 사용하는 함수에는 초기 저장소의 크기와 초기값을 입력받게 하세요.
1 |
EHArray *NewEHArray(int init_capa,Element init_value); //동적으로 배열 생성 |
동적 배열을 소멸하는 함수, 저장소의 크기 가져오기, 보관한 요소 개수 가져오기 기능도 제공하세요.
1 2 3 |
void DeleteEHArray(EHArray *arr); //배열 소멸 int EHArrayGetCapacity(EHArray *arr); //저장소의 크기 가져오기 int EHArrayGetSize(EHArray *arr); //보관한 요소 개수 가져오기 |
순차적으로 자료 보관, 보관한 요소 가져오기, 보관한 요소 설정하기 함수도 제공하세요.
1 2 3 |
void EHArrayPushBack(EHArray *arr,Element data); //순차적으로 자료 보관 Element EHArrayGetAt(EHArray *arr,int index); //보관한 요소 가져오기 void EHArraySetAt(EHArray *arr,int index, Element data); //보관한 요소 설정하기 |
배열에 보관한 자료들을 순차적으로 접근하기 쉽게 저장소의 시작 위치와 마지막 위치를 확인하는 기능도 제공하세요.
검색이나 목록 출력등 반복문에서 사용하기 쉽게 마지막 위치는 마지막 자료를 저장한 다음 위치로 정하세요.
1 2 |
Iterator EHArrayBegin(EHArray *arr); //저장소의 시작 위치 Iterator EHArrayEnd(EHArray *arr); //저장소의 마지막 위치(보관할 위치) |
자료를 보관한(할) 위치를 Iterator 형식이라고 이름을 정하기로 해요.
1 |
typedef Element * Iterator; |
그리고 특정 위치에 보관한 것을 제거하는 함수도 제공하세요.
1 |
void EHArrayErase(EHArray *arr,Iterator it);//보관한 요소 제거하기 |
◈ EHArray.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
typedef struct _EHArray EHArray; typedef void *Element; //요소 형식명을 Element로 정의 typedef Element * Iterator; struct _EHArray { Element *base; //저장소의 위치 정보 int capacity; //현재 저장소의 크기 int size; //현재 보관한 요소 개수 }; EHArray *NewEHArray(int init_capa,Element init_value); //동적으로 배열 생성 void DeleteEHArray(EHArray *arr); //배열 소멸 int EHArrayGetCapacity(EHArray *arr); //저장소의 크기 가져오기 int EHArrayGetSize(EHArray *arr); //보관한 요소 개수 가져오기 void EHArrayPushBack(EHArray *arr,Element data); //순차적으로 자료 보관 Element EHArrayGetAt(EHArray *arr,int index); //보관한 요소 가져오기 void EHArraySetAt(EHArray *arr,int index, Element data); //보관한 요소 설정하기 Iterator EHArrayBegin(EHArray *arr); //저장소의 시작 위치 Iterator EHArrayEnd(EHArray *arr); //저장소의 마지막 위치(보관할 위치) void EHArrayErase(EHArray *arr,Iterator it);//보관한 요소 제거하기 |
[C언어 무료 동영상 강의] 88. 사용자 정의 배열 개요, 89. 동적 배열 헤더 작성