数据结构 栈实现队列

题目描述:

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

在做这道题目前要明白什么是栈什么是队列

栈就是后进先出的一个容器

队列就是先进先出的一个容器

然后了解栈的创建:stack<int> jinzihao;这样就创建了一个int类型名为jinzihao的栈了

下面是对栈中元素的操作:

jinzihao.push(x);表示往jinzihao这个栈里面尾部插入一个元素值为x

jinzihao.top(x);表示查找jinzihao这个栈的顶部元素值

jinzihao.pop(x); 表示弹出栈中最顶部的元素,此时栈的大小 - 1

jinzihao.empty(x);表示判断jinzihao这个栈中是否为空,如果空返回true

有了上面的知识,下面我们来看看思路:

为了模拟队列,我们要用两个栈来实现

首先写函数

void push(int x) 将元素 x 推到队列的末尾

直接使用push将x值放入stin的栈中

下面是函数

int pop() 从队列的开头移除并返回元素

注意要返回并且移除,如果我们直接使用pop只能删除stin中的最后进入的元素

所以我们要使用另外一个栈

两个栈分别为stin和stout

pop的操作分为两个情况

一:pop前函数里面没有内容(需要把stin的内容转移到stout中)

操作:stout.push(stin.top());表示把in最上面的数导入stout中

然后删除最上面的数

后面的操作和步骤二一样

二:首先找到stout.top() 并且保存到变量中

然后通过stout.pop()删除

最后把变量返回

复制代码
    int pop() {
        // 只有当stOut为空的时候,再从stIn里导入数据(导入stIn全部数据)
        if (stOut.empty()) {
            // 从stIn导入数据直到stIn为空
            while(!stIn.empty()) {
                stOut.push(stIn.top());
                stIn.pop();
            }
        }
        int result = stOut.top();
        stOut.pop();
        return result;
    }

三:函数peek 查找列表首个元素

这个函数的实现就需要用到我们刚刚写的pop函数,

思路:首先 int a = this -> pop;

这样可以把a赋值最上面的值

但是为了不影响内容要通过push把a重新放回去

最后return a;

代码:

复制代码
    int peek() {
        int res = this->pop(); // 直接使用已有的pop函数
        stOut.push(res); // 因为pop函数弹出了元素res,所以再添加回去
        return res;
    }
相关推荐
大明者省1 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
WWJA王文举2 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
zhanghaha13142 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
白狐_7983 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2583 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
Shell运维手记3 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
qq_448011164 小时前
C语言中的动态内存分配
c语言·开发语言·php
杨航 AI4 小时前
O(n log n):线性对数原理拆解 这个是排序算法的黄金复杂度之一。
算法·排序算法
船厂电气自动化ai大模型4 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光4 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口