用栈实现队列的功能,用队列实现栈的功能?

news2024/10/6 6:50:34

我们知道队列的特点是先入先出,栈的特点是后入先出,那么如何用栈实现队列的功能,又如何用队列实现栈的功能呢,且听我一一道来

我们首先来看用栈实现队列的功能,首先大伙儿要知道队列和栈的特点其实是“相反”,那么要想用栈来实现队列的功能,一个栈肯定是做不到的,我们可以用两个栈来实现,一个push栈,一个pop栈,push栈用来添加入队数据,pop栈用来出队数据,不论是入队还是出队的时候都可以加上一个检查和迁移操作,并且迁移必须遵守原则:pop栈为空,然后从push栈往pop栈迁移数据的时候必须一次性全部完成,这样就能满足先入先出的规则了

代码实现如下:

public class StackToQueue {
    private Stack<Integer> pushStack = new Stack<>();
    private Stack<Integer> popStack = new Stack<>();

//数据从push迁移到pop
    private void puToPop() {
        if (popStack.isEmpty()) {
            while (!pushStack.isEmpty()) {
                popStack.push(pushStack.pop());
            }
        }
    }

    public void enqueue(int val) {
        puToPop();
        pushStack.push(val);
    }

    public int dequeue() {
        puToPop();
        return popStack.pop();
    }

    public static void main(String[] args) {
        StackToQueue stackToQueue = new StackToQueue();
        stackToQueue.enqueue(1);
        stackToQueue.enqueue(2);
        System.err.println(stackToQueue.dequeue());
        stackToQueue.enqueue(3);
        stackToQueue.enqueue(4);
        System.err.println(stackToQueue.dequeue());
        System.err.println(stackToQueue.dequeue());
        System.err.println(stackToQueue.dequeue());
    }
}

反过来,用队列实现栈的功能也是一样,需要用两个队列,一个in队列,用来数据压栈,一个out队列,用来数据出栈,压栈正常压,出栈的时候把in队列里的数据全部挨个取出来并且挪到out队列中,但是需要保留最后一个返回,也就时说原本in存放的是12345,把1234挨个取出来丢到out里面去,返回5,然后交换in和out的引用,每一次出队的时候重复这个过程:

public class QueueToStack {
    private Queue<Integer> inQueue = new LinkedList<>();
    private Queue<Integer> outQueue = new LinkedList<>();

    public void push(int val) {
        inQueue.add(val);
    }

    public int pop() {
        while (!inQueue.isEmpty() && inQueue.size() > 1) {
            int val = inQueue.poll();
            outQueue.add(val);
        }
        int val = inQueue.poll();
        Queue<Integer> tmp = inQueue;
        inQueue = outQueue;
        outQueue = tmp;
        return val;
    }

