C언어 기본 입문 - 분기 구조
C언어는 구조화된 프로그래밍 언어로, 여기서 구조는 순차 구조, 선택 구조, 반복 구조를 의미하며, 이는 우리 일상생활에서도 흔히 볼 수 있는 세 가지 구조입니다.
C언어에서는 if, switch를 사용하여 분기 구조를 구현하고, for, while, do while을 사용하여 반복 구조를 구현할 수 있습니다. 이 글에서는 분기 구조에 대해 학습합니다.
1. if 문
1.1 if
if 문의 기본 ...
7월 16일 02:33에 게시됨
그래프 구현 및 핵심 알고리즘 탐구: 인접 행렬과 인접 리스트
그래프 자료구조의 기본 개념과 주요 알고리즘
그래프는 노드(정점)와 이 노드를 연결하는 간선(에지 또는 아크)으로 구성된 자료구조입니다. 컴퓨터 과학에서 다양한 시스템, 네트워크, 관계 등을 모델링하는 데 활용됩니다. 이 글에서는 그래프의 기본적인 개념부터 주요 표현 방식, 그리고 BFS, DFS, 최단 경로, 위상 정렬 등 핵심 알고리즘들을 C 언어 기반으로 살펴보 ...
7월 15일 22:01에 게시됨
Redis 5.0.7 소스 분석 - 정수 집합 구현
Redis의 정수 집합(intset) 관련 파일은 intset.h와 intset.c로 구성되어 있습니다.
intset은 정렬된 정수 배열과 유사한 작업을 수행하지만, 데이터 유형에 따라 메모리 최적화가 이루어집니다.
데이터 구조
1 typedef struct custom_set {
2 uint32_t format;
3 uint32_t size;
4 int8_t elements[];
5 } custom_set;
custom_set 구조는 가변 길이 구조체 ...
7월 14일 03:09에 게시됨
C 언어 포인터 심층 분석
포인터 기초
메모리 이해
메모리는 데이터를 저장하는 장치입니다. 컴퓨터 시스템에는 두 가지 주요 유형의 메모리가 있습니다:
외부 저장 장치
외부 저장 장치는 장기간 데이터를 보관하며, 전원이 꺼져도 데이터가 유지됩니다(비휘발성).
일반적인 외부 저장 장치: 하드 디스크, USB 플래시 드라이브, 광 디스크 등
내부 메모리
내부 메모리(램)는 전원이 공급되는 동 ...
7월 10일 21:16에 게시됨
이진 트리 재귀 완전 정복: 직관에서 원리 이해로
서론: 재귀에 대한 솔직한 고백
재귀를 코딩할 때 종종 이런 경험이 있다. 코드는 작동하지만, "왜 이게 맞는지"는 설명하기 어렵다. 예를 들어:
왜 트리를 해제할 때 후위 순회를 써야 할까?
어떤 문제에서는 논리합(||)을 쓰고, 어떤 문제에서는 논리곱(&&)을 쓸까?
함수를 분리해서 작성해야 하는 경우는 언제일까?
이 글은 ...
7월 10일 05:14에 게시됨
C 프로그래밍 기초 실험: 제어문 활용
무작위 쿠폰 코드 생성기
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CODE_LENGTH 6
#define NUM_CODES 5
int main(){
int count;
int random_prefix, random_suffix;
srand(time(NULL));
count = 0;
while(count < NUM_CODES){
random_prefix = rand() % 900 + 100; // 100-999
...
7월 9일 02:55에 게시됨
C 언어 타입 캐스팅과 상수(Const) 심화 이해
C 언어의 데이터 형변환 (Type Casting)
프로그램을 작성하다 보면 특정 데이터 타입을 다른 타입으로 변환해야 하는 상황이 발생합니다. 이를 형변환(Type Casting)이라고 하며, 크게 컴파일러가 자동으로 처리하는 방식과 개발자가 직접 지정하는 방식으로 나뉩니다.
암시적 형변환 (Implicit Casting)
서로 다른 데이터 타입 간에 할당이 이루어질 때, 컴파일러가 자동 ...
7월 3일 01:21에 게시됨
C 언어 기본 개념: 전처리 지시자와 함수 구조
전처리 지시자
C 소스 코드에서 #include <stdio.h>와 같은 헤더 파일 포함문은 전처리 지시자입니다. 컴파일러는 소스 코드를 컴파일하기 전에 이러한 지시자를 먼저 처리합니다. stdio.h 헤더는 표준 입출력 함수에 대한 정보를 제공하며, 실제 함수 구현은 라이브러리 파일에 존재합니다. 헤더 파일은 함수 프로토타입, 상수 정의, 매크로 등을 포함하여 컴파일러 ...
7월 2일 04:28에 게시됨
배열 및 문자열 처리 실습
실습 1: 배열에서 최솟값과 최댓값 찾기
다음은 주어진 배열에서 최솟값과 최댓값을 찾는 코드입니다.
코드 보기
#include <stdio.h>
#define SIZE 5
void getData(int arr[], int size);
void displayData(int arr[], int size);
void findMinMax(int arr[], int size, int *min, int *max);
int main() {
int data[SIZE];
int minValue, maxValue;
...
7월 2일 02:06에 게시됨
순환 연결리스트를 이용한 원숭이 왕 선정 알고리즘
문제: head가 헤더 노드가 없는 순환 연결리스트를 가리키고 있을 때, 각 노드에는 데이터 필드(num)와 포인터 필드(link)가 포함됩니다. 데이터 필드에는 정수가 저장되며, i번째 노드의 데이터 필드 값은 i입니다. 함수를 작성하여 순환 연결리스트를 사용하여 원숭이 왕을 선택하는 과정을 시뮬레이션하세요: 첫 번째 노드부터 시작하여 "카운트"를 반복하고, ...
6월 29일 01:47에 게시됨