안녕하세요, C++ 프로그래밍에서 중요한 자료 구조인 '스택'에 대해 배워보려고 합니다. C++에서 스택을 어떻게 활용하는지, 그리고 이것이 왜 중요한지 알아봅시다.
C++ 스택이란?
스택은 데이터를 저장하는 특별한 형태의 자료 구조로, 데이터의 추가 및 제거가 한쪽 끝에서만 이루어집니다. 이를 '후입선출' (LIFO: Last In First Out) 구조라고 합니다. 즉, 마지막에 스택에 추가된 항목이 가장 먼저 제거됩니다.
C++ 스택(Stack) 기본 개념
C++에서 스택을 사용하려면 STL (Standard Template Library)의 'stack'을 사용하면 됩니다.
#include <iostream>
#include <stack> // 스택 라이브러리
int main() {
std::stack<int> s; // 정수형 스택 선언
// push 함수를 사용하여 스택에 값 추가
s.push(10);
s.push(20);
s.push(30);
// 스택: [10, 20, 30]
// (10이 가장 아래에, 30이 가장 위에 있습니다)
}
위의 예시에서는 C++ STL의 stack을 사용하여 스택을 생성하고, push 함수를 사용하여 스택에 값을 추가하는 방법을 보여줍니다.
C++ 스택(Stack)에서 데이터 액세스 및 제거
스택에서 가장 위에 있는 요소를 확인하거나 제거하려면 top 및 pop 함수를 사용합니다.
#include <iostream>
#include <stack>
int main() {
std::stack<int> s;
s.push(10);
s.push(20);
s.push(30); // 스택: [10, 20, 30]
// top 함수를 사용하여 스택의 가장 위에 있는 요소를 확인
std::cout << s.top() << std::endl; // 출력: 30
// pop 함수를 사용하여 스택의 가장 위에 있는 요소를 제거
s.pop(); // 스택: [10, 20]
std::cout << s.top() << std::endl; // 출력: 20
}
스택의 활용 예시
스택은 다양한 프로그래밍 상황에서 유용하게 사용됩니다. 예를 들어, 괄호 쌍 검사나 브라우저의 '뒤로 가기' 기능 등에 활용되는 자료구조입니다.
#include <iostream>
#include <stack>
#include <string>
bool areBracketsBalanced(std::string expr) {
std::stack<char> s;
char x;
// 모든 괄호를 확인합니다.
for (int i = 0; i < expr.length(); i++) {
if (expr[i] == '(' || expr[i] == '[' || expr[i] == '{') {
// 괄호를 스택에 추가합니다.
s.push(expr[i]);
continue;
}
// 괄호가 맞지 않으면 false를 반환합니다.
if (s.empty())
return false;
switch (expr[i]) {
case ')':
x = s.top();
s.pop();
if (x == '{' || x == '[')
return false;
break;
case '}':
x = s.top();
s.pop();
if (x == '(' || x == '[')
return false;
break;
case ']':
x = s.top();
s.pop();
if (x == '(' || x == '{')
return false;
break;
}
}
// 스택이 비어 있으면 괄호는 균형을 이룹니다.
return (s.empty());
}
int main() {
std::string expr = "{()}[]";
if (areBracketsBalanced(expr))
std::cout << "Balanced" << std::endl;
else
std::cout << "Not Balanced" << std::endl;
return 0;
}
이 예제는 괄호의 균형을 확인하는 데 스택을 사용하는 방법을 보여줍니다. 괄호의 열림과 닫힘이 잘 맞는지를 판단하는 데 이런 방식으로 스택이 유용하게 활용됩니다.
마치며
C++에서의 스택 사용은 매우 간단하지만, 이를 활용하면 복잡한 문제를 효율적으로 해결할 수 있습니다. 이 글을 통해 스택의 개념과 활용법에 대한 이해가 높아졌기를 바랍니다. 다음 글에서는 다른 자료 구조와의 스택 비교, 더 복잡한 스택 활용 예시 등을 살펴보겠습니다. 계속해서 많은 관심과 참여 부탁드립니다!
댓글