list 3

[자료구조] std::list

std::forward_list개요 앞선 자료구조 포스트의 std::forward_list는 아주 기본적인 형태로 구현된 연결리스트다. 따라서 리스트 끝에 원소를 추가하거나, 역방향으로 이동하는 기초 기능 외에는 지원하지 않는다. 따라서 C++에서는 이러한 단점을 보완하기 위해 양방향 연결 리스트(doubly-linked list) std::list를 제공한다. 이를 사용하기 위해선 헤더파일을 임포트 해야 한다.구조 연속된 자료 구조와 연결된 자료구조 (2) with C++에서 그림을 하나 가져와보자.   보면 알겠지만, 노드끼리 서로 연결되어 있기 때문에 이전 노드를 가리키는 포인터, 다음 노드를 가리키는 포인터, 해당 노드에 있는 데이터를 갖고 있다. 간략하게 형태를 코드로 파악하자면 다음과 같다...

CS/자료구조 2023.03.31

[자료구조] std::forward_list

std::forward_list개요 앞서 포스팅한 std::vector, std::array같은 연속된 자료 구조에서는 데이터를 임의로 추가하거나 삭제하는 작업이 매우 비효율적이다. vector 자료 구조에서 insert() 함수와 erase() 함수를 예로 들어보자. insert() 함수를 통해 데이터를 삽입하려 하면 지정한 반복자 위치 다음의 모든 원소를 이동시키는 연산이 필요하고, erase() 함수도 특정 위치의 원소를 삭제한 후, 뒤쪽의 원소들을 모두 앞으로 이동해야 한다. 따라서 연결 리스트와 같은 연결된 자료 구조가 필요한 것이다.  기본적인 연결 리스트를 구성하기 위해서는 포인터가 필요하고, new와 delete 연산자를 이용하여 메모리를 할당하고 해제할 수 있어야 한다. C++에서는 기본..

CS/자료구조 2023.02.20

[자료구조] 연속된 자료 구조와 연결된 자료구조 (2) with C++

연결된 자료 구조 앞선 시간에서 선형 자료 구조 중 연속된 자료 구조를 알아보았다. 이번 시간에는 여러 개의 메모리 청크인 노드(Node)에 데이터를 저장하는 연결된(Linked) 자료 구조를 연결된 자료 구조의 대표격인 연결 리스트를 통해 알아보자. 노드(Node): 연결 지점  연결 리스트(Linked list)란 각각의 노드가 저장할 데이터와 다음 노드를 가리키는 포인터를 갖고 있는 자료 구조를 의미한다. 이때 노드가 한 쪽 방향으로만 탐색이 가능한 것을 단일(Singly) 연결 리스트라고 하고, 앞 뒤 방향 모두 탐색이 가능한 것을 양방향(Doubly) 연결 리스트라고 한다. 이러한 연결 리스트를 그림으로 표현하면 다음과 같다.  이러한 개념에 착안하여 한 번 코드로 연결 리스트를 구현해보겠다. ..

CS/자료구조 2023.01.29