
(1) 스택(Stack) 자료구조란?
스택(Stack)은 데이터를 후입선출(LIFO, Last In First Out) 방식으로 처리하는 선형 자료구조입니다. 즉, 가장 나중에 삽입된 데이터가 가장 먼저 제거됩니다. 이 특성 덕분에 함수 호출 관리, 계산기 구현, 문자열 역순 처리 등 다양한 프로그래밍 문제에서 활용됩니다.
(2) 스택의 기본 동작
- 삽입(Push): 스택의 맨 위에 데이터를 추가.
- 삭제(Pop): 스택의 맨 위 데이터를 제거.
- 확인(Peek 또는 Top): 스택의 맨 위 데이터를 제거하지 않고 확인.
(3) 스택의 주요 특징
- 후입선출(LIFO): 나중에 삽입된 데이터가 먼저 제거됨.
- 제한된 접근: 데이터는 스택의 맨 위에서만 삽입 및 제거 가능.
- 구현 방식: 배열 또는 연결 리스트를 사용.
(4) 스택 구현 예시
C언어로 구현한 스택
#include <stdio.h>
#define SIZE 5
int stack[SIZE];
int top = -1;
void push(int data) {
if (top == SIZE - 1) {
printf("Stack is full!\n");
return;
}
stack[++top] = data;
}
int pop() {
if (top == -1) {
printf("Stack is empty!\n");
return -1;
}
return stack[top--];
}
int peek() {
if (top == -1) {
printf("Stack is empty!\n");
return -1;
}
return stack[top];
}
void display() {
if (top == -1) {
printf("Stack is empty!\n");
return;
}
for (int i = 0; i <= top; i++) {
printf("%d ", stack[i]);
}
printf("\n");
}
int main() {
push(10);
push(20);
push(30);
display();
printf("Popped: %d\n", pop());
display();
printf("Top element: %d\n", peek());
return 0;
}Java로 구현한 스택
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
<em>// Push</em>
stack.push(10);
stack.push(20);
stack.push(30);
System.out.println("Stack: " + stack);
<em>// Pop</em>
int removed = stack.pop();
System.out.println("Popped: " + removed);
System.out.println("Stack after pop: " + stack);
<em>// Peek</em>
int top = stack.peek();
System.out.println("Top element: " + top);
}
}Python으로 구현한 스택
stack = []
# Push
stack.append(10)
stack.append(20)
stack.append(30)
print("Stack:", stack)
# Pop
removed = stack.pop()
print("Popped:", removed)
print("Stack after pop:", stack)
# Peek
top = stack[-1] if stack else None
print("Top element:", top)스택의 활용 사례
- 함수 호출 관리: 함수의 호출과 복귀 순서를 저장.
- 문자열 뒤집기: 문자열을 역순으로 출력.
- 수식 평가 및 변환: 중위 표기법을 후위 표기법으로 변환.
- 그래프 탐색: DFS(깊이 우선 탐색)에서 사용.
스택은 단순하면서도 효율적인 자료구조로, 프로그래밍 문제를 해결하는 데 중요한 역할을 합니다.