• 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

  • 相关阅读:
    QT安装、创建项目与调试,在VS中的使用:手把手教程
    计算机网络---概述
    BCG库简介
    MySQL 8.0 如何修改密码安全策略!!!
    Linux文件出现“M-oM-;M-?” ^M 等情况
    C++ vector
    Meeting on the Line codeforces 1730B
    Clion~Clion常用配置和插件
    支持Unicode的Java正则表达式?
    【iOS开发】(六)react Native 路由嵌套传参与框架原理(完)20240423
  • 原文地址:https://blog.csdn.net/m0_72503424/article/details/127465232