89. 동적 배열 헤더 작성

여기에서 만드는 동적 배열은 순차적으로 자료를 보관하게 만들기로 해요.
그리고 자료를 보관하는 저장소가 꽉 차면 알아서 저장소의 크기를 늘려주는 확장 가능한 배열로 만들어요.

이를 위해서는 동적 배열 구조체의 멤버로 동적으로 할당한 저장소의 위치 정보를 기억하고 있어야겠죠.
그리고 현재 저장소의 크기 및 현재 보관 개수를 기억하고 있게 멤버를 정하세요.
여기에서는 동적으로 생성한 자료를 보관할 수 있게 void * 형식을 요소 형식으로 정의하세요.

typedef struct _EHArray EHArray;
typedef void *Element;
struct _EHArray
{
    Element *base; //저장소의 위치 정보
    int capacity;     //현재 저장소의 크기
    int size;           //현재 보관한 요소 개수
};

그리고 동적 배열을 사용하기 위한 여러 함수들을 제공해야겠죠.
먼저 사용자 정의 배열 구조체에 있는 멤버 속성을 확인하는 함수도 제공하세요.
C언어에서는 구조체 멤버를 어디서나 접근할 수 있어요.
하지만 형식 내부의 멤버를 다른 곳에서 접근을 허용할 것이지를 개발자가 정하는 언어도 많아요.
특히 C++, Java, C# 등의 OOP언어들은 자료의 신뢰성을 높이기 위해 개발자가 멤버의 접근 가시성을 정할 수 있어요.
이번 실습에서는 다른 소스 파일에서 구조체 배열의 멤버에 접근하지 않고 사용하기로 해요.

먼저 동적 배열을 생성할 때 사용하는 함수에는 초기 저장소의 크기와 초기값을 입력받게 하세요.

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); //저장소의 마지막 위치(보관할 위치)

자료를 보관한(할) 위치를 Iterator 형식이라고 이름을 정하기로 해요.

typedef Element * Iterator;

그리고 특정 위치에 보관한 것을 제거하는 함수도 제공하세요.

void EHArrayErase(EHArray *arr,Iterator it);//보관한 요소 제거하기

◈ EHArray.h

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);//보관한 요소 제거하기