Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- livrary
- unrealengineai
- 언리얼비헤이어비어트리
- 수학용어정리
- 영단어정리
- c++용어정리
- c++class
- 언리얼엔진
- c언어정리
- DX
- 자료형타입
- 자료구조정리
- 게임개발
- leveleditor
- 언리얼ai
- 월드아웃라이너
- uaiperception
- ipc(inter process communication)
- 언리얼엔진공부
- directx
- 프로그래밍일기
- 각도변환
- bttask
- c++porinter
- 프로그래밍
- 25.06.11dir
- 게임엔진튜토리얼
- c++
- 언리얼엔진5
- 자료구조
Archives
- Today
- Total
루리코딩 세상
자료구조 스택(Stack) 완전 정리 – 개념부터 예제까지 본문
Chat - GTP 활용해서 작성된 문서입니다. 더블체크 필수
안녕하세요! 오늘은 자료구조의 기초 중 하나인 스택(Stack) 에 대해 알아보려고 합니다.
프로그래밍을 처음 배우는 분들이나 면접 준비 중이신 분들에게도 꼭 필요한 내용이니, 함께 차근차근 배워보아요 😊
🧱 스택이란?
스택(Stack) 은 데이터를 쌓아 올린 구조를 의미하며, "후입선출(Last-In, First-Out)" 방식으로 작동합니다.
마지막에 넣은 데이터가 가장 먼저 나간다! 🍔 햄버거 포장지, 접시 쌓기처럼요.
✅ 스택의 주요 기능
push(item) | 데이터를 스택에 추가 (맨 위에 쌓기) |
pop() | 가장 위에 있는 데이터를 꺼내기 (제거) |
peek() 또는 top() | 가장 위 데이터를 확인 (제거하지 않음) |
isEmpty() | 스택이 비어 있는지 확인 |
size() | 스택에 있는 데이터 개수 확인 |
🖼️ 스택 구조 예시
[ Top ]
🍎 ← push(apple)
🍌 ← push(banana)
🍇 ← push(grape)
- pop() → 🍇
- peek() → 🍌
- 이후 스택: 🍎, 🍌
💻 C언어로 스택(Stack) 구현하기
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 스택의 최대 크기
// 스택 구조체 정의
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
// 스택 초기화
void init(Stack* s) {
s->top = -1;
}
// 스택이 비어있는지 확인
int isEmpty(Stack* s) {
return s->top == -1;
}
// 스택이 가득 찼는지 확인
int isFull(Stack* s) {
return s->top == MAX_SIZE - 1;
}
// 스택에 데이터 추가 (push)
void push(Stack* s, int value) {
if (isFull(s)) {
printf("스택이 가득 찼습니다!\n");
return;
}
s->data[++(s->top)] = value;
}
// 스택에서 데이터 꺼내기 (pop)
int pop(Stack* s) {
if (isEmpty(s)) {
printf("스택이 비어 있습니다!\n");
return -1;
}
return s->data[(s->top)--];
}
// 스택의 맨 위 데이터 확인 (peek)
int peek(Stack* s) {
if (isEmpty(s)) {
printf("스택이 비어 있습니다!\n");
return -1;
}
return s->data[s->top];
}
// 스택 사용 예제
int main() {
Stack stack;
init(&stack);
push(&stack, 10);
push(&stack, 20);
push(&stack, 30);
printf("Top of stack: %d\n", peek(&stack)); // 30 출력
printf("Pop: %d\n", pop(&stack)); // 30 제거
printf("Pop: %d\n", pop(&stack)); // 20 제거
printf("Top of stack: %d\n", peek(&stack)); // 10 출력
return 0;
}
📌 코드 설명
init | 스택을 초기화 (top을 -1로 설정) |
push | top을 1 증가시키고 값 저장 |
pop | top 위치의 값을 반환 후 top 감소 |
peek | 현재 top 위치의 값 확인 (제거는 안 함) |
isEmpty / isFull | 상태 확인용 함수 |
💻 파이썬으로 구현해 보기
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
return None
def peek(self):
if not self.is_empty():
return self.items[-1]
return None
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
# 사용 예시
stack = Stack()
stack.push('apple')
stack.push('banana')
print(stack.pop()) # banana
print(stack.peek()) # apple
🎯 스택이 쓰이는 예시
웹 브라우저 뒤로 가기 | 방문한 페이지가 스택에 쌓여 있음 |
함수 호출 | 함수가 호출될 때마다 스택에 저장 (Call Stack) |
괄호 검사 | 여는 괄호는 push, 닫는 괄호는 pop으로 검사 |
DFS (깊이 우선 탐색) | 노드 방문 순서 추적에 사용 |
❗ 스택 사용 시 주의할 점
- 너무 많은 데이터를 쌓으면 Stack Overflow (스택 오버플로우) 발생 가능
- pop() 하기 전에 isEmpty() 확인 필수!
📌 마무리하며
스택은 자료구조 중에서도 매우 기초적이지만 다양한 문제 해결에 활용되는 아주 중요한 구조입니다.
자료구조나 알고리즘을 공부할 때 스택의 개념을 탄탄히 잡아두면 분명 도움이 될 거예요.
궁금한 점이나 이해가 잘 안 되는 부분이 있다면 댓글로 남겨주세요. 같이 찾아보겠습니다.
'이론 > 자료구조' 카테고리의 다른 글
배열 (Array) 자료구조 정리 (1) | 2025.05.29 |
---|---|
IPC(Inter Process Communication) (2) | 2025.05.26 |
콜백 ( Callback ) 함수 (0) | 2025.05.22 |
자료 구조(Data Structures) 종류 및 특징 도표 / 작성일 기록부 (0) | 2025.05.20 |
자료구조 Queue (0) | 2025.05.19 |