SMALL

전체 글 101

2-2 MBCS와 WBCS 동시 지원

#include 안에는 * Window 정의 자료형 typedef char -> CHAR; typedef wchar_t -> WCHAR; 프로젝트 별로 네이밍을 달리하기도 해서 적절한 타입의 네이밍을 사용하면 된다. * MBCS와 WBCS 동시 지원 매크로 - 조건부 컴파일을 사용 #ifndef UNICODE typedef WCHAR TCHAR; ... #else typedef CHAR TCHAR; ... #endif #ifndef _UNICODE #define __T(x) L## #else #define __T(x) x #define _T(x) __T(x) #define _TEXT(x) __T(x) * MBCS와 WBCS 동시 지원 함수 #ifdef _UNICODE #define _tmain wmain..

2-1 Windows의 유니코드(UNICODE)

문자셋의 종류와 특성 * SBCS(Single Byte Character Set) - 문자를 표현하는데 1바이트 사용 - 대표적인 예는 ASCII 코드 * MBSC(Multi Byte Character Set) - 문자열을 구성하는 내용에 따라 다른 크기의 바이트 사용 - 예를 들어 한글은 2바이트, 영문은 1바이트 사용 - 문자열에 영어와 한글이 섞여 있을 경우 개발자의 실수 여부가 있음 * WBCS(Wide Byte Character Set) - 문자를 표현하는데 2바이트 사용 - 대표현인 예는 UNICODE - 실수 여부를 해소 WBCS 기반의 프로그래밍 * WBCS를 위한 3가지 1) char를 대신하는 wchar_t 2) "ABC" 를 대신하는 L"ABC" 3) WBCS 기반의 문자열 입출력 함..

1-2. 프로그램의 실행과정/하드웨어 구성의 재접근

프로그램 실행과정 [전처리기] => [컴파일러] => [어셈블러] => [링커] 1) 전처리기에 의한 치환작업 - #으로 시작하는 지시자 2) 컴파일러에 의한 번역 - CPU의 명령어로 번역 3) 어셈블러에 의한 바이너리 코드 생성 - CPU의 명령어를 바이너리 코드로 번역 ex) ADD: 0011, MIN: 0010, MUL: 0100, DIV: 0101 4) 링커에 의한 연결과 결합 - 라이브러리와의 결합 - 실행파일을 만듦 Stored Program Concept : 명령어는 메모리에 저장이 되어 CPU에 의해 Fetch->Decode->Execution 되어야 한다. 1) Fetch - CPU 내부로 (버스 인터페이스를 통해) 명령어 이동 2) Decode - 컨트롤 유닛에 의해 명령어 해석 3)..

1-1. 시스템 프로그래밍의 이해와 접근

※ 한빛미디어에서 출간한 "뇌를 자극하는 윈도우즈 시스템 프로그래밍" 서적의 유튜브 강의를 기반으로 작성 시스템 프로그래밍이란? ◇ 시스템(컴퓨터 시스템)의 범위 - 하드웨어 + 운영체제 ◇ 시스템 프로그래밍 - 컴퓨터 시스템을 활용하는 소프트웨어 개발 - Window 운영제체 자체의 기능을 활용하는 프로그래밍 ◇ 응용 소프트웨어 개발과의 차이점 - 시스템 프로그래밍은 모든 응용 프로그램에 포함되는 요소 컴퓨터 시스템의 주요 구성요소 ◇ CPU, 캐쉬 : 컴퓨터 구조(Compute Architecture) ◇ 메인 메모리, 하드디스크 : 운영체제(Operating System) 컴퓨터 하드웨어 구성(전체) ◇ CPU(Central Processing Unit) - 중앙처리장치 - 연산이 이뤄지는 원리 ◇..

선택/버블 정렬

정렬의 개요 1. 실행 방법에 따른 분류 1) 비교식 정렬과 분산식 정렬 - 비교식 정렬(Comparative Sort) ▪ 비교하고자 하는 각 키 값들을 한번에 두 개씩 비교하여 교환하는 방식으로 정렬을 실행하는 방법 - 분산식 정렬(Distributive Sort) ▪ 키 값을 기준으로 하여 자료를 여러 개의 부분 집합으로 분해하고, 각 부분 집합을 정렬함으로써 전체를 정렬하는 방식으로 실행하는 방법 2. 정렬 장소에 따른 분류 1) 내부 정렬과 외부 정렬 ① 내부 정렬(Internal Sort) ▪ 정렬할 자료를 메인 메모리에 올려서 정렬하는 방식 ▪ 정렬 속도가 빠르지만 정렬할 수 있는 자료의 양이 메인 메모리의 용량에 따라 제한됨 ▪ 내부 정렬 방식 ② 외부 정렬(External Sort) ▪ ..

2-3-4트리

