代码随想录算法训练营day10(day13补) | 232.用栈实现队列 225.用队列实现栈
栈与队列理论基础
- deque为缺省指定底层实现的stack和queue的默认底层结构。
- STL中栈和队列不被归为容器,而被归为容器适配器。
- 栈先进后出,队列先进先出。
刷题笔记day10
232.用栈实现队列
文章讲解:代码随想录
是否自己做出来通过全部用例:是
遇到的困难/犯的错误
创建两个stack,相当于倒序排列来获取头部元素。
自己写的代码
class MyQueue {
public:
stack<int> stin;
stack<int> stout;
MyQueue() {
}
void push(int x) {
stin.push(x);
}
int pop() {
if (stout.empty()) {
while (!stin.empty()) {
int out = stin.top();
stin.pop();
stout.push(out);
}
}
int result = stout.top();
stout.pop();
return result;
}
int peek() {
int result = this->pop();
stout.push(result);
return result;
}
bool empty() {
if (stin.empty() && stout.empty()) {
return true;
}
else {
return false;
}
}
};
看了题解后的收获
- 两个stack都为空则empty()为true。
- 每次要提取或删除头元素的时候判断stout是否为空,空则将stin的元素全部倒序移入,非空则直接从stout中提取或删除元素。
225.用队列实现栈
文章讲解:代码随想录
是否自己做出来通过全部用例:否
遇到的困难/犯的错误
用队列删除队尾元素的机制。
自己写的代码
看了题解后写的代码:
class MyStack {
public:
queue<int> quein;
queue<int> queout;
MyStack() {
}
void push(int x) {
quein.push(x);
}
int pop() {
int size = quein.size();
--size;
while (size--) {
queout.push(quein.front());
quein.pop();
}
int result = quein.front();
quein.pop();
size = queout.size();
while (size--) {
quein.push(queout.front());
queout.pop();
}
return result;
}
int top() {
int result = this->pop();
quein.push(result);
return result;
}
bool empty() {
return quein.empty();
}
};
看了题解后的收获
善用queue的机制,掌握用单queue实现stack的解法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 jhhuangのblog!