본문 바로가기

Data Structures and Algorithms

(4)
0.3.2. C 언어로 메모리를 다루는 방법 (구조체) c 언어에서 구조체(Structure)는 다른 데이터 형식을 조합해서 만드는 사용자 정의 데이터 형식이다. C 언어에서 struct 키워드를 이용해서 x와 y를 담는 Point 구조체를 선언할 수 있다. struct Point { INT x; INT y; } Point와 같은 구조체 형식은 인스턴스를 선언할 때도 Struct 키워드를 명시해야 한다. struct Point MyPoint = { 30, 40, }; // x는 30, y는 40으로 초기화 printf("x : %d, y : %d\n", MyPoint.x, MyPoint.y); // "x : 30, y : 40" 출력 위와 같이 Point의 멤버 변수 x와 y에 접근할 때 접근 연산자 .을 사용한다. 이 연산자의 이름은 멤버 접근 연산자(Me..
0.3.1. C 언어로 메모리를 다루는 방법 (포인터) C언어로 자료구조와 알고리즘을 다루는 데 필수적인 포인터, 구조체, 메모리 레이아웃, 스택, 힙을 설명한다. ※ 포인터 포인터는 변수이다. 값을 저장하는 일반 변수와 달리 메모리 주소를 저장한다는 점이 다를 뿐이다. 데이터 형식* 포인터 INT 형식 메모리 주소를 저장하는 포인터는 다음과 같이 선언한다. INT* PTR 다음과 같이 포인터에 주소값을 할당할 수 있다. INT* PTR = 0xFF000000 주소 연산자 &를 이용해서 다른 변수의 주소를 할당할 수 도 있다. INT A = 123; INT* PTR = &A; C언어에서는 포인터에 증감 연산자를 사용할 수 있다. 예로 INT 형식이 32비트(4바이트)인 시스템에서 기반 데이터 형식이 INT인 포인터에 ++ 연산자를 적용하면 주소값이 32비트 ..
0.2. 알고리즘 알고리즘은 9세기 페르시아 수학자 알 콰리즈미의 이름에서 유래된 말로 어떤 문제를 풀기 위한 단계적 절차를 뜻한다. 알고리즘을 설계한다는 것은 문제 풀이 절차를 설계한다는 것이고, 알고리즘을 구현한다는 것은 프로그래밍 언어를 이용해서 문제 풀이 절차를 실제로 동작하는 코드로 작성한다는 의미이다. 입력 문제를 풀기 위한 단계적 절차 (알고리즘) 출력 세상에 다양한 문제가 존재하듯 문제를 풀 때 사용할 수 있는 알고리즘 또한 다양하다. 그 중 고전이라 불릴 수 있는 것은 자주 사용하는 정렬, 탐색, 해싱 등이 그 예이다. 알고리즘을 공부한다는 것은 어떤 문제를 분석해서 컴퓨터가 알아들을 수 있는 형태로 해법을 설계하고 구현하는 과정을 익힌다는 의미이다. 알고리즘 학습은 단순히 문제 풀이 요령을 익히는 것이 ..
0.1 자료구조 자료구조(Data Structure)는 아래와 같은 특징을 갖는다. 컴퓨터가 데이터를 효율적으로 다룰 수 있게 도와주는 데이터 보관 방법 컴퓨터가 데이터를 효율적으로 다룰 수 있게 도와주는 데이터에 관한 연산의 총체 우리가 흔히 알고 있는 INT는 32비트의 메모리 공간 안에 수를 할당하고 첫 비트를 부호 표현에 사용하는 등의 '보관 방법'을 정의하고 있고, 덧셈/뺄셈/나눗셈/곱셈/논리/시프트 등 다양한 '연산' 또한 정의하고 있다. 자료구조는 아래와 같이 단순 자료구조(Primitive Data Structure)와 복합 자료구조(Non-Primitive Data Structre)로 나뉜다. 단순 자료 구조는 이전의 INT와 같은 통상적으로 제공하는 기본 데이터 형식을 말한다. 자료구조 단순 자료구조(..