반응형

언어 자료구조 알고리즘/Escort 자료구조와 STL 18

[자료구조와 STL] 18. list 만들기 – 더미 노드없는 이중 연결 리스트 소스 코드

//EHList.h – 더미노드가 없는 이중 연결 리스트 #pragma once namespace EHLIB {     templatetypename T>     class list     {         struct node         {             node *prev; //이전 노드의 위치 정보             node *next; //다음 노드의 위치 정보             T data; //노드에 보관된 요소             node(T data=0):data(data) //초기화             {                 prev = next = 0;    ..

[자료구조와 STL] 17. list 만들기 – 더미 노드없는 이중 연결 리스트

3. 2 list 만들기 – 더미 노드없는 이중 연결 리스트 이번에는 더미노드가 없는 이중 연결 리스트를 만들어 봅시다. 더미노드가 없는 이중 연결 리스트에도 node의 정의나 iterator의 정의는 차이가 없습니다. 여기에서는 차이가 있는 부분만 언급하겠습니다. 먼저, list를 생성했을 때의 초기 모습이 다를 것입니다. [그림 12] 더미노드 없는 이중 연결 리스트 초기화 모습 list(){ head = tail = 0; bsize = 0;} 생성자 메서드 외에 차이가 있는 부분은 노드를 매다는 hang_node와 노드의 연결을 끊는 dehang_hode와 시작 iterator를 반환하는 begin, 마지막 iterator를 반환하는 end가 있습니다. hang_node 메서드에서는 보관된 자료가 ..

[자료구조와 STL] 16. list 만들기 – 더미 노드있는 이중 연결 리스트 테스트

작성한 list가 정상적으로 동작하는지 확인해 봅시다. 앞에서 얘기한 것처럼 list를 사용하는 방법은 vector와 매우 유사합니다. 단지, vector에서는 인덱스 연산을 이용할 수 있었지만 list에서는 사용하지 못하는 정도의 차이라고 보시면 됩니다. vector를 이용하여 차례대로 요소를 보관하는 프로그램이나 vecor를 이용하여 특정 키순으로 보관했던 응용 프로그램 코드에서 vector를 list로 교체하더라도 정상적으로 동작합니다. //typedef vector StuCollection;typedef list StuCollection; 이러한 이유로 우리가 만든 list가 정상적으로 동작하는지 확인하기 위해 vector에서 만든 프로젝트 조금 수정하여 테스트할 수 있습니다. 기존 프로젝트에 작..

[자료구조와 STL] 14. list 만들기 – 더미 노드있는 이중 연결 리스트

3. 1 list 만들기 – 더미 노드있는 이중 연결 리스트 먼저, 프로젝트를 만들어 앞에서 만든 파일들을 추가하는 것부터 하세요. 그리고 EHList.h를 추가합시다. EHList.h에는 템플릿 클래스인 list를 정의할 것입니다. 우리가 만들 list도 EHLIB 이름 공간 내에 정의할게요. #pragma oncenamespace EHLIB{ template class list { };}; list 클래스 내부에는 node 형식이 정의해야 합니다. 그리고 node의 멤버로는 보관할 요소와 다른 노드의 위치 정보가 있어야 할 것입니다. 여기에서는 이중 연결리스트로 만들 것이기 때문에 두 개의 링크를 캡슐화할게요. templateclass list{ struct node { node *prev; //이전..

[자료구조와 STL] 13. list (연결리스트)

3. list (연결리스트) STL에서 제공하는 선형 컨테이너에는 vector 와 list가 있는데 연결 리스트를 표현한 것입니다. 연결 리스트는 노드들의 선형 집합이며 노드는 데이터와 링크의 조합입니다. 연결 리스트는 자료를 보관할 때마다 별도의 노드를 생성하여 하나의 노드에 하나의 자료를 보관하며 노드의 링크를 통해 노드들이 서로의 위치를 선형적으로 유지하는 자료구조입니다. [그림 7] 연결 리스트 구조 연결 리스트는 링크의 개수에 따라 하나만 있는 단일(혹은 단순)연결 리스트, 두 개가 있는 이중 연결 리스트로 나눌 수 있습니다. 그리고 마지막 노드가 시작 노드의 위치 정보를 알고 있게 링크를 설정하는 연결 리스트를 원형 연결 리스트라 합니다. 이처럼 링크의 개수나 유형에 따라 연결 리스트를 구분하..

[자료구조와 STL] 12. find , find_if 만들어보기

2. 5 find , find_if 만들어보기 STL의 algorithm에서는 일반적으로 사용할 수 있는 다양한 함수들을 제공하고 있습니다. 이 중에 여기에서는 find와 find_if를 만들어 봅시다. find에서는 특정 구간 사이에 호출자가 원하는 자료가 보관된 위치를 찾는 함수입니다. 즉, 첫 번째 입력 인자와 두 번째 입력 인자는 보관된 위치가 될 수 있고 세 번째 인자가 보관된 형식과 같습니다. 또한, 컬렉션 종류에 상관없이 사용할 수 있게 만들기 위해 템플릿 형태로 만들기로 합시다. 반환 형식은 세 번째 인자와 같은 값이 보관된 위치를 반환하는 것이기 때문에 앞의 두 인자와 형식이 같겠지요. 구현은 단순히 차례대로 비교하여 같은 값이 보관된 위치를 반환하면 될 것입니다. #pragma once..

[자료구조와 STL] 10. vector 만들기

2. 4 vector 만들기 먼저, 앞에서 만든 프로젝트에 EHVector.h를 추가하여 STL에서 제공되는 vector와 비슷하게 직접 만들어 보기로 합시다. 이를 만드는 목적은 vector 내부를 좀 더 명확하게 이해하기 위해서입니다. EHVecotr.h에는 템플릿 클래스인 vector를 정의할 것입니다. 여기서는 EHLIB 이름 공간 내에 정의할게요. #pragma oncenamespace EHLIB{ template class vector{ };}; 이제 StuManager.h에 vector 대신 "EHVector.h"를 포함하는 구문으로 변경하고 std 이름 공간에 있는 vector 대신 EHLIB 이름 공간에 있는 vector를 사용하도록 바꾸세요. #include "EHVector.h"usi..

[자료구조와 STL] 9.vector를 이용하여 특정 키 순으로 보관하기 예제 코드

vector를 이용하여 특정 키 순으로 보관하기 예제 코드 //EHGlobal.cpp #include "ehglobal.h" void ehglobal::clrscr()//화면을 지우는 메서드 { system("cls"); } void ehglobal::timeflow(int millisecond) //원하는 시간동안 지연시키는 메서드 { Sleep(millisecond); } int ehglobal::getnum()//정수를 입력받는 메서드 { int num; char buf[255+1]; cin.getline(buf,255); //버퍼에 입력받음 cin.clear();//cin 내부 버퍼를 지움 sscanf(buf,"%d",&num); //포맷에 맞게 버퍼에 내용을 정수로 변환 return num; }..

반응형