알고리즘/종만북
선형 자료구조
sun__
2020. 2. 7. 18:06
<동적 배열>
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;
}