Study
-
[자료구조] 스레드 이진트리 (Thread Binary Tree)Study/자료구조,알고리즘 2022. 9. 17. 17:46
01. What 이진트리의 순회를 위해 queue와 같은 다른 자료구조를 사용하거나, recursive function을 호출하지 않고 순회하기 위해 만들어진 트리 02. Idea 이진트리의 노드가 총 N개일 때, 연결(Link)는 총 2N개 존재할 수 있다. 이 중 루트를 제외한 N-1개의 링크가 존재하고, 나머지 N+1개는 NULL Link(연결이 없는 상태)이다. 스레드 이진트리는 이 NULL Link를 다음 순회 대상을 가리키는 용도로 사용해서 구현한다. 노드의 오른쪽 자식이 없는 경우, 다음 순회 대상을 가리키는 순회 후속자(succeedor)를 가리키도록 해서 구현한다. 단순한 이진트리와 달리 오른쪽 노드가 Thread인지 아닌지를 구분하기 위한 bool 변수가 Node 클래스에 추가된다. 0..
-
[따배씨++] 변수, 상수, 전처리기 등 정리Study/C & C++ 2022. 9. 16. 18:35
C++ 기초를 다시 한 번 빠르게 복습할 겸 [홍정모의 따라하며 배우는 C++] 를 다시 보기로 했다. 초반 내용 정리. 01. 변수 변수 객체를 사용하기 위한 메모리의 주소값을 표현한 것... (일반적인 "변할 수 있는 수" 도 말이 된다. CS적으로 생각해보면 메모리의 주소 표현이 좀 더 맞는 말인듯) L-Valule와 R-Value 나중에 더 심도있게 글을 쓸 예정이지만, L-Value는 변수나 상수 형태로 프로그래머가 메모리에 접근할 수 있는 값, R-Value는 일반적인 방식으로 프로그래머가 접근할 수 없는 값이다. (keyword : 리터럴) int x = 4; x = x + 2 에서, x+2는 L-Value일까 R-Value일까? x+2에서 x는 컴파일러에서 4라는 값으로 대체해주고, 연산을..
-
[열혈 TCP/IP 소켓 프로그래밍] Chapter1. 내용 확인문제Study/Network 2022. 9. 15. 20:25
01. 네트워크 프로그래밍에서 소켓이 담당하는 역할, 소켓이라는 이름이 붙은 이유 물리적으로 연결된 네트워크망에서 두 컴퓨터간 데이터 송수신을 담당하는 소프트웨어적 장치 소켓이라는 이름이 붙은 이유는, 네트워크망에 '연결'하는 역할을 맡기 떄문 02. 서버 프로그램에서 listen()과 accept() 함수의 역할 listen() 을 통해 연결 요청을 받아들일 수 있는 상태가 되고 accept() 를 통해 들어온 연결 요청을 수락해 데이터를 주고받는다. 03. 리눅스에서는 파일 입출력을 소켓 기반 데이터 입출력에서 활용 가능하지만 윈도우는 아닌 이유 리눅스에서는 파일과 소켓을 같은 파일 디스크립터로 관리하지만 윈도우에서는 소켓 핸들과 파일 핸들을 구분하기 떄문 04. 소켓 생성 이후 주소할당이 필요한 이..
-
[C] 버퍼(stdin)에 대한 이해와 scanf의 문제점Study/C & C++ 2022. 9. 14. 21:07
1. 버퍼(stdin)이란? 컴퓨터에 키보드 등으로 값을 입력할 때, 입력이 완료되기 전에 임시적으로 값을 가지고 있는 저장소 stdin은 특히, c언어에서 키보드 입력을 받는 버퍼이다. 2. scanf함수 scanf() 는 인자로 주어진 서식 지정자 (%d, %c, %s)에 따라 stdin에 저장된 값을 두 번째 인자로 주어진 변수에 할당한다. 이 과정에서 버퍼에 남아 있는 값 때문에, 이상 동작할 수 있다. 3. scanf의 문제점 %c로 값을 받아올 때 문제가 발생할 수 있다. #include int main() { int num; char c; printf("숫자를 입력하세요 : "); scanf("%d", &num); printf("문자를 입력하세요 : "); scanf("%c", &c); re..
-
프로그램이 실행되는 과정 (CPU와 Register, RAM의 작동방식)Study/컴퓨터 구조 & 운영체제 2022. 9. 12. 18:44
알아두어야 할 것 CPU - 명령어를 읽고, 연산을 하는 장치 - 명령어를 읽고, 연산한 결과를 어딘가에 저장해야 함 - CPU는 연산 특화 장치이기 때문에 저장할 공간이 매우 부족하다 - 그래서 CPU 내부에 Register라는 저장 공간을 만듬 - 64bit CPU 중 x86-64 Architecture는 8개의 레지스터, ARM64는 31개의 레지스터를 사용함 - 각 레지스터는 64bit (8byte)의 정보를 담을 수 있다. RAM - CPU의 레지스터만으로는 데이터를 감당할 수 없으므로, 휘발성 메모리 RAM을 저장장치로 이용함 - CPU는 RAM에 명령어들을 저장해놓고 연산을 수행할 때 램에서 읽어들여와서 사용한다. - CPU에서 RAM에 접근하는 속도는 생각보다 느린 편 Cache - RAM..