Knowledge/자료구조

[자료구조] 선형 자료구조 - 배열

똑똑한망치 2023. 11. 15. 14:14
728x90
반응형

1. 배열이란 무엇인가


  • 많은 수의 데이터를 다룰 때 사용하는 자료구조
  • 각 데이터를 인덱스와 1:1 대응하도록 구성
  • 같은 타입의 데이터가 메모리 상에 연속적으로 저장

 

 

 

 


 

 

 

(1) 배열의 장점

  • 인덱스를 이용하여 데이터에 빠르게 접근 가능
  • 자료의 물리적 위치와 논리적 위치가 같다.

 

 

 

 

 

(2) 배열의 단점

  • 데이터의 추가 / 삭제가 번거롭다
    • 미리 최대 길이를 정해서 생성해야 한다.
    • 가변 길이 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성
    • 데이터 삭제 시, 인덱스를 유지하기 위해 빈 공간을 유지한다.

 

 

 

 

 

 

 

 

 

배열 생성 시 최대 길이 정해서 생성해야 한다.

 

 

 

 


 

(3) 배열 선언

int[] Number = new int[30];    // 배열 선언과 초기화를 동시에 실행

int[] Number = new int[10] {1,2,3, ... ,9,10};     // 배열에 저장할 값 담으면서 초기화

int[] Number = {1,2,3, ... 9,10};     // new int[] 생략하고 초기화 가능 Number에 다른 값을 넣을 때는 다시 new int[] 작성해야함

 

 

 


(4) 배열 코드 구현

  • 배열에 데이터를 삽입
public void insertData(int index, int data) {
	if (index < 0 || index > this.arr.length) {
    	System.out.println("Index Error");
        return;
     }
     
     int[] arrDup = this.arr.clone(); //기존 배열을 arrDup 에 복사하기
     this.arr = new int[this.arr.length + 1];
     
     for (int i = 0; i < index; i++) {
     	this.arr[i] = arrDup[i];
     }
     for (int i = index + 1; i < this.arr.length; i++) {
     	this.arr[i] = arrDup[i-1];
     }
	this.arr[index] = data;
  }

 

 

 

 

 

 

  • 배열에 특정 데이터 삭제
public void deleteData(int data) {
	int targetIndex = -1;
    
    for (int i = 0; i < this.arr.length; i++) {  //입력받은 데이터가 배열에 존재하는지 확인
    	if (this.arr[i] == data) {
        	targetIndex = i; //존재한다면 targetIndex 변수에 그 데이터의 인덱스 대입
            break;
        }
    }
    
    if (targetIndex == -1) {
    	System.out.println("해당 데이터가 없습니다.");
    } else {
    	int[] arrDup = this.arr.clone();
        this.arr = new int[this.arr.length -1];
        
        for (int i = 0; i < targetIndex; i++) {
        	this.arr[i] = arrDup[i];
        }
        for (int i = targetIndex; i < this.arr.length; i++) {
        	this.arr[i] = arrDup[i+1];
        }
    }
}

 

 

 

 

 

 

 

  • 배열에서 중복 값을 제거한 새 배열 생성
int[] arr = {1,5,3,2,2,3,1,4,1,2,3,5};
int[] arrResult = new int[arr.length];
int cnt = 0;

for (int i = 0; i < arr.length; i++) {
	boolean dupFlag = false;
    for (int j = 0; j < cnt; j++) {
    	if (arr[i] == arrResult[j]) {
        	dupFlag = true;
        }
    }
    if (dupFlag == false) {
    	arrResult[cnt++] = arr[i];
    }
}

for (int i = 0; i<cnt; i++) {
	System.out.print(arrResult[i] + " ");
}

 

 

 

 

 

 

 


 

 

 

2. 2차원 배열이란 무엇인가


  • 배열이 한 번 중첩된 경우
  • 즉, 배열의 요소가 배열인 경우
  • 예) {{1,2,3,4,5},{6,7,8,9,10}}
int[][] Number = new int[3][4];     //배열 생성
반응형