2-3-4 트리 1. 개요 - 2-3-4 트리의 정의 ▪ O(log2N)과 O(log4N) 사이의 탐색 효율을 가짐 ▪ 추가로 4-노드를 정의 - 자식 노드로 가는 링크(Link)가 4개이고 키가 3개인 노드 - 왼쪽 자식(Left Child), 오른쪽 자식(Right Child), 왼쪽 중간 자식(Left Middle Child), 오른쪽 중간 자식(Right Middle Child)으로 구분 - 2-3-4 트리의 노드 구성 2. 2-3-4 트리의 필요성 1) 2-3-4 트리의 장단점 ▪ 높이를 log4N으로 조금 더 낮추기 위함 ▪ 리프 노드 근처의 널 포인터 공간도 2-3 트리에 비해서 더 많아짐 ▪ 필요시 최대 3개의 키를 비교해야 하는 시간적 부담 2) 단일 패스 삽입 ▪ 2-3 트리는 리프 노..

2-3트리

2-3트리 개요 - 2-3트리의 특징 ▪ AVL은 균형 트리를 지향하는 반면 2-3 트리는 완전 균형 트리를 지향함 ▪ AVL 트리에 비해 상대적으로 단순한 논리 ▪ 2-노드 또는 3-노드 모두 가능 ▪ 이진 탐색 트리와 마찬가지로 리프 노드에 삽입 - 삽입 시 높이 변화의 특성 * 2-3트리 ▪ 반복된 삽입에도 2-3 트리의 높이는 좀처럼 증가하지 않음 ▪ 3-노드를 사용해서 최대한 많은 레코드를 높이 변화 없이 수용 * 이진 트리 ▪ 이진 탐색 트리의 높이는 삽입할 때마다 리프 노드 아래로 1만큼 증가 - 여러 가지 방법 ▪ 삽입, 삭제를 위해서는 삽입 대상 노드의 부모 노드를 접근해야 함 ▪ 삽입 시에 중간 키를 올리기 위해서, 또 삭제 시에 부모 노드의 키를 아래로 내리기 위해서 이진 트리는 부모..

생성자 Constructor

기본 생성자 기본 생성자는 반드시 필요하기 때문에 임의적으로 만들지 않으면 컴파일러가 자동으로 생성된다. #include #include using namespace std; class Student { private: string _name; int _age; string _address; int _grade; int _classNum; public: Student() { // 기본 생성자 _age = 0; _address = "주소 없음"; _grade = 0; _classNum = 0; } } int main() { Student a; // 기본 생성자 호출 return 0; } 인자를 받는 생성자를 하나라도 추가하면 컴파일러가 기본 생성자를 자동으로 추가하지 않는다. 따라서 기본 생성자가 없게 되..

카테고리 없음 2022.03.11

균형 탐색 트리(AVL)

AVL 트리의 개요 1. AVL의 균형 1) 균형 인수(Balance Factor) ▪ 트리의 균형을 점검할 때 사용하는 인수 ▪ 노드 마다 오른쪽 서브 트리의 높이에서 왼쪽 서브 트리의 높이를 뺀 것 ▪ AVL 트리에서 균형 인수의 값은 반드시 -1, 0, +1 중 하나임 2) 균형 인수의 점검 ① 왼쪽 트리로부터 노드 K를 삭제하면 균형 인수 중 -2가 생겨 오른쪽 트리처럼 균형이 깨지게 됨 ② 왼쪽 트리에서 노드 F의 오른쪽 자식에 삭제가 가해졌다면 루트 F를 기준으로 오른쪽 서브 트리의 높이가 감소하게 됨 ③ 삭제로 인해 어떤 노드의 균형 인수가 범위를 벗어난 경우 : 균형이 깨진 노드는 삭제 위치의 부모 노드(F)의 왼쪽 자식 노드와 손자 노드까지 가는 길목에 있는 F, D, E 중에 존재하게 ..

히프(heap)

히프 트리 구조 1. 히프의 개요 1) 정의 ▪ 완전 이진 트리에 있는 노드 중에서 키 값이 가장 큰 노드나 키 값이 가장 작은 노드를 찾기 위해서 만든 자료구조 ▪ 최대 히프(Max Heap) - 키 값이 가장 큰 노드를 찾기 위한 완전 이진 트리 - {부모 노드의 키 값 ≥ 자식 노드의 키 값} - 루트 노드: 키 값이 가장 큰 노드 ▪ 최소 히프(Min Heap) - 키 값이 가장 작은 노드를 찾기 위한 완전 이진 트리 - {부모 노드의 키 값 ≤ 자식 노드의 키 값} - 루트 노드: 키 값이 가장 작은 노드 2) 히프 트리 예 3) 히프의 추상 자료형(ADT Heap) ▪ 데이터 : n개의 원소로 구성된 완전 이진 트리 ▪ 각 노드의 키 값은 그의 자식 노드의 키 값보다 크거나 같음 - 부모 노드..

LIST