정처기 감자정처기 감자
C언어자료구조

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

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

코딩C언어
읽는데 6분 소요
처음 쓰인 날: 2026-02-10
마지막 수정일: 2026-03-21
조회수: —
선수학습(2개)
  • C언어 구조체
  • C언어 포인터의 기초

요약

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 10은 MAX_SIZE를 10으로 정의하는 매크로입니다. 코드에서 MAX_SIZE가 나오면 컴파일할 때 자동으로 10으로 바뀝니다.

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

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

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] = 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
pop해도 배열의 값은 그대로 남아 있습니다
pop은 값을 지우는 게 아니라 top만 이동합니다. 나중에 push하면 그 자리에 새 값을 덮어씁니다. 큐의 dequeue도 같은 원리입니다.

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에서 데이터 꺼냄
enqueue/dequeue는 원래 큐의 연산 이름입니다
시험 문제에서 스택에 enqueue/dequeue라는 이름을 쓰는 경우가 있습니다. 이름에 속지 말고, 함수 안의 코드(++top인지, top--인지)를 보고 스택인지 큐인지 판단하세요.

문제 풀이 순서

  1. 자료구조 파악: push/pop 함수를 찾아 스택인지 확인
  2. 초기 상태 확인: top(또는 point)의 초기값 확인
  3. 표 작성: 배열과 top 상태를 단계별로 추적
  4. 출력 순서 기록: printf가 나올 때마다 출력값 기록
++top과 top++, top--와 --top의 차이를 주의하세요
push에서 ++top(전위)을 쓰면 먼저 증가 후 저장하고, top++(후위)을 쓰면 먼저 저장 후 증가합니다. pop도 마찬가지입니다. 전위/후위에 따라 결과가 달라지니 꼼꼼히 확인하세요. ++i와 i++의 차이를 참고하세요.

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

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(1개)
  • C언어 큐 (Queue) - FIFO 자료구조

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어41개
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어 이진 트리 (Binary Tree)
C언어코딩C언어
2026-04-24-
C언어 중첩 구조체와 포인터 접근
C언어코딩C언어
2026-04-24-
C언어 함수 포인터 (Function Pointer)
C언어코딩C언어
2026-04-24-
배열 C언어 코딩 감자시험
감자시험C언어배열감자시험
2026-03-28응시
C언어 왕감자 정보처리기사 실기 모의 시험
C언어C언어
2026-03-27응시
제어문/반복문 C언어 코딩 감자시험
감자시험C언어제어문반복문
2026-03-28응시
연산자 C언어 코딩 감자시험
감자시험C언어연산자감자시험
2026-03-28응시
포인터 C언어 코딩 감자시험
감자시험C언어포인터감자시험
2026-03-28응시
문자열 C언어 코딩 감자시험
감자시험C언어문자열감자시험
2026-03-28응시
구조체 C언어 코딩 감자시험
감자시험C언어구조체감자시험
2026-03-28응시
C언어 구조체 배열
C언어코딩C언어
2026-03-21-
C언어 구조체 포인터
C언어코딩C언어
2026-04-24-
C언어 함수 프로토타입
C언어코딩C언어
2026-03-21-
C언어 입력 함수 - scanf, getchar, gets
C언어코딩C언어
2026-03-21-
C언어 출력 함수 - putchar, printf, puts
C언어코딩C언어
2026-09-29-
C언어 문자열 포인터 (char *)
C언어코딩C언어
2026-03-21-
C언어 포인터 산술 (Pointer Arithmetic)
C언어코딩C언어
2026-03-21-
C언어 재귀함수 (Recursion)
C언어코딩C언어
2026-03-21-
C언어 선택정렬 (Selection Sort)
C언어코딩C언어
2026-02-10-
C언어 2차원 배열
C언어코딩C언어
2026-03-21-
C언어 원형 큐 (Circular Queue)
C언어코딩C언어
2026-03-21-
C언어 ctype.h 문자 판별 함수
C언어코딩C언어
2026-03-21-
C언어 자료형
C언어코딩C언어
2026-05-15-
C언어 이중 포인터 (Double Pointer)
C언어코딩C언어
2026-03-21-
C언어 동적 메모리 할당 (malloc, free)
C언어코딩C언어
2026-05-04-
C언어 헤더 파일과 #include
C언어코딩C언어
2026-03-21-
C언어 연결 리스트 (Linked List)
C언어코딩C언어
2026-05-06-
C언어 포인터 배열과 2차원 배열
C언어코딩C언어
2026-03-24-
C언어 포인터의 기초
C언어코딩C언어
2026-06-25-
C언어 큐 (Queue) - FIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 static 변수 - 값이 유지되는 변수
C언어코딩C언어
2026-03-21-
C언어 포인터를 이용한 문자열 복사
C언어코딩C언어
2026-07-09-
C언어 문자열 뒤집기 (포인터 활용)
C언어코딩C언어
2026-03-21-
C언어 구조체
C언어코딩C언어
2026-03-20-
C언어 삼항 연산자
C언어코딩C언어
2026-03-21-
C언어 typedef - 자료형에 새 이름 붙이기
C언어코딩C언어
2026-03-21-
전설의 완전수 문제 - C언어
C언어코딩C언어
2025-09-12-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999