반응형

언어 자료구조 알고리즘 1251

3.2.3 list 사용 [디딤돌 자료구조와 알고리즘 with C++]

3.2.3 list 사용 STL의 list 사용 방법은 vector를 사용하는 방법과 매우 유사합니다. 차이가 있는 부분은 vector에서는 자료를 보관하는 저장소가 연속적인 메모리에 있어서 인덱스 연산을 제공하지만 list에는 제공하지 않는다는 점 정도입니다. 물론 vector에서 저장소의 크기를 확인할 때 사용하는 capacity 메서드나 저장소의 크기를 설정하는 reserve 메서드도 없습니다. 하지만 이 외에 대부분의 사용방법은 같습니다. 3.1.2 와 3.1.4에서 vector를 사용하는 코드에서 포함할 파일명과 타입 재지정하기 위한 typedef문에 vector만 list로 변경하면 아무런 컴파일 오류도 없으며 실행도 똑같이 동작합니다. //#include #include #include //..

3.2.2 이중 연결리스트 만들기 [디딤돌 자료구조와 알고리즘 with C++]

3.2.2 이중 연결리스트 만들기 이번에는 노드에 링크가 두 개 있는 이중 연결리스트를 만듭시다. 그리고 연결리스트의 head와 tail이 가리키는 노드를 초기에 만들기로 할게요. 링크가 두 개 있으면 이전 노드의 위치 정보를 갖고 있으므로 삭제나 추가할 때 이전 노드의 위치를 기억하는 변수를 별도로 선언할 필요가 없습니다. 그리고 연결리스트 초기화 과정에서 head와 tail이 가리키는 각 노드를 초기에 만들면 자료를 보관하는 노드를 맨 앞이나 맨 뒤에 보관하지 않아 연산을 단순하게 표현할 수 있습니다. 이 부분은 실제 구현하면서 설명하기로 할게요. 참고로 자료를 보관할 목적이 아닌 연결리스트를 운영하기 쉽게 생성한 노드를 더미 노드(Dummy Node)라 부릅니다. 여기서 만들 이중 연결리스트는 he..

3.2.1 단순 연결리스트 만들기 [디딤돌 자료구조와 알고리즘 with C++]