    public static void main(String[] args) {
        QueueToStack queueToStack = new QueueToStack();
        queueToStack.push(1);
        queueToStack.push(2);
        queueToStack.push(3);
        queueToStack.push(4);
        System.err.println(queueToStack.pop());
        System.err.println(queueToStack.pop());
        System.err.println(queueToStack.pop());
        System.err.println(queueToStack.pop());
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1246710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AnalyticDB for PostgreSQL 实时数据仓库上手指南

AnalyticDB for PostgreSQL 实时数据仓库上手指南 2019-04-016601 版权 本文涉及的产品 云原生数据仓库 ADB PostgreSQL&#xff0c;4核16G 50GB 1个月 推荐场景&#xff1a; 构建的企业专属Chatbot 立即试用 简介&#xff1a; AnalyticDB for PostgreSQL 提供企业级数…

常用数据存储格式介绍:Excel、CSV、JSON、XML

在现代数字时代&#xff0c;数据经过提炼后可以推动创新、简化运营并支持决策流程。然而&#xff0c;在提取数据之后&#xff0c;并将其加载到数据库或数据仓库之前&#xff0c;需要将数据转化为可用的数据存储格式。本文将介绍开发者常用的4种数据存储格式&#xff0c;包括 Ex…

关于鸿蒙网络请求的问题

https://developer.huawei.com/consumer/cn/forum/topic/0204136145853212268?fid0102683795438680754 鸿蒙OS 代码 import http from ohos.net.http;export const httpUtils (url: string, data: any) > {return new Promise((resolve, reject) > {let httpRequest …

Re53:读论文 How Can We Know What Language Models Know?

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称&#xff1a;How Can We Know What Language Models Know? ArXiv网址&#xff1a;https://arxiv.org/abs/1911.12543 官方GitHub项目&#xff08;prompt之类的都有&#xff09;&#xff1a;https:…

问卷调查平台选择指南:哪个好用与如何选择的实用指南

问卷调查由于其成本低、数据可量化的特点&#xff0c;常被用于工作和学习中。网络的发展使得问卷调查的形式也越累越多样化&#xff0c;不少人在做问卷调查的时候可能都会提出这样一个问题——问卷调查平台哪个好用&#xff1f;怎么选择&#xff1f; 选择问卷调查平台&#xf…

【开源】基于JAVA的衣物搭配系统

项目编号&#xff1a; S 016 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S016&#xff0c;文末获取源码。} 项目编号&#xff1a;S016&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣…

IIS 基线安全加固操作

目录 账号管理、认证授权 ELK-IIS-01-01-01 ELK-IIS-01-01-02 ELK-IIS-01-01-03 ELK-IIS-01-01-04 日志配置 ELK-IIS-02-01-01 ELK-IIS-02-01-02 ​​​​​​​ ELK-IIS-02-01-03 通信协议 ELK-IIS-03-01-01 设备其他安全要求 ELK-IIS-04-01-01 ​​​​​​​ ELK-I…

App Inventor 2 数字转文本

App Inventor 2 是弱语言类型&#xff0c;文本和数字之间不用刻意去转换&#xff0c;之间赋值就可以了。 案例&#xff1a;数字转文本 App Inventor 2 是弱语言类型&#xff0c;同理数字也能直接赋值给文本变量&#xff1a; 更多请参考&#xff1a;App Inventor 2 文本代码块…

表格视图,支持数据直接编辑丨三叠云

表格视图 路径 表单设置 >> 视图设置 功能简介 新增用户可以直接表格视图中直接点击编辑数据。管理员开启「列表编辑」后&#xff0c;用户无需再点击进入数据详情&#xff0c;可直接在列表中编辑数据&#xff0c;节约用户修改数据的时间。 使用场景&#xff1a; 通…

Win10系统Steam错误代码118的解决教程

在Win10系统中&#xff0c;用户可以打开Steam平台搜索喜欢的游戏&#xff0c;点击开始畅玩。但是&#xff0c;有用户反映自己在Steam平台上操作的时候&#xff0c;收到了错误代码118的提示&#xff0c;导致自己没有办法正常进行操作。接下来小编给大家详细介绍关于解决Win10系统…

详解Rust编程中的生命周期

1.摘要 生命周期在Rust编程中是一个重要概念, 它能确保引用像预期的那样一直有效。在Rust语言中, 每一个引用都有其生命周期, 通俗讲就是每个引用在程序执行的过程中都有其自身的作用域, 一旦离开其作用域, 其生命周期也宣告结束, 值不再有效。幸运的是, 在绝大多数时间里, 生…

Dockerfile-CentOS7.9+Python3.11.2

本文为CentOS7.9下安装Python3.11.2环境的Dockerfile # CentOS with Python3.11.2 # Author xxmail.com# build a new image with basic centos FROM centos:centos7.9.2009 # who is the author MAINTAINER xxmail.comRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/…

Stable Video Diffusion(SVD)安装和测试

Stable Video Diffusion&#xff08;SVD&#xff09;安装和测试 官网 github | https://github.com/Stability-AI/generative-modelsHugging Face | https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xtPaper | https://stability.ai/research/stable-vid…

可以ping通IP但是无法远程连接-‘telnet‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

起因 一开始远程连接IP&#xff0c;报错&#xff0c;怀疑是自己网络原因&#xff0c;但是同事依旧无法连接 怀疑是自己防火墙的原因&#xff0c;查看关闭依旧无法连接 问题 两个地址可以ping通排除防火墙缘故 怀疑端口&#xff0c;测试端口 然 解决方案 winR 输入control…

关于数据库,JetBrains 最新的开发者报告里说了些什么

最近 JetBrains 也发布了一年一度的开发者生态报告。 这次是从全球 196 个国家的 35000 问卷中&#xff0c;选取了 26348 份&#xff08;工程师就是严谨&#xff0c;有零有整&#xff09;。 相比于领域内的另两大报告&#xff0c;Google 的 DORA 和 Stack Overflow Developer…

Vue基础入门(二):Vue3的创建与分析

Vue3的创建 ​ vue3 是基于 es6 的一些新特性的支持而从 vue2 升级上来的版本&#xff0c;但是 vue3 是兼容 vue2 的。 一、Vue的使用 1.1 通过CDN使用Vue ​ 你可以借助 script 标签直接通过 CDN 来使用 Vue&#xff1a; <script src"https://unpkg.com/vue3/dist…

详解Java中的异常体系机构(throw,throws,try catch,finally)

目录 一.异常的概念 二.异常的体系结构 三.异常的处理 异常处理思路 LBYL&#xff1a;Look Before You Leap EAFP: Its Easier to Ask Forgiveness than Permission 异常抛出throw 异常的捕获 提醒声明throws try-catch捕获处理 finally的作用 四.自定义异常类 一.异…

关于 Google AMP 和 SEO

Google 于 2015 年首次推出 AMP&#xff0c;即加速移动页面。借助开源 AMP 框架&#xff0c;网页设计师可以制作快速加载的移动网页。该框架的创建是为了应对使用移动设备访问互联网的个人数量的增加。从那时起&#xff0c;谷歌一直在推动使用 AMP 来增强移动设备上的 SEO 和用…

视频服务网关的三大部署(二)

视频网关是软硬一体的一款产品&#xff0c;可提供多协议&#xff08;RTSP/ONVIF/GB28181/海康ISUP/EHOME/大华、海康SDK等&#xff09;的设备视频接入、采集、处理、存储和分发等服务&#xff0c; 配合视频网关云管理平台&#xff0c;可广泛应用于安防监控、智能检测、智慧园区…

2016年10月4日 Go生态洞察:HTTP追踪介绍

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…