반응형

언어 자료구조 알고리즘 1251

[자료구조와 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; }..

[자료구조와 STL] 8. 3 vector를 이용하여 특정 키 순으로 보관하기

2. 3 vector를 이용하여 특정 키 순으로 보관하기 이번에는 vector를 이용하여 특정 키순으로 보관하는 방법에 대해 살펴보기로 합시다. 삭제나 검색, 전체 보기 등은 차례대로 보관할 때와 같습니다. 단지 보관할 위치를 찾는 논리가 다를 뿐입니다. 특정 키순으로 보관하려면 보관된 시작 위치부터 사용자가 입력한 학생 번호가 더 크거나 같은 위치를 찾아서 해당 위치에 보관해야 할 것입니다. 물론, 같으면 필터링해야겠지요. 이 경우에도 함수 개체만 잘 정의하면 쉽게 사용할 수 있습니다. vector에서 원하는 위치에 보관할 때는 insert 메서드를 사용합니다. insert 메서드를 사용할 때에는 보관할 위치에 해당하는 iterator를 입력 인자로 전달해야 합니다. 그리고 vector 내부에서는 해당..

[자료구조와 STL] 7.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; } stri..

[자료구조와 STL] 5. 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; } strin..

반응형