C++기초

C++기초

220414_자료구조_일반 트리(Tree)

*필요 헤더: 링크드 리스트 https://hyrule.tistory.com/45 220407~220411_자료구조_링크드 리스트 구현 (Linked List) #pragma once //경고메시지를 띄우기 위한 헤더 #include /* 자료구조 : 데이터를 관리하는 방법. * 완벽한 자료구조는 없다. 상황마다 적합하고 효율적인 자료구조가 다르다. 그것을 적재적소에 활용하 hyrule.tistory.com //Tree.h /* * 여태까지 우리가 만들어온 자료구조(리스트, 배열 등) = 선형 * 트리는 이와는 다르게 약간 입체적. * 최상단에 루트노드가 존재 -> 나뭇가지처럼 루트노드로부터 뻗어나감 * 규칙성있게 트리 형태를 만들어가는 여러 자료구조가 있다. (이진트리, 쿼드트리, 옥트리 등) * 물론..

C++기초

220413_자료구조_배열형 큐(써클 큐, Circle Queue) 구현 및 실행

//QueueArray.h #pragma once #include /* * 일반적인 배열로 큐를 만들어버리면 매우 비효율적이다. 큐는 앞에서 데이터를 꺼내고 뒤에 넣는 형식이기 때문에 계속 데이터의 시작점이 뒤로 밀리기 때문이다. --> 그래서 배열로 큐를 만들 때는 '써클 큐' 방식으로 만든다. * 구현 방법: '헤드'와 '테일'을 만들어서 사용한다. 데이터를 꺼낼 때는 헤드에서 꺼낸 뒤 헤드를 뒤로 한 칸 밀고, 데이터를 넣을 때는 테일에 넣은 뒤 테일을 뒤로 한 칸 민다. * 배열의 끝에 갔을 경우, 다시 앞으로 되돌아 올 수 있어야 한다. 예를 들어 크기가 6인 배열일 경우, 6번째 칸(인덱스 5)에 다다르면 다시 0으로 돌아가야 한다 --> 구현 방법 : 나머지 연산자(%) -> 6 나머지는 1..

C++기초

220413_자료구조_리스트형 큐 구현 및 실행

//Queue.h #pragma once #include /* * 큐: 선입 선출(FIFO), 선착순 - 정말 다양한 방식으로 구현이 가능하다. - 리스트 기반의 구현 방식, 배열 기반의 구현 방식을 베이스로 - 양방향으로 추가 가능한 큐라던지, 배열 기반의 큐인데, 한정된 배열 공간을 재활용해가며 사용할 수 있는 써클 큐라던지로 사용이 가능하다. */ //노드는 스택에서 구현했던 방식과 동일하다. template class CQueueNode { template friend class CQueue; private: CQueueNode() : m_Next(nullptr) { } ~CQueueNode() { } private: Tm_Data; CQueueNode* m_Next; }; //큐는 스택보다 변수..

C++기초

220412_자료구조_배열형 스택 구현 및 실행

//StackArray.h //배열형 스택은 데이터를 삭제할 때 배열 안의 내용을 지울 필요 없이 인덱스만 변경하면 끝이다. //-> 삭제 속도가 리스트형 스택보다 빠르다. #pragma once template class CStackArray { public: CStackArray() { //현재 사용중인 배열 수 m_Size = 0; //최대 용량 m_Capacity = 4; //최대 용량에 맞게 배열 동적 할당 m_Array = new T[m_Capacity]; } ~CStackArray() { //배열 제거 delete[] m_Array; } private: T* m_Array; int m_Size; int m_Capacity; public: //꽉 찼는지 bool full() { return m..

C++기초

220412_자료구조_리스트형 스택(Stack) 구현 및 실행

//Stack.h #pragma once #include /* * FILO(선입 후출): 먼저 들어온 데이터가 나중에 나간다. -> 물건을 통에 차곡차곡 담는다고 생각하면 될듯. 꺼낼때는 당연히 맨 위의 물건부터 꺼내야 한다. 메모리의 스택도 비슷한 느낌이다. 메모리 전체가 통으로 있으면, 메모리의 뒤쪽 부분에 스택 영역을 할당한다. * 활용처 - 데이터 뒤집기: 그냥 스택에 데이터를 넣었다 빼면 데이터가 뒤집어지므로 - 길찾기 알고리즘 * 구현 방법 - 동적 배열 - 리스트: 싱글 링크드 리스트면 충분하다. 반대로 갈 이유가 전혀없음 -> 맨 마지막 데이터에서부터 순서대로 접근할것이므로 * 이런 것들을 구현할 줄 알아야 하는 이유 - 나중에 멀티스레드를 활용하는 단계에서는, C++의 경우 STL을 사용..

C++기초

