벡터(vector)와 리스트(list), 시퀀스(sequence) ADT의 차이를 알아봅시다.
정의
벡터는 array list라고도 불리는 자료구조입니다. 벡터는 인덱스를 통해 자료에 접근하며, 접근 시 잘못된 인덱스가 주어지면 예외를 throw합니다.
vector adt
// stl interface와 다름
at(int idx)
//인덱스 idx의 위치에 있는 요소를 지우지 않은 채 반환합니다
set(int idx, object o)
//인덱스 idx에 있는 요소를 o로 대체합니다
insert(int idx, object o)
//인덱스 idx에 새로운 객체 o를 삽입합니다
erase(int inx)
//인덱스 idx에 있는 요소를 지웁니다
//여기까지 필수로 구현되어야 하는 기능들
size()
//벡터의 사이즈 반환
empty()
//비어있으면 true, 비어있지 않으면 false 반환
//보조 기능들
insert, erase = O(n)
other operations = O(1)
정의
리스트는 벡터와 달리 position 정보를 가지고 요소에 접근하는 자료구조입니다. 이때 position이란 해당 객체의 위치를 가르키는 개념으로, c++에서는 pointer로 이를 구현할 수 있습니다. 리스트에서는 인덱스가 아닌 특정 position과 그 전후관계로 요소에 접근하기 때문에, node list라고도 불립니다.
List adt
// stl interface와 다름
insertFront(element)
//리스트 맨 앞에 새로운 요소 삽입
insertBack(element)
//리스트 맨 뒤에 새로운 요소 삽입
removeFront()
//맨 앞에 있던 요소 삭제
removeBack()
//맨 뒤에 있던 요소 삭제
size()
//요소들의 개수 반환
empty()
//비어있으면 true, 비어있지 않으면 false
insert(p, e)
//position p 이후에 새로운 요소 e 삽입
remove(p)
//position p에 있던 요소 삭제
begin()
//iterator
end()
//iterator
All operations = O(1)
정의
시퀀스는 벡터와 리스트의 확장이라고 할 수 있습니다. 시퀀스에서는 index와 position을 통한 탐색이 모두 가능합니다.
Sequence adt
// stl interface와 다름
elemAtIdx(i)
//인덱스 i에 있는 요소를 반환
replaceAtIdx(i, o)
//인덱스 i에 있는 값을 o로 바꿈
insertAtIdx(i, o)
//인덱스 i에 새로운 요소 o를 삽입
removeAtIdx(i)
//인덱스 i에 있던 값을 지움
first()
//iterator
last()
//iterator
replaceElem(p, o)
//position p에 있던 값을 o로 바꿈
swapElem(p, q)
//position p와 q에 있던 값을 서로 바꿈
insertBefore(p, o)
//position p 앞에 새로운 요소 o를 삽입
insertAfter(p, o)
insertFirst(o)
insertLast(o)
remove(p)
//position p에 있던 값을 지움
atIdx(i)
//인덱스 i의 position을 반환
idxOf(p)
//position p의 인덱스를 반환
Data Structures and Algorithms in C++ (2nd, Paperback)을 참고하여 작성된 포스트입니다.