前言
LeetCode题目:LeetCode 232、225
Takeaway:栈和队列的基础知识,不涉及算法,主要是理解并且模拟。
一、LeetCode 232
没什么好说的,没有算法,全是模拟,理解什么是栈什么是队列就好。
class MyQueue {
public:
stack<int> stIn;
stack<int> stOut;
MyQueue() {
}
void push(int x) {
stIn.push(x);
}
int pop() {
int num;
while(stIn.size()!=0){
num = stIn.top();
stIn.pop();
stOut.push(num);
}
int outNum = stOut.top();
stOut.pop();
while(stOut.size()!=0){
num = stOut.top();
stOut.pop();
stIn.push(num);
}
return outNum;
}
// 逻辑和pop()几乎一模一样
int peek() {
int num;
while(stIn.size()!=0){
num = stIn.top();
stIn.pop();
stOut.push(num);
}
int outNum = stOut.top();
while(stOut.size()!=0){
num = stOut.top();
stOut.pop();
stIn.push(num);
}
return outNum;
}
bool empty() {
return stIn.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
二、LeetCode 225
同上,全是模拟,唯一值得注意的是队列删除最后一个元素不一样。
class MyStack {
public:
queue<int> queIn;
queue<int> queOut;
MyStack() {
}
void push(int x) {
queIn.push(x);
}
int pop() {
int num;
// 这里是1,因为最后一个元素要删除
while(queIn.size()!=1){
num = queIn.front();
queIn.pop();
queOut.push(num);
}
int outNum = queIn.front();
queIn.pop();
// 注意这里是大小不能等于0!
while(queOut.size()!=0){
num = queOut.front();
queOut.pop();
queIn.push(num);
}
return outNum;
}
int top() {
return queIn.back();
}
bool empty() {
return queIn.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
总结
今天的题没有难度,全是模拟,主要是需要理解栈和队列的意义。