3.2.1 단순 연결리스트 만들기 이번에는 간단하게 단순(단일) 연결리스트를 만들어 보아요. 여기에서 만드는 단순 연결리스트는 개념을 잡기 위해 만드는 것으로 노드에 보관할 자료 형식을 정수로 한정할게요. 뒤에서 STL을 모델로 list를 만들 때 어떠한 자료 형식도 보관할 수 있게 만들거예요. 제공할 기능은 생성자, 해제화, 맨 뒤에 보관, 맨 앞에 보관, 원하는 위치에 보관, 탐색 가능한 반복자 제공, 데이터 제거, 데이터 보관 유무 확인, 전체 보기 기능입니다. 단순 연결리스트를 정의할 클래스 이름을 SimpleLinkedList라 정합시다. class SimpleLinkedList { 단순 연결리스트의 노드는 데이터와 다음 노드의 위치 정보를 기억하는 링크로 구성합니다. 노드는 연결리스트에서 접근..

3.2 연결리스트와 list [디딤돌 자료구조와 알고리즘 with C++]

3.2 연결리스트와 list 연결리스트는 보관하는 자료마다 별도의 노드에 보관하며 노드에 링크를 이용해 논리적으로 선형을 유지하는 자료구조입니다. 따라서 연결리스트를 노드의 선형 집합이라고 말합니다. 배열은 자료를 보관하는 메모리가 연속적인 형태를 지녀 순차리스트라 부르는 순차 자료구조입니다. 이에 반해 연결리스트는 자료 하나를 보관하는 노드마다 별도의 메모리를 할당하여 실제 메모리는 불연속적인 형태입니다. 따라서 연결리스트는 순차 자료구조가 아닙니다. 하지만 노드는 자료와 링크로 구성하는데 링크를 통해 연결리스트를 구성하는 노드들의 논리적인 구조를 선형의 모습으로 표현할 수 있습니다. 이러한 이유로 연결리스트를 선형 자료구조라 말하는 것입니다. 링크는 노드의 위치 정보를 말하며 노드에 링크가 하나인 연..

3.1.5 vector를 인덱스 연산으로 사용 [디딤돌 자료구조와 알고리즘 with C++]

3.1.5 vector를 인덱스 연산으로 사용 vector는 확장 가능한 배열로 연속적인 메모리에 자료를 보관하는 자료구조입니다. 연속적인 메모리에 자료를 보관하기 때문에 메모리의 시작 위치에서 상대적 거리를 통해 원하는 요소를 접근하게 프로그래밍하면 접근 비용이 거의 들지 않습니다. 프로그래밍 언어에서 제공하는 배열은 거의 모두 인덱스 연산을 사용하여 배열의 원소에 접근하는 것을 제공하고 있습니다. STL의 vector에서도 인덱스 연산을 제공합니다. 주의할 점은 vector에는 저장소의 크기와 보관한 자료 개수를 기억하는 멤버가 있는데 인덱스 연산으로 사용할 때는 0에서 보관한 자료 개수 -1 까지 사용할 수 있어요. 따라서 보관한 자료에 접근하거나 변경할 때만 사용할 수 있다는 것입니다. 따라서 S..

3.1.4 vector에 특정 키 순으로 보관 [디딤돌 자료구조와 알고리즘 with C++]

3.1.4 vector에 특정 키 순으로 보관 이번에는 vector에 특정 키 순으로 보관하는 프로그램을 작성해 봅시다. 작성할 프로그램은 앞에서 작성한 프로그램과 같습니다. 다시 한 번 확인하기로 해요. 작성할 프로그램은 장르 관리 프로그램입니다. 장르에는 장르 번호와 장르명이 있습니다. 장르 번호와 장르명은 사용자에게 입력받습니다. 장르 번호와 장르명으로 삭제할 수 있고 검색할 수 있습니다. 그리고 모든 장르 목록을 확인할 수 있습니다. 제공할 기능을 살펴보면 장르 추가, 장르 번호로 장르 삭제, 장르명으로 장르 삭제, 장르 번호로 검색, 장르명으로 검색, 모든 장르 목록 확인이 있어요. 특정 키 순으로 보관하면 전체 목록을 확인할 때 원하는 키 순서로 보여줄 수 있어서 사용자 편의성이 높아집니다. ..

3.1.2 vector에 순차적으로 보관 [디딤돌 자료구조와 알고리즘 with C++]

3.1.2 vector에 순차적으로 보관 작성할 프로그램은 장르 관리 프로그램입니다. 장르에는 장르 번호와 장르명이 있습니다. 장르 번호는 순차적으로 부여하며 장르명은 사용자에게 입력받습니다. 장르 번호와 장르명으로 삭제할 수 있고 검색할 수 있습니다. 그리고 모든 장르 목록을 확인할 수 있습니다. 제공할 기능을 살펴보면 장르 추가, 장르 번호로 장르 삭제, 장르명으로 장르 삭제, 장르 번호로 검색, 장르명으로 검색, 모든 장르 목록 확인이 있어요. vector에 순차적으로 보관할 때는 push_back 메서드를 사용하세요. 원하는 자료를 찾을 때는 반복자를 이용하여 찾거나 find, find_if 알고리즘을 이용하여 찾습니다. 삭제할 때는 자료가 있는 위치를 찾아 erase 메서드를 사용하세요. 모든 ..

3.1.1 이 책에서 공통으로 사용하는 것들 [디딤돌 자료구조와 알고리즘 with C++]

3.1.1 이 책에서 공통으로 사용하는 것들 앞으로 이 책에서 사용할 클래스 ehglobal을 소개를 하겠습니다. ehglobal 클래스에는 이 책에 소개되는 전반적인 예제 프로그램에서 공통으로 사용할 만한 함수들을 정적 멤버 메서드로 캡슐화되어 있습니다. 이 책에 공통으로 사용 가능한 것들에 대한 정의에서는 형식 명과 메서드 명 모두 소문자만을 사용하고 있습니다. class ehglobal { public: 콘솔 화면을 지우는 메서드를 제공합시다. static void clrscr();//화면을 지우는 메서드 시간을 지연시키는 메서드도 제공합시다. static void timeflow(int millisecond); //원하는 시간동안 지연시키는 메서드 정수를 입력받는 메서드도 제공합시다. static..

3.1 배열과 vector [디딤돌 자료구조와 알고리즘 with C++]

3.1 배열과 vector 배열은 같은 종류의 자료를 연속적인 메모리에 보관하는 자료구조예요. C언어와 C++언어에서 제공하는 배열 형식은 개발 단계에서 원소 형식과 원소의 개수를 결정하는 정적인 구조를 갖고 있죠. 이러한 배열은 개발 도중에 원소의 개수를 변경할 수 없는 한계를 갖고 있어요. 하지만 C언어와 C++언어에서도 동적으로 메모리를 할당하는 함수와 연산을 제공하여 프로그램 동작 시에 연속적인 메모리를 할당하여 자료를 관리할 수 있어요. 특히 할당한 메모리에 보관한 자료의 개수를 기억해 두었다가 꽉 차면 메모리를 재할당하여 개발자가 배열의 크기를 신경쓰지 않게 구현할 수도 있어요. STL에서 제공하는 vector는 이러한 원리로 동작하게 만든 템플릿 클래스예요. 여기에서는 STL에서 제공하는 v..

3. 선형 자료구조 [디딤돌 자료구조와 알고리즘 with C++]

3. 선형 자료구조 자료를 선형으로 보관하는 자료 구조에는 배열, 연결리스트, 스택, 큐, 덱 등이 있어요. 이와 같은 자료구조에 자료를 보관하거나 삭제, 검색 등의 연산을 수행할 때 반복적인 방법으로 해결할 때가 많아요. 배열은 자료를 연속적인 메모리에 보관하는 자료구조예요. 순차리스트라고도 부르죠. 연결리스트는 하나의 자료를 보관하는 노드들을 선형으로 그릴 수 있어요. 실제 메모리는 순차적이지 않지만 논리적으로 선형으로 나타낼 수 있어요. 연결리스트를 구성하는 노드는 하나의 데이터와 링크의 조합이예요. 링크는 노드의 위치 정보로 노드에 하나의 링크가 있으면 단순 혹은 단일 연결리스트라 부르고 두 개 있으면 이중 연결리스트라 불라요. 특히 배열은 프로그래밍 언어에서 제공하는 형식 배열만 있는 것이 아니..

반응형