그라운드 임베디드 유튜브 구독

노트 / 자료구조와 알고리즘

큐와 스택: 먼저 온 것과 나중에 온 것

작업 대기열은 큐, 함수 호출은 스택입니다. 두 구조를 배열로 직접 구현하며 차이를 봅니다.

GROUND EMBEDDED · 정리 노트자료구조 03큐와 스택 1static int16_t st[16]; 2static uint8_t top; 3void push(int16_t v) { if (top < 16) st… 4int16_t pop(void) { return top ? st[…

큐: 먼저 들어온 것이 먼저 나간다 (FIFO)

버튼 이벤트, 전송 대기 패킷, 명령 목록처럼 순서가 중요한 데이터는 큐에 쌓습니다. 링 버퍼가 바로 고정 크기 큐입니다. RTOS의 메시지 큐도 같은 원리에 잠금과 대기 기능을 더한 것입니다.

스택: 나중에 들어온 것이 먼저 나간다 (LIFO)

static int16_t st[16];
static uint8_t top;
void push(int16_t v) { if (top < 16) st[top++] = v; }
int16_t pop(void)    { return top ? st[--top] : 0; }

CPU도 함수를 호출할 때 돌아갈 주소와 지역 변수를 스택에 쌓습니다. 가장 나중에 부른 함수가 가장 먼저 끝나기 때문입니다. 메뉴 화면에서 "뒤로 가기"를 구현할 때도 스택이 자연스럽습니다.

언제 무엇을

상황 구조
들어온 순서대로 처리 큐
되돌아가기, 중첩 구조 스택
가장 급한 것부터 우선순위 큐

임베디드에서는 둘 다 크기를 고정한 배열로 만들고, 넘칠 때 어떻게 할지(버림, 덮어쓰기, 에러 표시)를 처음부터 정해 둡니다.