栈、队列简介

  • 栈(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(栈,队列)相关推荐

  1. 【代码随想录刷题记录】 232.用栈实现队列 、225. 用队列实现栈

    232.用栈实现队列 题目 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x ...

  2. 代码随想录第二十五天|组合、电话号码的字母组合

    代码随想录第二十五天|216.17不熟 Leetcode 216. 组合总和 III Leetcode 17. 电话号码的字母组合 Leetcode 216. 组合总和 III 题目链接: 组合总和 ...

  3. 代码随想录第十天 | 225. 用队列实现栈 232.用栈实现队列(Java))

    232.用栈实现队列 class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue( ...

  4. LeetCode 232. 用栈实现队列(双栈法-队列)

    1. 题目 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元素. peek() – 返回队列首部的元素. empty() – 返回队列是否为 ...

  5. LeetCode Algorithm 225. 用队列实现栈

    225. 用队列实现栈 Ideas 队列和栈的相互操作,需要特别理解栈和队列这两种数据结构的相同点和不同点. 栈:先进后出,队列:先进先出. 既然数据结构已经限定元素进出的顺序,那么单纯的用一个队列肯 ...

  6. 代码随想录 第二十四天 17.电话号码的字母组合||216.组合总和III

    216.组合总和III 力扣题目链接(opens new window) 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: ...

  7. 代码随想录第二十五天|261.组合总和、17.电话号码的字母组合

    261.组合总和 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. class Solution { private:vector& ...

  8. 【Java】LeetCode 232. 用栈实现队列

    题目描述 : 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x) 将元素 x ...

  9. leetcode 232. 用栈实现队列 思考分析

    题目 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列的支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到 ...

  10. Leetcode 232. 用栈实现队列 解题思路及C++实现

    解题思路: 使用两个栈,一个栈a用来存储每一次操作得到的队列,另一个栈b作为辅助栈. 在每一次push操作的时候,先把a中排好的队列(先进先出),依次push进栈b,所以,栈b中元素的排序就是后进先出 ...

最新文章

  1. (五)Docker镜像和容器
  2. VisualSVN server 无法启动
  3. 趣味c语言编程100例(一)
  4. Python与Java之间的相互调用——Jython
  5. MySQL8改root密码
  6. data source from bit.ly
  7. Java EE 6 VS Spring 3:Java EE杀死了Spring? 没门!
  8. Maven常用的构建命令
  9. PyTorch中的model.modules(), model.children(), model.named_children(), model.parameters(), model.nam...
  10. mybaitis动态sql利用bind标签代替%拼接完成模糊查询
  11. struts2登录注册示例_Struts 2文件上传示例
  12. WDF pci驱动开发的若干总结
  13. 前端页面性能优化的几种方式(强烈推荐)
  14. 英特尔凌动处理器_教你看懂英特尔处理器:什么是Core i3,i5,i7 和Pentium?
  15. 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
  16. “金三银四” “阿里” 我去定了,谁也拦不住我,这份《Android面试宝典》说的
  17. 《精通以太坊》预言机
  18. SVN上传、更新、添加、删除文件、版本回退
  19. vue 解决路由重复点击报错
  20. web实验报告——JSP动态网页编程

热门文章

  1. Corosync双心跳冗余方案配置
  2. 根据经纬度查询地理位置API
  3. SpringBoot整体开发的详细过程(待完结)
  4. 小程序超过部分隐藏,不起作用
  5. 计算机如何连接iphone,iPhone6如何连接到电脑?iPhone6连接到电脑图解教程
  6. 小程序之botton默认带边框的问题
  7. 材料阻尼测试原理、方法、装置和内耗分析的应用
  8. 《中国睡眠研究报告2022》:被调查大学生睡前不看手机的不足3%
  9. 作为兼并重组的重要方式之一,企业合并、分立的具体形式?
  10. 初探springboot的荆棘之路