diff --git a/cpp/2205/220505.cpp b/cpp/2205/220505.cpp new file mode 100644 index 0000000..ede8fbe --- /dev/null +++ b/cpp/2205/220505.cpp @@ -0,0 +1,64 @@ +#include +#include + +/** + * 225. Implement Stack using Queues + * Implement a last-in-first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty). + * + * Implement the MyStack class: + * + * void push(int x) Pushes element x to the top of the stack. + * int pop() Removes the element on the top of the stack and returns it. + * int top() Returns the element on the top of the stack. + * boolean empty() Returns true if the stack is empty, false otherwise. + * + * Notes: + * + * You must use only standard operations of a queue, which means that only push to back, peek/pop from front, size and is empty operations are valid. + * Depending on your language, the queue may not be supported natively. You may simulate a queue using a list or deque (double-ended queue) as long as you use only a queue's standard operations. + */ + +class MyStack { +private: + std::queue q; +public: + MyStack() = default; + + void push(int x) { + auto s = q.size(); + q.push(x); + // It sucks. + // It is ugly, inefficient, slow, and horrible. + while (s--) { + q.push(q.front()); + q.pop(); + } + } + + int pop() { + int ret = q.front(); + q.pop(); + return ret; + } + + int top() { + return q.front(); + } + + bool empty() { + return q.empty(); + } +}; + +int main() { + MyStack s; + s.push(1); + s.push(2); + s.push(3); + std::cout << s.top() << "\n"; + s.push(4); + s.push(5); + while (!s.empty()) { + std::cout << s.pop() << std::endl; + } +} diff --git a/cpp/2205/CMakeLists.txt b/cpp/2205/CMakeLists.txt index 5a7fe14..e25e142 100644 --- a/cpp/2205/CMakeLists.txt +++ b/cpp/2205/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2205) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2204 220505-CN.cpp) +ADD_EXECUTABLE(2204 220505.cpp)