[자료구조] 스택 (Stack)
2024. 5. 23. 13:44ㆍBackend/Data Structure
728x90
🎯 스택 (Stack)
1. 스택이란 무엇일까요?
스택은 LIFO(Last In, First Out) 방식을 기반으로 데이터를 쌓아 관리하는 자료 구조입니다. 쉽게 말해,
접시를 쌓듯이 데이터를 차곡차곡 쌓아 올리는 방식이라고 생각하면 됩니다.
스택의 가장 큰 특징은 마지막에 들어온 데이터가 가장 먼저 나온다는 것입니다. 마치
음식 쟁반에서 가장 위에 있는 음식부터 먹는 것과 같다고 볼 수 있습니다.
이러한 특징 때문에 선택적 삽입 및 추출이 불가능하며, 처리 순서가 중요한 작업에 적합하게 활용됩니다.
2. 스택의 주요 특징
- LIFO (Last In, First Out): 마지막에 들어온 데이터가 가장 먼저 나옵니다.
- 선택적 삽입 및 추출 불가능: 이미 저장된 데이터를 건너뛰고 특정 데이터를 삽입하거나 추출할 수 없습니다.
- 처리 순서 보장: 데이터가 입력된 순서대로 처리되지 않고, 마지막에 들어온 데이터부터 처리됩니다.
3. 스택의 주요 연산
스택을 사용하기 위해서는 다음과 같은 주요 연산들을 이해해야 합니다.
- push(item): 스택의 가장 위에 item 데이터를 추가합니다. 마치 접시를 쌓듯이 데이터를 쌓아 올리는 연산입니다.
- pop(): 스택의 가장 위에 있는 데이터를 꺼내서 반환합니다. 마치 가장 위에 있는 접시를 내려오듯이 데이터를 꺼내는 연산입니다.
- peek(): 스택의 가장 위에 있는 데이터를 확인합니다. 꺼내지는 않고 그 값을 조사하는 연산입니다. 마치 가장 위에 있는 접시의 음식을 확인하는 것과 같습니다.
- isEmpty(): 스택이 비어있는지 확인하는 연산입니다.
- size(): 스택에 저장된 데이터의 개수를 반환하는 연산입니다.
MyStack stack = new MyStack();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack); // [1, 2, 3] 출력
System.out.println(stack.peek()); // 3 출력
System.out.println(stack.pop()); // 3 출력 하고 stack에서 3삭제
System.out.println(stack); // [1, 2] 출력
System.out.println(stack.pop()); // 2 출력
System.out.println(stack.pop()); // 1 출력
System.out.println(stack.isEmpty()); // true 출력
4. 스택의 활용 예시
스택은 다양한 분야에서 활용되고 있습니다. 대표적인 예시로는 다음과 같은 것들이 있습니다.
- 브라우저 히스토리 관리: 웹 브라우저에서 뒤로 가기/앞으로 가기 버튼을 사용할 때 방문했던 페이지들을 스택을 사용하여 관리합니다.
- 계산식 처리: 수식 계산 시, 중위 표기법을 후위 표기법으로 변환하고 계산하는 과정에서 스택을 사용합니다.
- 표현식 평가: 괄호와 연산자의 우선순위를 처리하는 데 스택을 사용합니다. 예를 들어, 3 + 4 * 2를 계산할 때, 먼저 4와 2를 곱한 후 3을 더하는 순서로 계산해야 합니다. 이러한 계산 순서를 스택을 이용하여 처리합니다.
- 함수 호출 관리: 함수 호출 시, 각 함수의 지역 변수와 임시 데이터를 저장하는 데 스택을 사용합니다.
- 텍스트 편집기의 되돌리기/다시 실행 기능: 텍스트 편집기에서 이전 작업을 취소하거나 다시 실행할 때 스택을 사용하여 이전 작업들을 저장하고 관리합니다.
'Backend > Data Structure' 카테고리의 다른 글
[자료구조] 연결리스트 (LinkedList) (0) | 2024.05.26 |
---|---|
[자료구조] HashMap (0) | 2024.05.26 |
[자료구조] 큐 (Queue) (0) | 2024.05.23 |
[자료구조] 배열(Array) (0) | 2024.05.23 |
[자료구조] 자료구조 소개 (0) | 2024.05.23 |