C언어 스택 (Stack) - LIFO 자료구조
코딩C언어
읽는데 5분 소요
처음 쓰여진 날: 2026-02-10
마지막 수정일: 2026-02-10
조회수: 0
요약
C언어 스택(Stack)의 개념과 LIFO 원리를 알아봅니다. push/pop 연산, top 포인터, 배열 기반 스택 구현을 이해하면 정보처리기사 실기 스택 문제를 쉽게 풀 수 있습니다.
스택 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 스택(Stack) | 나중에 들어온 데이터가 먼저 나가는 자료구조 | 접시 쌓기, 뒤로가기 |
| LIFO | Last In First Out (후입선출) | 마지막에 넣은 게 먼저 나옴 |
| push | 스택에 데이터 삽입 (top 위에 추가) | push(5); |
| pop | 스택에서 데이터 삭제 (top에서 꺼냄) | pop(); |
| top | 스택의 맨 위 데이터 위치 | 초기값은 -1 (비어있음) |
스택이란?
스택(Stack) 은 나중에 들어온 데이터가 먼저 나가는 자료구조입니다. 이를 LIFO(Last In First Out) 라고 합니다.
실생활에서 접시 쌓기와 같습니다. 접시를 쌓으면 맨 위에 올리고, 꺼낼 때도 맨 위에서 꺼냅니다.
text
코드 하이라이팅 중...
스택 vs 큐 비교
| 구분 | 스택 (Stack) | 큐 (Queue) |
|---|---|---|
| 원리 | LIFO (후입선출) | FIFO (선입선출) |
| 삽입 위치 | top (위) | rear (뒤) |
| 삭제 위치 | top (위) | front (앞) |
| 예시 | 접시 쌓기, 뒤로가기 | 대기열, 프린터 작업 |
배열 기반 스택 구현
스택은 배열과 top 변수 하나로 구현할 수 있습니다.
c
코드 하이라이팅 중...
| 변수 | 역할 | 초기값 |
|---|---|---|
stack[] | 데이터를 저장하는 배열 | 모두 0 |
top | 맨 위 데이터의 인덱스 | -1 (비어있음) |
top이 -1이면 스택이 비어있습니다
top은 배열 인덱스이므로 0부터 시작합니다. 데이터가 하나도 없으면 -1로 설정합니다. 이 초기값이 중요합니다.
push (삽입)
push는 스택의 top을 1 증가시킨 후, 그 위치에 데이터를 저장합니다.
c
코드 하이라이팅 중...
++top의 의미
++top은 전위 증가입니다. 먼저 top을 1 증가시키고, 증가된 값을 인덱스로 사용합니다.
| 단계 | 설명 | 예시 (top이 -1일 때) |
|---|---|---|
| 1. top 증가 | ++top 실행 | top: -1 -> 0 |
| 2. 값 저장 | stack[top] = num | stack[0] = 5 |
push 예시
c
코드 하이라이팅 중...
| 동작 | stack[0] | stack[1] | stack[2] | top |
|---|---|---|---|---|
| 초기 | 0 | 0 | 0 | -1 |
| push(5) | 5 | 0 | 0 | 0 |
| push(2) | 5 | 2 | 0 | 1 |
| push(7) | 5 | 2 | 7 | 2 |
pop (삭제)
pop은 스택의 top 위치의 데이터를 반환하고, top을 1 감소시킵니다.
c
코드 하이라이팅 중...
top--의 의미
top--는 후위 감소입니다. 현재 top 값을 먼저 사용한 후, top을 1 감소시킵니다.
| 단계 | 설명 | 예시 (top이 2일 때) |
|---|---|---|
| 1. 값 반환 | stack[top] 반환 | stack[2] 반환 |
| 2. top 감소 | top-- 실행 | top: 2 -> 1 |
pop 예시
c
코드 하이라이팅 중...
| 동작 | 반환값 | stack[0] | stack[1] | stack[2] | top |
|---|---|---|---|---|---|
| 이전 | - | 5 | 2 | 7 | 2 |
| pop() | 7 | 5 | 2 | 7 | 1 |
| pop() | 2 | 5 | 2 | 7 | 0 |
pop해도 배열의 값은 그대로 남아 있습니다
pop은 값을 지우는 게 아니라 top만 이동합니다. 나중에 push하면 그 자리에 새 값을 덮어씁니다. 큐의 dequeue도 같은 원리입니다.
isEmpty와 isFull
스택이 비어있는지, 가득 찼는지 확인하는 함수입니다.
c
코드 하이라이팅 중...
| 함수 | 조건 | 반환값 |
|---|---|---|
isEmpty() | top == -1 | 1 (비어있음) |
isFull() | top == MAX_SIZE - 1 | 1 (가득 참) |
text
코드 하이라이팅 중...
실기 문제에서의 스택
실기 문제에서는 push/pop 함수의 이름이 다를 수 있습니다. 함수의 동작을 보고 push인지 pop인지 판단해야 합니다.
함수 이름이 다른 경우
| 문제의 함수명 | 실제 동작 | 판단 기준 |
|---|---|---|
into(num) | push | ++top으로 증가 후 값 저장 |
take() | pop | top--로 값 반환 후 감소 |
enqueue(num) | push | top에 데이터 추가 |
dequeue() | pop | top에서 데이터 꺼냄 |
문제 풀이 순서
- 자료구조 파악: push/pop 함수를 찾아 스택인지 확인
- 초기 상태 확인: top(또는 point)의 초기값 확인
- 표 작성: 배열과 top 상태를 단계별로 추적
- 출력 순서 기록:
printf가 나올 때마다 출력값 기록
++top과 top++, top--와 --top의 차이를 주의하세요
push에서 ++top(전위)을 쓰면 먼저 증가 후 저장하고, top++(후위)을 쓰면 먼저 저장 후 증가합니다. pop도 마찬가지입니다. 전위/후위에 따라 결과가 달라지니 꼼꼼히 확인하세요. ++i와 i++의 차이를 참고하세요.