본문 바로가기
알고리즘/종만북

선형 자료구조

by sun__ 2020. 2. 7.

<동적 배열>

c++의 vector를 떠올리면 된다. 내부적으론 모두 정적 배열로 구현돼 있다.

 

append()를 할 때 이미 배열이 꽉 차있으면 동적 배열의 크기를 다시 할당해야 한다. 이는 현재 들어있는 원소수에 비례하는 시간이 필요하다.

 

이 부분을 최적화하지 않는다면 동적배열의 자료의 추가/제거 시간은 선형시간이다.

 

하지만 크기를 다시 할당할때 현재 있는 원소수*2로 할당한다면 평균 O(1)에 가능하다.

 

<연결리스트>

일반적인 양방향리스트의 구현

struct listNode{
	int element;
    listNode * next, prev;
}    

 

삭제와 undo - knuth의 dancing link, 조합탐색, UI의 되돌리기에서 쓰임

void deleteNode(listNode* node){
	node->prev->next = node->next;
    node->next->prev = node->prev;
}
void recoverNode(listNode* node){
	node->prev->next = node;
    node->next->prev = node;
}    

'알고리즘 > 종만북' 카테고리의 다른 글

이진 탐색 트리, 트립  (0) 2020.02.10
트리  (0) 2020.02.08
비트마스크  (0) 2020.02.05
MATCHORDER - 출전 순서 정하기 (그리디)  (0) 2020.02.03
QUANTIZE - Quantization (dp, 전처리, 수학)  (0) 2020.02.03