본문 바로가기

ALGORITHM/코딩테스트를 위한 자료구조와 알고리즘 with c++ 정리

(13)
기본적인 사용자 정의 컨테이너 만들기 #include #include struct singly_ll_node { int data; singly_ll_node* next; }; class singly_ll { public: using node = singly_ll_node; using node_ptr = node*; private: node_ptr head; public: void push_front(int val) { auto new_node = new node{ val, NULL }; if (head != NULL) new_node->next = head; head = new_node; } void pop_front() { auto first = head; if (head) { head = head->next; delete first; }..
std::vector 와 std::forward list 비교 std::forward list는 단순 연결리스트를 구현해 놓은 래퍼입니다. 성능이나 메모리를 크게 낭비하지 않으면서 간단하고 에러를 유발하지 않는 인터페이스를 제공합니다. std::vector는 반복자(iterator)를 사용해서 원소의 이동이 앞 뒤로 자유롭지만 단순연결리스트는 그렇지 못하기 때문에 단방향으로만 이동가능합니다. #include #include #include int main() { std::vector vec = { "Lewis Hamilton", "Lewis Hamilton", "Nico Roseberg", "Sebastian Vettel", "Lewis Hamilton", "Sebastian Vettel", "Sebastian Vettel", "Sebastian Vettel", "..
std::vector-가변 크기 배열 벡터를 초기화하는 방법 #include #include int main() { // 크기가 0인 벡터 선언 std::vector vec1; // 지정한 초깃값으로 이루어진 크기가 5인 벡터 선언 std::vector vec2 = { 1,2,3,4,5 }; // 크기가 10인 벡터 선언 std::vector vec3(10); // 크기가 10이고, 모든 원소가 5로 초기화된 벡터 선언 std::vector vec4(10, 5); return 0; } 벡터에 새로운 원소를 추가하려면 push_back() 또는 insert() 함수를 사용합니다. push_back()함수는 벡터의 맨마지막에 새로운 원소를 추가합니다. insert()함수는 삽입할 위치를 나타내는 반복자를 첫 번째 인자로 받음으로써 원하는 위치에..
배열 C++에서는 std::array를 제공합니다. std::array는 메모리를 자동으로 할당하고 해제합니다. std::array는 원소의 타입과 배열 크기를 매개변수로 사용하는 클래스 템플릿입니다. #include #include using namespace std; int main() { array arr1; arr1[0] = 1; cout
단순연결 리스트(singly linked list) 연결된 자료구조는 노드라고 하는 여러 개의 메모리 청크에 데이터를 저장하며, 이 경우 서로 다른 메모리 위치에 데이터가 저장됩니다. 단순 연결리스트 기본 구조 이 그림과 같이 구성된 자료구조를 연결 리스트라고 합니다. 연결 리스트의 기본 구조에서 각각의 노드는 저장할 데이터와 다음 노드를 가리키는 포인터(next)를 가리키고 있습니다. 맨 마지막 노드에서는 다음 노드의 포인터 대신 자료구조의 끝을 나타내는 null을 가집니다. 데이터 접근 시 헤드(head)부분부터 시작하여 원하는 원소에 도달할 때까지 next포인터를 따라 이동해야 합니다. 그러므로 i번째 원소에 접근하려면 연결 리스트 내부를 i번 이동하는 작업이 필요합니다. 원소 접근 시간은 o(n)입니다. 연결 리스트에 새 원소 추가하기 i=1 과 ..