C언어 스택 (Stack) - LIFO 자료구조

코딩C언어
읽는데 6분 소요
처음 쓰여진 날: 2026-02-10
마지막 수정일: 2026-03-21
조회수: 124

요약

C언어 스택(Stack)의 개념과 LIFO 원리를 알아봅니다. push/pop 연산, top 포인터, 배열 기반 스택 구현을 이해하면 정보처리기사 실기 스택 문제를 쉽게 풀 수 있습니다.

스택 핵심 정리

개념설명예시
스택(Stack)나중에 들어온 데이터가 먼저 나가는 자료구조접시 쌓기, 뒤로가기
LIFOLast 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 (앞)
예시접시 쌓기, 뒤로가기대기열, 프린터 작업

rear(뒤쪽)는 큐에서 데이터가 들어오는 위치, front(앞쪽)는 나가는 위치입니다. 큐 페이지에서 자세히 다룹니다.


배열 기반 스택 구현 쌩기초

스택은 배열top 변수 하나로 구현할 수 있습니다.

c
코드 하이라이팅 중...

#define MAX_SIZE 10MAX_SIZE를 10으로 정의하는 매크로입니다. 코드에서 MAX_SIZE가 나오면 컴파일할 때 자동으로 10으로 바뀝니다.

변수역할초기값
stack[]데이터를 저장하는 배열모두 0
top맨 위 데이터의 인덱스-1 (비어있음)

stack[]top은 함수 바깥에 선언된 전역 변수입니다. C언어에서 전역 변수는 자동으로 0으로 초기화되므로, stack[]의 모든 칸이 0으로 시작합니다.



push (삽입) 기초

push는 스택의 top을 1 증가시킨 후, 그 위치에 데이터를 저장합니다.

c
코드 하이라이팅 중...

++top의 의미

++top전위 증가입니다. 먼저 top을 1 증가시키고, 증가된 값을 인덱스로 사용합니다.

단계설명예시 (top이 -1일 때)
1. top 증가++top 실행top: -1 -> 0
2. 값 저장stack[top] = numstack[0] = 5

push 예시

c
코드 하이라이팅 중...
동작stack[0]stack[1]stack[2]top
초기000-1
push(5)5000
push(2)5201
push(7)5272
push 과정 - 초기 상태에서 push(5), push(2), push(7)까지 배열과 top 변화
push할 때마다 top이 1 증가하고, 그 위치에 값이 저장됩니다

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
이전-5272
pop()75271
pop()25270

isEmpty와 isFull 기초

스택이 비어있는지, 가득 찼는지 확인하는 함수입니다.

c
코드 하이라이팅 중...
함수조건반환값
isEmpty()top == -11 (비어있음)
isFull()top == MAX_SIZE - 11 (가득 참)
isEmpty와 isFull 상태 비교 - 비어있을 때 top=-1, 가득 찼을 때 top=MAX_SIZE-1
top이 -1이면 비어있고, MAX_SIZE - 1이면 가득 찬 상태입니다

안전한 push/pop

실제 프로그램에서는 isEmpty()isFull()로 오류를 방지합니다.

c
코드 하이라이팅 중...


실기 문제에서의 스택 심화

실기 문제에서는 push/pop 함수의 이름이 다를 수 있습니다. 함수의 동작을 보고 push인지 pop인지 판단해야 합니다.

함수 이름이 다른 경우

문제의 함수명실제 동작판단 기준
into(num)push++top으로 증가 후 값 저장
take()poptop--로 값 반환 후 감소
enqueue(num)pushtop에 데이터 추가
dequeue()poptop에서 데이터 꺼냄

문제 풀이 순서

  1. 자료구조 파악: push/pop 함수를 찾아 스택인지 확인
  2. 초기 상태 확인: top(또는 point)의 초기값 확인
  3. 표 작성: 배열과 top 상태를 단계별로 추적
  4. 출력 순서 기록: printf가 나올 때마다 출력값 기록

정보처리기사 실기 대비 문제

관련 글

(34개)
제목태그시험
C언어 구조체 배열
C언어
-
C언어 구조체 포인터
C언어
-
C언어 함수 프로토타입
C언어
-