代码随想录算法训练营第10天 | 栈和队列
理论基础
- 栈和队列是STL(C++标准库)里面的两个数据结构
- STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)
- 栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现
- 我们常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构
- deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了
- SGI STL中 队列底层实现缺省情况下一样使用deque实现的
- 我们也可以指定vector为栈的底层实现,初始化语句如下
std::stack<int, std::vector<int> > third; // 使用vector为底层容器的栈
std::queue<int, std::list<int>> third; // 定义以list为底层容器的队列
- 栈和队列不允许遍历,不提供迭代器
232.用栈实现队列
stack用法
一个栈输入,一个栈输出
class MyQueue {
public:
MyQueue() {
}
void push(int x) {
stIn.push(x);
}
int pop() {
if(stOut.empty()) {
while (!stIn.empty()) {
stOut.push(stIn.top());
stIn.pop();
}
}
int result = stOut.top();
stOut.pop(); //此pop()不返回值
return result;
}
int peek() {
if (stOut.empty()) {
while (!stIn.empty()) {
stOut.push(stIn.top());
stIn.pop();
}
}
return stOut.top();
//int res = this->pop(); // 直接使用已有的pop函数
//stOut.push(res); // 因为pop函数弹出了元素res,所以再添加回去
//return res;
}
bool empty() {
if (stOut.empty() && stIn.empty())
return true;
else
return false;
}
private:
stack<int> stIn;
stack<int> stOut;
};
225. 用队列实现栈
- 两个队列:其中一个队列用来暂时存放
class MyStack {
public:
queue<int> que1;
queue<int> que2; // 辅助队列,用来备份
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
que1.push(x);
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int size = que1.size();
size--;
while (size--) { // 将que1 导入que2,但要留下最后一个元素
que2.push(que1.front());
que1.pop();
}
int result = que1.front(); // 留下的最后一个元素就是要返回的值
que1.pop();
que1 = que2; // 再将que2赋值给que1
while (!que2.empty()) { // 清空que2
que2.pop();
}
return result;
}
/** Get the top element. */
int top() {
return que1.back();
}
/** Returns whether the stack is empty. */
bool empty() {
return que1.empty();
}
};
- 一个队列实现
class MyStack {
public:
MyStack() {
}
void push(int x) {
stack.push(x);
}
int pop() {
int size = stack.size();
while (--size) {
stack.push(stack.front());
stack.pop();
}
int result = stack.front();
stack.pop();
return result;
}
int top() {
return stack.back();
}
bool empty() {
return stack.empty();
}
private:
queue<int> stack;
};
分类:
代码随想录学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!