반응형
(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<>();
// Push
stack.push(10);
stack.push(20);
stack.push(30);
System.out.println("Stack: " + stack);
// Pop
int removed = stack.pop();
System.out.println("Popped: " + removed);
System.out.println("Stack after pop: " + stack);
// Peek
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(깊이 우선 탐색)에서 사용.
스택은 단순하면서도 효율적인 자료구조로, 프로그래밍 문제를 해결하는 데 중요한 역할을 합니다.
반응형
'자료구조' 카테고리의 다른 글
트리(2) - 이진 탐색 트리(Binary Search Tree)의 원리, 구조, 예제 코드(C언어, Java, Python), 장단점, 사용 사례 총정리 (0) | 2024.12.18 |
---|---|
트리 (1) - 이진 트리(Binary Tree)의 모든 것: 원리, 구조, 예제 코드(C언어 Java, Python), 장단점, 사용 사례 (1) | 2024.12.18 |
큐(Queue) 자료구조란? (C언어, Java, Python 예시코드) (0) | 2024.12.18 |
링크드 리스트(2) - 성능 개선 (0) | 2023.04.21 |
링크드 리스트(Linked List)(1) - 더블 링크드 리스트(메모리 풀 방식) (0) | 2023.04.20 |
댓글