전체 글 219

[강의] 12월 13일 수업정리

오늘은 이진 검색 트리 이중 포인터 earse에 대한 수업과 순회에 대한 수업을 들었다. 1.  이진 검색 트리 Earse ( 이중 포인터 완성 )- 다른 코드는 똑같으니 달라진 부분의 코드만 올릴 예정 // bst.h#pragma once#include class C_BST{private: struct S_NODE { int nData; S_NODE* pL; S_NODE* pR; };private: S_NODE* m_pRoot;private: S_NODE** findNode(S_NODE** ppNode, int nData); // 대상을 선택하는 코드 void printNode(S_NODE* pNode); S_NODE* createNode(int nData); S_NODE** findMax(S_..

C++ 2024.12.13

[강의] 12월 12일 수업정리

오늘은 이진 검색 트리 삭제 부분 완성과 2중 포인터를 사용하여 만든 이진 검색 트리에 대한 수업을 들었다. 1. 이진 검색 트리 삭제 ( 3가지 전부 )// bst.h#pragma once#include class C_BST{private: struct S_NODE { int nData; S_NODE* pL; S_NODE* pR; };private: S_NODE* m_pRoot;private: void printNode(S_NODE* pNode); S_NODE* createNode(int nData); S_NODE* insertNode(S_NODE* pNode, int nData); void findMaxNode(S_NODE*& pMin, S_NODE* pUp);public: C_BST() = d..

C++ 2024.12.13

[강의] 12월 11일 수업정리

오늘은 이진 검색 트리에 insert 부분, insert 재귀함수, earse에 대한 부분에 대한 수업을 들었다.  1. 이진 검색 트리 Insert bool C_BST::insert(int nData){ if (!m_pRoot) { m_pRoot = createNode(nData); return true; } bool bCreate{}; S_NODE* pNode = m_pRoot; while (pNode->nData != nData) { if (nData nData) // pL { if (!pNode->pL) { pNode->pL = createNode(nData); bCreate = true; } pNode = pNode->pL; } else if (nData > ..

C++ 2024.12.11

[강의] 12월 10일 수업정리

어제 했던 더미노드에 대한 복습과 이진 검색 트리에 대한 수업을 들었다. 1. 더미노드 복습 // node.h#pragma onceclass C_LIST;class C_NODE{ friend C_LIST;private: int m_nData; C_NODE* m_pPrev; C_NODE* m_pNext;private: C_NODE* linkNode(C_NODE* pNext);public: C_NODE() = default; int getData(); C_NODE* getNext(); void init(int nData);};// node.cpp#include "node.h"C_NODE* C_NODE::linkNode(C_NODE* pNext){ m_pNext = pNext; pNext->m_pP..

C++ 2024.12.10

[예습] 12월 9일 예습

1. 더미 노드 더미 노드란 리스트 맨 앞이나 뒤에 노드를 하나 추가한 것을 말한다. 1.1 더미 노드 특징리스트 맨 앞에 위치하니 head가 항상 더미 노드를 가리키고 있다.데이터는 저장되어 있지 않다.1.2 더미 노드 장점head -> next가 NULL값을 가질지언정 항상 head -> next의 참조가 가능하므로 case를 나누지 않고 일관되게 연산을 구현할 수있다.1.3 구현 // linkedList.h#pragma once#include class C_LINKEDLIST{private: struct S_NODE { int nData; S_NODE* pNext; };private: S_NODE* m_pBegin; S_NODE* m_pEnd;private: S_NODE* createNode(i..

예습 2024.12.09

[강의] 12월 6일 수업정리

오늘은 연결 리스트 이중포인터에 대한 수업을 들었다. 1. 이중 포인터를 이용하여 PushBack 구현// game.h#pragma once#include class C_GAME{private: struct S_NODE { int nData; S_NODE* pNext; };private: S_NODE* createNode(int nData);private: S_NODE* m_pBegin; S_NODE** m_ppEnd;public: C_GAME(); void pushBack(int nData); void print();};// game.cpp#include "game.h"C_GAME::S_NODE* C_GAME::createNode(int nData){ S_NODE* pNode = new S_NODE..

C++ 2024.12.06

[강의] 12월 5일 수업정리

링크드 리스트의 삭제에 대한 부분의 수업을 들었다.[ 주의 사항, 실제로 이런식으로 사용은 하지는 않는다. 그저 공부하는 형식으로 만들어져있다. ][ 어제 만든 코드에서 추가로 진행하므로 추가되는 코드만 적어놓을 예정 ] 1. 중복된 데이터 삭제 void C_LINKEDLIST::remove(int nData){ S_NODE* pNode = m_pBegin; S_NODE* pUP{}; while (pNode) { S_NODE* pNext = pNode->pNext; if (pNode->nData == nData) { S_NODE* pDel = pNode; pUP->pNext = pNext; ..

C++ 2024.12.06

[강의] 12월 4일 수업정리

LinkedList에 대한 수업을 들었다.  1. 연결 리스트 ( LinkedList )1.1 ArrayList와의 차이점 1.1.1 메모리 관리ArrayList: 메모리 크기를 미리 지정하고, 필요 시 배열 크기를 조정한다.LinkedList: 메모리 크기를 미리 정하지 않고, 데이터가 추가될 때마다 동적으로 메모리를 할당한다.1.1.2 구조ArrayList: 연속된 메모리 블록에 데이터를 저장하며, 인덱스를 통해 빠르게 접근 가능하다.LinkedList: 노드로 구성되며, 각 노드는 데이터와 다음 노드를 가리키는 포인터를 포함한다.1.1.3 인덱스 접근ArrayList는 인덱스를 통해 데이터에 직접 접근 가능하다.LinkedList도 특정 구현에서 인덱스를 사용할 수 있지만, 실제로는 순차적으로 노드..

C++ 2024.12.05

[강의] 12월 3일 수업정리

링크드 리스트에 대한 수업을 들었다. 1. 연결 리스트 ( Linked List )1. 연결 리스트연결 리스트, 링크드 리스트는 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다.이름에서 말하듯이 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 당담하게 된다. 2. 연결 리스트 종류 단일 연결 리스트이중 연결 리스트 3. 시간 복잡도 연결 리스트는 늘어선 노드의 중간지점에서도 자료의 추가와 삭제가 O(1)의 시간에 가능하다는 장점을 갖는다.그러나 배열이나 트리 구조와는 달리 특정 위치의 데이터를 검색해 내는데에는 O(n)의 시간이 걸리는 단점도 갖고 있다. 4.  그림 예시 어떤식으로 연결이 되며 어떤식으로 그림..

C++ 2024.12.04