220407~220411_자료구조_링크드 리스트 실행 (Linked List)

#include #include #include "LinkedList.h" #define PRINT(string) {std::cout

C++기초

220407~220411_자료구조_링크드 리스트 구현 (Linked List)

#pragma once //경고메시지를 띄우기 위한 헤더 #include /* 자료구조 : 데이터를 관리하는 방법. * 완벽한 자료구조는 없다. 상황마다 적합하고 효율적인 자료구조가 다르다. 그것을 적재적소에 활용하는 것이 중요하다. * 대표적인 자료구조 = 배열, 리스트 일반적으로 이론에서 만드는 자료구조는 실용성이 없다. 특정 자료형만 저장할 수 있기 때문이다. 실전에서 사용하려면 어떤 자료형이던 저장할 수 있게 만드는 것이 중요하다. -> 직전에 오퍼레이터와 템플릿을 배운 이유. * 자료구조는 대부분 STL(Standard Template Library)에 저장되어 있어서, 편하게 가져다 쓸 수 있다. 물론 그 전에 원리를 알아야 하므로 직접 만들어 볼 예정이다. * 링크드리스트 : 데이터를 저장하..

C++기초

220329(2)_이진 파일 입출력(2)_읽기

#include enum class EItemType { Weapon, Armor }; struct ItemInfo { char Name[32]; EItemType Type; int Option; int Price; int Sell; }; int main() { FILE* File = nullptr; fopen_s(&File, "Test.txt", "rb"); if (File) { //3번인자: 기준점을 정한다. //SEEK_END: 파일의 가장 끝 //SEEK_SET: 파일의 시작점 //SEEK_CUR: 현재 파일커서 // //2번인자는 Offset으로, 3번인자에 지정된 지점으로부터 //몇 바이트만큼 떨어진 곳을 커서의 위치로 지정할지를 정한다. //아래는 파일 커서를 가장 끝으로 보낸다. fseek..

C++기초

220329(1)_이진 파일 입출력(1)_쓰기

#include enum class EItemType { Weapon, Armor }; struct ItemInfo { char Name[32]; EItemType Type; int Option; int Price; int Sell; }; int main() { FILE* File = nullptr; fopen_s(&File, "Test.txt", "rb"); if (File) { //3번인자: 기준점을 정한다. //SEEK_END: 파일의 가장 끝 //SEEK_SET: 파일의 시작점 //SEEK_CUR: 현재 파일커서 // //2번인자는 Offset으로, 3번인자에 지정된 지점으로부터 //몇 바이트만큼 떨어진 곳을 커서의 위치로 지정할지를 정한다. //아래는 파일 커서를 가장 끝으로 보낸다. fseek..

C++기초

220328(2)_파일 입출력(2)_파일 읽기

#include int main() { FILE* File = nullptr; fopen_s(&File, "Text.txt", ""); if (File) { char Line[256] = {}; //문자열을 읽어온다. 한줄을 읽어오는 기능인데 //개행문자까지 읽어오게 되는 것이다. fgets(Line, 256, File); std::cout

C++기초

220328(1)_파일 입출력(1)_ 파일 쓰기

#include //fopen_s() //이중 포인터를 인자로 받는다. /* * 이중 포인터를 인자로 받는 이유 결과를 반환타입을 정해서 return 을 이용하여 반환하는 형태를 Call By Value라고 한다. 포인터를 이용해서 결과를 반환하는 형태를 Call By Address라고 한다. 레퍼런스를 이용해서 결과를 반환하는 형태를 Call By Reference 라고 한다. 크게 이 세 가지 형태로 함수가 구성된다고 볼 수 있는데 */ //이중 포인터는 Call By Address 형태이다. void Alloc(int** Memory) { *Memory = new int; } int main() { //파일 입출력은 c언어 스타일과 c++ 스타일이 있다. //선생님은 c언어 스타일을 선호 //둘 중..

C++기초

220325(4)_memset, memcpy

#include int main() { //memset : 메모리를 내가 원하는 크기만큼 원하는 값으로 //채워주고자 할 때 사용한다. //**단, 1바이트 단위로 값을 채워준다.** int NumberArray[10] = { 1,2,3,4,5 }; //1번인자 : 메모리 주소 //2번인자 : 채워줄 값 //3번인자 : 채워줄 메모리 크기 memset(NumberArray, 1, sizeof(int) * 10); //NumberArray 배열을 4*10(40byte)만큼 1로 채워라. //이상한 값이 출력된다 //왜냐하면 int는 4byte 단위로 숫자를 읽는데, //memset은 1바이트 단위로 1을 넣기 때문이다. //선생님은 일반적으로 배열을 0으로 초기화하는데 쓴다고 함 //memcpy : 메모리..

hyrule
'C++기초' 카테고리의 글 목록 (2 Page)