View
【 스택(Stack) 이란? 】
C++의 STL 중 하나인 스택(Stack)은 후입선출(LIFO, Last-In-First-Out) 원칙에 따라 데이터를 저장하는 추상적인 자료 구조이다. 스택은 일종의 리스트로, 리스트의 한쪽 끝에서만 자료의 추가와 삭제가 가능하다.
스택은 컴퓨터 프로그램에서 임시 데이터나 함수의 호출 정보를 저장하는 데 많이 이용된다. 또한 다른 자료 구조를 구현하는 데에도 사용된다. 예를 들어 스택을 이용해 괄호의 짝을 검사하거나, 그래프 탐색 알고리즘에서 방문한 노드들의 순서를 기억하는 등에 활용된다.
일상생활에서 스택을 알 수 있는 예로는 책을 쌓아놓은 형태가 있다.
책을 쌓아놓은 모습이 스택의 push 연산과 유사하다. 새로운 책을 쌓으려면 책의 맨 위에 쌓아야 하듯이, 새로운 데이터는 이전에 쌓인 데이터 위에 쌓이며, 스택의 가장 위에 위치한다. 꺼내는 것도 마찬가지다. 가장 위쪽에서부터 데이터를 제거하고 반환해야 한다.
C++ STL에서 스택(Stack)은 <stack> 헤더 파일에 정의되어 있다.
【 스택(Stack)의 특징 】
스택은 다음의 특징이 있다.
- 후입선출(LIFO) 구조: 가장 나중에 들어온 데이터가 가장 먼저 처리되는 형식
- 제한적인 데이터 삽입/삭제: 스택은 가장 위쪽에 있는 데이터에만 직접적으로 접근할 수 있다.
- 데이터의 은닉화: 가장 위쪽 데이터만 처리하기 때문에 스택의 내부 구조를 숨길 수 있다.
- 재귀적 구조 처리: 스택은 재귀적 구조 처리에 유용하게 사용된다. 예를 들어 재귀 함수 구조에서 함수의 호출 정보를 스택에 저장하여 처리할 수 있다.
- 메모리 관리: 프로그램에서 함수를 호출할 때는 호출 정보를 스택에 저장하고, 함수가 종료될 때는 스택에서 해당 정보를 꺼내 복원한다.
【 스택(Stack)의 멤버 함수 】
멤버 함수 | |
s.push(a) | 스택 맨 뒤쪽에 데이터 삽입 |
s.pop() | 스택 맨 뒤쪽에 데이터 제거 |
s.top() | 스택에 가장 나중에 들어온 데이터 반환 |
s.size() | 스택의 크기 반환 |
s.empty() | 스택이 비어 있는지 확인(비었으면 1, 아니면 0을 반환) |
【 예제 】
다음은 스택을 사용한 간단한 예제이다.
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s;
s.push(10);
s.push(20);
s.push(30);
cout << "Top element: " << s.top() << endl; // 결괏값: 30
s.pop();
cout << "Top element after pop: " << s.top() << endl; // 결괏값: 20
cout << "Size of stack: " << s.size() << endl; // 결괏값: 2
cout << "Is stack empty?: " << s.empty() << endl; // 결괏값: 0
return 0;
}
728x90
'C++' 카테고리의 다른 글
[C++] 공백(띄어쓰기) 포함 문자열 입력 받기 (0) | 2023.04.17 |
---|---|
[C++][STL] 덱(Deque) 개념과 사용 방법 (0) | 2023.04.14 |
[C++][STL] 큐(Queue) 개념과 사용 방법 (0) | 2023.04.07 |
reply