代码随想录第十天 LeetCode 232、225(栈,队列)
栈、队列简介
栈(stack):栈是STL中的一种数据结构,数据先进后出。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能),所以在STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。
下面介绍一下常用函数:stack<int> st; st.push(); //压入 st.pop(); //弹出 st.top(); //返回栈顶元素 st.size(); st.empty();
队列(queue):队列也是STL中的一种数据结构,数据先进先出。和栈一样,队列在STL中也是一种容器适配器。
常用函数:queue<int> que; que.push(); //队尾插入 que.pop(); //队首弹出 que.front(); //返回队首 que.back(); //返回队尾 que.empty(); que.size();
两者在STL中底层都是由deque
即双向队列实现,其中栈可以使用list、deque和vector实现,而队列不能使用vector实现,因为queue转换器要求容器支持front()、back()操作。
232.用栈实现队列
本题使用两个栈来模拟队列,一个做输入,一个做输出。唯一需要注意的就是模拟pop
弹出的操作,经过模拟可以发现,输出栈如果为空,就把进栈数据全部导入进来,再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。下面直接给出代码:
class MyQueue {public:stack<int> stin;stack<int> stout;MyQueue() {}void push(int x) {stin.push(x);}int pop() {if(!stout.empty()){int temp = stout.top();stout.pop();return temp;}else{int temp;while(!stin.empty()){temp = stin.top();stout.push(temp);stin.pop();}stout.pop();return temp;}}int peek() {if(!stout.empty()) return stout.top();else{int temp;while(!stin.empty()){temp = stin.top();stout.push(temp);stin.pop();}return temp;}}bool empty() {if(stin.empty() && stout.empty()) return true;return false;}
};/*** 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();*/
这里在写peek()
函数时,可以直接使用this
指针调用pop
方法:
int peek() {int res = this->pop(); // 直接使用已有的pop函数stout.push(res); // 因为pop函数弹出了元素res,所以再添加回去return res;}
225. 用队列实现栈
其实也是一个模拟的过程,并不难,直接看代码:
class MyStack {public:queue<int> que;MyStack() {}void push(int x) {que.push(x);}int pop() {for(int i = 1; i < que.size(); i++){int temp = que.front();que.pop();que.push(temp);}int temp = que.front();que.pop();return temp;}int top() {int temp = this->pop();que.push(temp);return temp;}bool empty() {if(que.empty()) return true;else return false;}
};/*** 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();*/
继续加油!
代码随想录第十天 LeetCode 232、225(栈,队列)相关推荐
- 【代码随想录刷题记录】 232.用栈实现队列 、225. 用队列实现栈
232.用栈实现队列 题目 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x ...
- 代码随想录第二十五天|组合、电话号码的字母组合
代码随想录第二十五天|216.17不熟 Leetcode 216. 组合总和 III Leetcode 17. 电话号码的字母组合 Leetcode 216. 组合总和 III 题目链接: 组合总和 ...
- 代码随想录第十天 | 225. 用队列实现栈 232.用栈实现队列(Java))
232.用栈实现队列 class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue( ...
- LeetCode 232. 用栈实现队列(双栈法-队列)
1. 题目 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元素. peek() – 返回队列首部的元素. empty() – 返回队列是否为 ...
- LeetCode Algorithm 225. 用队列实现栈
225. 用队列实现栈 Ideas 队列和栈的相互操作,需要特别理解栈和队列这两种数据结构的相同点和不同点. 栈:先进后出,队列:先进先出. 既然数据结构已经限定元素进出的顺序,那么单纯的用一个队列肯 ...
- 代码随想录 第二十四天 17.电话号码的字母组合||216.组合总和III
216.组合总和III 力扣题目链接(opens new window) 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: ...
- 代码随想录第二十五天|261.组合总和、17.电话号码的字母组合
261.组合总和 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. class Solution { private:vector& ...
- 【Java】LeetCode 232. 用栈实现队列
题目描述 : 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x) 将元素 x ...
- leetcode 232. 用栈实现队列 思考分析
题目 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列的支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到 ...
- Leetcode 232. 用栈实现队列 解题思路及C++实现
解题思路: 使用两个栈,一个栈a用来存储每一次操作得到的队列,另一个栈b作为辅助栈. 在每一次push操作的时候,先把a中排好的队列(先进先出),依次push进栈b,所以,栈b中元素的排序就是后进先出 ...
最新文章
- (五)Docker镜像和容器
- VisualSVN server 无法启动
- 趣味c语言编程100例(一)
- Python与Java之间的相互调用——Jython
- MySQL8改root密码
- data source from bit.ly
- Java EE 6 VS Spring 3:Java EE杀死了Spring? 没门!
- Maven常用的构建命令
- PyTorch中的model.modules(), model.children(), model.named_children(), model.parameters(), model.nam...
- mybaitis动态sql利用bind标签代替%拼接完成模糊查询
- struts2登录注册示例_Struts 2文件上传示例
- WDF pci驱动开发的若干总结
- 前端页面性能优化的几种方式(强烈推荐)
- 英特尔凌动处理器_教你看懂英特尔处理器:什么是Core i3,i5,i7 和Pentium?
- 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
- “金三银四” “阿里” 我去定了,谁也拦不住我,这份《Android面试宝典》说的
- 《精通以太坊》预言机
- SVN上传、更新、添加、删除文件、版本回退
- vue 解决路由重复点击报错
- web实验报告——JSP动态网页编程