자료구조 #4 - 배열 구현

HongInSung·2022년 11월 22일
0
post-thumbnail
post-custom-banner

이 포스트는 FastCampus에 이 강의를 보고 포스팅되었습니다.
문제가 될 시 삭제될 예정입니다.

시작하기 전에 배열 특징 좀 다시 알려줘봐

  1. 같은 데이터 타입을 순서에 따라 관리하는 자료구조입니다.
  2. 정해진 크기가 있습니다.
  3. 요소의 추가와 제거 시 다른 요소들의 이동이 필요합니다 ( 앞 / 뒤 )
  4. 배열에 i번째 요소를 찾는 연산이 빠릅니다.

JDK 클래스에는 ArrayList와 Vector가 있습니다.

뭘 구현해볼 건데

배열 생성, 추가기능, 배열을 중간에 추가하는 것과 제거하는 메서드를 만들어볼 겁니다. 같이 가보시죠.

잠깐 이거 코드 여기에만 올라옴??

전편에도 말했지만 모든 코드는 깃허브에 올라갈 예정입니다.
링크

배열 생성

int[] intArr; // integer 배열
int count; // 개수

public int ARRAY_SIZE;
public static final int ERROR_NUM = -999999999;

// 기본 생성자 생성
public myArray() {
    ARRAY_SIZE = 10; // 크기 지정 안 할 시 기본값 10으로 설정
    count = 0; // 개수 0으로 설정
    intArr = new int[ARRAY_SIZE]; // 새로운 배열로 설정 ( 크기는 기본 10으로 )
}

// 오버라이딩 생성자 생성
public myArray(int size) {
    ARRAY_SIZE = size; // 크기 지정할시 지정한 크기로 설정
    count = 0; // 개수 0으로 설정
    intArr = new int[size]; // 새로운 배열로 설정 ( 크기는 size 값 )
}

값 추가

// 값 추가
public void addElement(int num) {
    if (count >= ARRAY_SIZE) { // 만약 count가 배열 크기를 넘는다면
    	// 예외처리
    	throw new ArrayStoreException("더는 저장할 수 있는 공간이 없습니다.");
    }
    intArr[count++] = num; // 아니라면 배열에 값 추가하고 count += 1
}

값 중간에 추가

// 배열 중간에 값을 추가합니다.
public void insertElement(int position, int num) {
	// 만약 포지션 값이 이상하게 들어올 경우
    if (position < 0 || position >= count) { 
        // 예외 발생
        throw new ArrayStoreException("포지션 값이 이상합니다.");
    }
	
    // 만약 count가 배열 크기를 넘는다면
    if (count >= ARRAY_SIZE) { 
        // 예외 발생
        throw new ArrayStoreException("더는 저장할 수 있는 공간이 없습니다.");
    }

    // 위 if 문 두 개에 안 걸린다면 중간에 넣기를 실행
    // i는 초깃값 count-1개, position 이상일 경우 종료, i가 하나씩 줄어들면서 진행
    for (int i = count - 1; i >= position; i--) {
    	// 배열에 i-1 위치에 있는 값을 i 위치에 있는 값으로 변경
        intArr[i+1] = intArr[i];
    }
	
    // position 인덱스에 num값 입력
    intArr[position] = num;
    // count + 1
    count++;
}

값 삭제

 public int deleteElement(int position) {
    // 만약 count가 0이라면
    if (isEmpty()) {
        // 예외 발생
        throw new ArrayStoreException("이미 값이 없는 배열입니다.");
    }

    // 만약 포지션 값이 이상하게 들어올 경우
    if (position < 0 || position > count - 1) {
        // 예외 발생
        throw new ArrayStoreException("포지션 값이 이상합니다.");
    }

    // ret을 intArr[position] 값으로 할당
    int ret = intArr[position];

    // i 초깃값은 position으로, count - 1번까지 돌린다
    for (int i = position; i <= count - 1; i++) {
        // intArr[i]를 intArr[i+1]로 바꾼다.
        intArr[i] = intArr[i+1];
    }

    // count - 1
    count--;

    // ret return
    return ret;
}

값 확인

public void checkMyArr() {
    for(int i = 0; i < ARRAY_SIZE; i++) {
        System.out.println(intArr[i]);
    }
}

배열이 비었는지 확인

public boolean isEmpty() {
	// 만약 count가 0이라면
    if ( count == 0 ) {
    	// true 리턴
        return true;
    }
    // 아니면 false
    return false;
}

카운트 수 확인

public int getCount() {
	return count;
}

전체 구현 코드좀 줘봐

전체 구현 코드는 여기서도 확인 가능합니다.

마치며

배열에 대한 구현은 여기까지입니다.
다음 시간에는 연결리스트를 구현해보도록 하겠습니다.
수고하셨습니다.

profile
안녕하세요! 풀스택 노려보고 있는 홍인성입니다!
post-custom-banner

0개의 댓글