대기열을 사용하여 하나의 스택을 구현하려고 한다고 가정합니다. 스택에 대해 이러한 메서드를 정의해야 합니다.
-
push(x) - x를 스택에 푸시합니다.
-
pop() - 스택에서 맨 위 요소 삭제 및 반환
-
top() - 스택에서 최상위 요소를 반환합니다.
-
empty() - 스택이 비어 있는지 여부를 반환합니다.
따라서 push(10), push(20) 함수를 호출한 다음 pop(), pop()을 호출하면 출력은 20, 10이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
하나의 데크 q 정의
-
push() 함수를 정의하면 x가 필요합니다.
-
q 시작 부분에 x 삽입
-
함수 정의 pop()
-
k :=q의 첫 번째 요소
-
q에서 앞 요소 삭제
-
k를 반환
-
함수 정의 top()
-
q
의 첫 번째 요소를 반환 -
empty() 함수 정의
-
q가 비어 있으면 -
-
true를 반환
-
-
그렇지 않으면
-
거짓을 반환
-
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; class MyStack { private: deque<int> q; public: void push(int x){ q.push_front(x); } int pop(){ int k = q.front(); q.pop_front(); return k; } int top(){ return q.front(); } bool empty(){ if (q.empty()) return true; else return false; } }; main(){ MyStack ob; ob.push(10); ob.push(20); cout << (ob.pop()) << endl; cout << (ob.pop()) << endl; }
입력
push(10),push(20),pop(),pop()
출력
20 10