add: 220505 [cpp]

This commit is contained in:
Eat-Swap 2022-05-05 22:37:33 +08:00
parent d5b8e06333
commit c9c4474306
Signed by: Eatswap
GPG Key ID: BE661106A1F3FA0B
2 changed files with 65 additions and 1 deletions

64
cpp/2205/220505.cpp Normal file
View File

@ -0,0 +1,64 @@
#include <queue>
#include <iostream>
/**
* 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<int> 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;
}
}

View File

@ -3,4 +3,4 @@ PROJECT(2205)
SET(CMAKE_CXX_STANDARD 23) SET(CMAKE_CXX_STANDARD 23)
ADD_EXECUTABLE(2204 220505-CN.cpp) ADD_EXECUTABLE(2204 220505.cpp)