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 |
Tags
- C++
- 백준 2525번
- 백준 25305번
- 해석
- 백준 1157번
- 피라미드 출력
- C
- 상세 풀이
- 백준 1269번
- 5073번
- 잡다한 일
- 백준 2501번
- 백준 5086번
- 논리 연산
- 백준 2587번
- html
- 일상생활 영어표현
- 차이
- Java
- 백준 27433번
- 직각 삼각형
- 백준 9506번
- 백준 #11382번 #
- 자바
- 연속된 숫자의 합
- 백준 5597번
- 알고리즘
- javascript
- 배열
- Unity
Archives
- Today
- Total
YunDev
[자료구조] 스택 본문
스택(Stack) 은 Last In, First Out (LIFO, 후입선출) 구조를 가지는 자료구조입니다.
즉, 가장 마지막에 추가된 데이터가 가장 먼저 제거되는 방식입니다.
1. 스택의 개념
- 데이터를 쌓아 올리는 구조로 동작하며, 한쪽 끝에서만 데이터 삽입과 삭제가 이루어짐.
- 후입선출(LIFO, Last In First Out) 구조.
- 주로 함수 호출 스택, 되돌리기(Undo) 기능, 괄호 검사, 경로 탐색(DFS) 등에 사용됨.
- 배열을 이용한 스택 구현
class Stack {
private int top; // 스택의 최상위 인덱스
private int maxSize; // 스택의 크기
private int[] stackArray; // 배열을 이용한 스택
// 생성자
public Stack(int size) {
this.maxSize = size;
this.stackArray = new int[maxSize];
this.top = -1; // 초기값 설정 (스택이 비어있는 상태)
}
// push: 스택에 요소 추가
public void push(int item) {
if (top == maxSize - 1) { // 스택이 가득 찬 경우
System.out.println("스택이 가득 찼습니다!");
return;
}
stackArray[++top] = item;
}
// pop: 스택에서 요소 제거 및 반환
public int pop() {
if (isEmpty()) {
System.out.println("스택이 비어 있습니다!");
return -1; // 에러 값 반환
}
return stackArray[top--];
}
// peek: 스택의 최상위 요소 확인 (제거 X)
public int peek() {
if (isEmpty()) {
System.out.println("스택이 비어 있습니다!");
return -1;
}
return stackArray[top];
}
// isEmpty: 스택이 비어있는지 확인
public boolean isEmpty() {
return (top == -1);
}
// size: 현재 스택에 있는 요소 개수 반환
public int size() {
return top + 1;
}
}
// 실행 테스트
public class StackExample {
public static void main(String[] args) {
Stack stack = new Stack(5);
stack.push(10);
stack.push(20);
stack.push(30);
System.out.println("현재 top 요소: " + stack.peek()); // 30
System.out.println("스택에서 pop: " + stack.pop()); // 30
System.out.println("현재 top 요소: " + stack.peek()); // 20
System.out.println("스택 크기: " + stack.size()); // 2
}
}
또한 Java에서는 Stack 클래스를 직접 제공하여 쉽게 사용할 수 있습니다.
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);
// 데이터 확인 (peek)
System.out.println("현재 top 요소: " + stack.peek()); // 30
// 데이터 제거 (pop)
System.out.println("스택에서 pop: " + stack.pop()); // 30
System.out.println("현재 top 요소: " + stack.peek()); // 20
// 스택이 비어 있는지 확인
System.out.println("스택이 비어 있는가? " + stack.isEmpty()); // false
}
}
- 스택(Stack) 은 후입선출(LIFO) 방식으로 동작하는 자료구조.
- push(), pop(), peek() 등의 연산을 통해 데이터 추가 및 제거 가능.
- 함수 호출 스택, 괄호 검사, 경로 탐색(DFS) 등에 활용됨.
- Java에서는 Stack 클래스를 제공하여 간편하게 사용 가능.
'자료구조와 알고리즘' 카테고리의 다른 글
[자료구조와 알고리즘] 이진 검색 (0) | 2025.02.18 |
---|---|
[자료구조와 알고리즘] 선형 검색과 보초법 (0) | 2025.02.17 |
[자료구조와 알고리즘] 클래스 (0) | 2025.02.12 |
[자료구조와 알고리즘] 소수 구하기 (0) | 2025.01.21 |
[자료구조와 알고리즘] 기수 변환 (1) | 2025.01.17 |