스택 (Stack):
큐 (Queue):
std::vector)는 기본적으로 동적 배열로 동작하며, 데이터가 추가될 때 항상 마지막에 삽입됩니다.push_back(): 데이터를 벡터의 끝에 추가.pop_back(): 마지막 요소를 제거.back(): 마지막 요소를 반환(읽기 전용).push, pop, top 기능을 구현할 수 있습니다.push_back()을 호출해 데이터를 삽입합니다.pop_back()으로 마지막 요소를 제거합니다.back()을 사용합니다.front와 back이라는 인덱스를 사용해 원형 큐(Circular Queue) 방식으로 구현합니다.front 인덱스: 큐의 첫 번째 요소를 가리킵니다.back 인덱스: 큐의 마지막 요소를 가리킵니다.front와 back 인덱스는 다시 벡터의 시작으로 돌아갑니다.%)"으로 구현합니다.template<typename T>
class Stack {
public:
void push(const T& value) { _container.push_back(value); }
void pop() { _container.pop_back(); }
T& top() { return _container.back(); }
bool empty() { return _container.empty(); }
int size() { return _container.size(); }
private:
std::vector<T> _container;
};
push:_container.push_back(value)를 호출해 데이터를 벡터의 끝에 삽입합니다.pop:_container.pop_back()를 호출해 벡터의 마지막 요소를 제거합니다.top:_container.back()를 호출해 벡터의 마지막 요소를 반환합니다.empty:_container.empty()를 호출해 벡터의 크기가 0인지 확인합니다.size:_container.size()를 호출해 벡터의 크기를 반환합니다.template<typename T>
class Queue {
public:
Queue() { _container.resize(100); }
void push(const T& value) {
if (_size == _container.size()) { /* 예외 처리 */ }
_container[_back] = value;
_back = (_back + 1) % _container.size();
_size++;
}
void pop() {
_front = (_front + 1) % _container.size();
_size--;
}
T& front() { return _container[_front]; }
bool empty() { return _size == 0; }
int size() { return _size; }
private:
std::vector<T> _container;
int _front = 0, _back = 0, _size = 0;
};
생성자 (Queue()):
_container.resize(100)를 호출해 벡터의 크기를 초기화합니다.push:
_back 위치에 데이터를 삽입하고, _back 인덱스를 증가시킵니다._back이 벡터의 끝에 도달하면, 모듈로 연산 (% _container.size())을 통해 다시 처음으로 돌아갑니다.pop:
_front 인덱스를 증가시키고, 마찬가지로 모듈로 연산을 통해 순환 구조를 유지합니다.front:
_container[_front]를 호출해 벡터의 _front 위치에 저장된 데이터를 반환합니다.empty:
_size == 0이면 비어 있는 상태입니다.size:
스택:
큐: