본문 바로가기
기초과목/자료구조

선형 자료 구조

by 지수코딩 2019. 5. 18.

기존 배열

- 처음 배열 선언시, 배열 크기 지정 해야함

- 지정 된 크기 이상으로 할당X

 

==>

동적배열!!(Dynamic Array)

: 자료의 개수가 변함에 따라 크기 변경

- 배열을 이요해 만들어 낸 별도의 자료 구조

 

기존 배열의 특성을 이어 받은 동적 배열

1. 원소들은 메모리의 연속된 위치에 저장됨

2. 주어진 위치의 원소 반환 및 변경 동작 -> O(1)

 

+ 동적배열은

1. 배열 크기 변경 가능 -> 시간은 배열 크기에 비례

2. 배열의 맨 끝에 원소 추가 -> 상수시간

 

동적 배열 구현하기

step1. 새 배열 동적으로 할당받기

step2. 기존 원소들 복사

step3. 새 배열 참조하도록 바꿔치기

 

 

// 용량 꽉 차면 재할당 받기

if(size == capacity)

{

   // 용량 M만큼 늘리고 새 배열 할당받기

   int newCapacity = capacity + M;

   int* newArray = new int[newCapacity];

   

   // 기존 자료 복사

   for(int i = 0; i < size; i++)

      newArray[i] = array[i];

 

   // 기존 배열 삭제 & 새 배열로 바꾸기

   if(array) delete [] array;

   array = newArray;

   capacity = newCapacity;

}

// 배열 끝에 새 원소 삽입

array[size++] = newValue;

 

 

문제점: 배열 원소들의 순서를 유지하면서 임의의 위치에 원소 삽입하거나, 삭제하는 것은 시간이 오래 걸린다.

연결 리스트!!!!!

: 원소들이 메모리 여기저기 흩어져 있고, 각 원소들이 prev,next 원소를 가리키는 포인터 가지고 있다

node(element, *prev, *next)

 

-> 삽입 or 삭제할 노드의 prev, next 포인터만 바꾸면 가능!

 

반응형

댓글