View

반응형

 

【 스택(Stack) 이란? 】

 

C++의 STL 중 하나인 스택(Stack)은 후입선출(LIFO, Last-In-First-Out) 원칙에 따라 데이터를 저장하는 추상적인 자료 구조이다. 스택은 일종의 리스트로, 리스트의 한쪽 끝에서만 자료의 추가와 삭제가 가능하다.

스택은 컴퓨터 프로그램에서 임시 데이터나 함수의 호출 정보를 저장하는 데 많이 이용된다. 또한 다른 자료 구조를 구현하는 데에도 사용된다. 예를 들어 스택을 이용해 괄호의 짝을 검사하거나, 그래프 탐색 알고리즘에서 방문한 노드들의 순서를 기억하는 등에 활용된다.

 

 

 

 

일상생활에서 스택을 알 수 있는 예로는 책을 쌓아놓은 형태가 있다.

책을 쌓아놓은 모습이 스택의 push 연산과 유사하다. 새로운 책을 쌓으려면 책의 맨 위에 쌓아야 하듯이, 새로운 데이터는 이전에 쌓인 데이터 위에 쌓이며, 스택의 가장 위에 위치한다. 꺼내는 것도 마찬가지다. 가장 위쪽에서부터 데이터를 제거하고 반환해야 한다.

C++ STL에서 스택(Stack)은 <stack> 헤더 파일에 정의되어 있다.

 

 

 

 

 

【 스택(Stack)의 특징 】

 

스택은 다음의 특징이 있다.

 

  1. 후입선출(LIFO) 구조: 가장 나중에 들어온 데이터가 가장 먼저 처리되는 형식
  2. 제한적인 데이터 삽입/삭제:  스택은 가장 위쪽에 있는 데이터에만 직접적으로 접근할 수 있다.
  3. 데이터의 은닉화: 가장 위쪽 데이터만 처리하기 때문에 스택의 내부 구조를 숨길 수 있다.
  4. 재귀적 구조 처리: 스택은 재귀적 구조 처리에 유용하게 사용된다. 예를 들어 재귀 함수 구조에서 함수의 호출 정보를 스택에 저장하여 처리할 수 있다.
  5. 메모리 관리: 프로그램에서 함수를 호출할 때는 호출 정보를 스택에 저장하고, 함수가 종료될 때는 스택에서 해당 정보를 꺼내 복원한다.

 

 

 

 

【 스택(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
반응형
Share Link
reply
250x250
반응형
«   2024/07   »
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 31