데이터를 조직하는 방법
자료 구조를 어떻게 조직하냐에 따라 프로그램은 더 빠르거나 느리게 실행될 수 있기 때문에 자료구조가 중요함.
선형 구조 : 리스트, 스택, 큐
비선형 구조 : 그래프, 트리
연산 : 자료 구조 내에서 동작함.
자료구조 구현 방법
알고리즘
알고리즘의 분석
자원을 분석하는 것, 자원을 적게 사용할수록 효율적
알고리즘의 실행 시간은 하드웨어, 소프트웨어의 환경에 따라 달라, 객관적인 지표가 필요함.
이것이 시간 복잡도이다.
시간 복잡도
점근적 표기법
공간 복잡도
프로그래머의 편의성을 위하여 언어에서 제공하는 자료구조와 알고리즘
표준 템플릿 라이브러리
컨테이너 라이브러리 : 임의 타입의 객체를 보관.
반복자 라이브러리 : 컨테이너에 보관된 원소에 접근.
알고리즘 라이브러리 : 반복자를 가지고 일련의 작업을 수행.
순서 리스트라고 하며, 임의 접근이 가능.
연산
읽기 : 임의 접근이 가능하여, O(1)의 시간이 걸림.
검색 : 원소를 각각 비교해가야 하므로, O(n) 의 시간이 소요된다. 정렬되어 있다면 이진 검색을 사용 가능하며, O(log n) 의 시간이 소요된다.
삽입 : 삽입 위치에 따라 시간이 달라짐. 맨끝의 경우 O(1), 처음이나 중간에서는 모든 데이터를 이동해야하므로 O(n) 의 시간이 소요.
삭제 : 삽입과 동일.
연결 자료구조
선형 리스트와 연결 리스트는 모든 자료구조의 토대가 된다.
연산
읽기 : O(n) , 처음과 끝이라면 구현에 따라 O(1)이 될 수 있음.
검색 : O(n) , 선형 리스트와 다르게 이진 검색을 사용할 수 없다.
삽입 : 검색해야 하므로 O(n), 정확한 위치를 알고있다면 O(1).
삭제 : 검색해야 하므로 O(n), 정확한 위치를 알고 있다면 O(1).
이전 원소로도 이동할 수 있다.
원형 연결 리스트(Circular Linked List)
리스트의 일종, 한 쪽 끝에서만 연산이 이루어짐.
괄호가 올바른지 검사, 후위 표기식, DFS 등에 사용됨.
컨테이너 어댑터