码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Day9——用栈实现队列、用队实现拟栈


    今天是算法训练的第9天

    目录

    前言

    题目来源:

    解题思路:

    二、用队列模拟栈

    题目来源:

    解题思路1(双队列):

    解题思路2(循环队列):

    总结


    前言

    今日文案:

    已是悲秋之境,又何以有悲秋之心,不忍在这深秋里独自忧思,因而更愿意让一切伤秋之感随深秋沉淀,埋藏在这季节的最深处,不再萌发伤感之意。


    一、用栈实现队列

    题目来源:

    力扣

    解题思路:

    栈的特点:先入后出,后入先出,就是一层一层铺上去,只能从上面开始吃。

    队列特点:顾名思义,排队,先到先出。

    那用栈来实现我们要怎么做,如果一碗饭,我们想从最下面吃起来,我们只需要找多一个碗,然后把饭盖过去,不就是底层变表层,表层变底层了吗。栈也是如此,创建两个栈就可以实现。

    代码如下:

    1. class MyQueue {
    2. public:
    3. stack<int> st1; //创建两个栈
    4. stack<int> st2;
    5. MyQueue() {
    6. }
    7. void push(int x) {
    8. st1.push(x); //1栈插入元素
    9. }
    10. int pop() {
    11. if(st2.empty()) //如果2栈是空的,直接全盘接受1栈的饭
    12. {
    13. while(!st1.empty()) //知道1栈变空
    14. {
    15. st2.push(st1.top()); //插入1栈的头
    16. st1.pop(); //1栈去头,这样就是一层一层扒下来了
    17. }
    18. }
    19. int w=st2.top(); //接受2栈头元素
    20. st2.pop(); //去头,为下次做准备
    21. return w;
    22. }
    23. int peek() {
    24. int res = pop(); //这里只有一个点,为什么不直接返会st2.top(),因为2可能没东西
    25. st2.push(res);
    26. return res;
    27. }
    28. bool empty() {
    29. return st2.empty()&&st1.empty();
    30. }
    31. };

    二、用队列模拟栈

    题目来源:

    力扣

    解题思路1(双队列):

    开两条队列,让需要出去的元素出去,这就像是一条堵车的车道,旁边有一块空地,每次后面的车要出去了,就去另外一块空地呆着,让后面的车出去。这种办法比较冗余。

    解题思路2(循环队列):

    上面的方法是走去外面的空地等,所有有两条队,那我们如果可以让前面的人走到队尾重新排队,不就需要一条队伍了吗。

    代码如下:

    1. class MyStack {
    2. public:
    3. queue<int> que;
    4. MyStack() {
    5. }
    6. void push(int x) {
    7. que.push(x);
    8. }
    9. int pop() {
    10. int size=que.size();
    11. size--; //减1,留下最后那个
    12. while(size--)
    13. {
    14. que.push(que.front()); //重新排队
    15. que.pop();
    16. }
    17. int ans=que.front(); //重新排好后,第一位就是原来的最后一位
    18. que.pop();
    19. return ans;
    20. }
    21. int top() {
    22. return que.back();
    23. }
    24. bool empty() {
    25. return que.empty();
    26. }
    27. };

    总结

    今天的内容就这么多,只是简单了解了一下队列,加油!!1

  • 相关阅读:
    TensorFlow机器学习实战指南 PDF书籍推荐
    jvm深入研究文档--jvm分区以及职责
    js实现防抖函数,输入框持续输入打印最终的值
    网络安全之防范钓鱼邮件
    [NOI2019]序列
    MySQL事务(Transaction)
    【零基础学Python】运算符
    小白学流程引擎-FLowable(二) — 从零搭建自己的FLowable服务 — 搭建流程服务-FLowable的新手指南
    Windows 95 的辉煌诞生历史
    Effective Modern C++[实践]->优先选用别名声明,而非typedef
  • 原文地址:https://blog.csdn.net/m0_72503424/article/details/127465232
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号