数据结构(Java实现)-栈和队列

news2024/9/17 9:05:39

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。
先进后出
在这里插入图片描述


在这里插入图片描述


栈的使用
在这里插入图片描述

在这里插入图片描述


栈的模拟实现
在这里插入图片描述

在这里插入图片描述
上述的主要代码

public class MyStack {
    private  int[] elem;
    private int usedSize;

    public MyStack() {
        this.elem = new int[5];
    }

    @Override
    public String toString() {
        return "MyStack{" +
                "elem=" + Arrays.toString(elem) +
                ", usedSize=" + usedSize +
                '}';
    }

    //压栈
    public void push(int val){
        if(isFull()){
            elem=Arrays.copyOf(elem,2*elem.length);
        }
        elem[usedSize++]=val;

    }
    public boolean isFull(){
        return this.usedSize==elem.length;
    }

    //出栈
    public int pop(){
        if(empty()){
            throw new StackEmptyException("栈内元素为空");
        }
        return elem[--usedSize];
    }
    public  boolean empty(){
        return usedSize==0;
    }

    //获取栈顶元素
    public int peek(){
        if(empty()){
            throw new StackEmptyException("栈内元素为空");
        }
        return elem[usedSize-1];
    }

}

改变元素的序列
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述


将递归转化为循环
比如:逆序打印链表
在这里插入图片描述
结果如下
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


队列的使用
Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口
在这里插入图片描述
在这里插入图片描述


队列模拟实现(利用双向链表)
先考虑一般情况,再考虑特殊情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


循环队列
环形队列通常使用数组实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意事项
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码如下
在这里插入图片描述


双端队列 (Deque)
双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。
栈和队列均可以使用该接口。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


用栈实现队列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


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

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

相关文章

iPhone 15 Pro与谷歌Pixel 7 Pro:哪款相机手机更好?

考虑到苹果最近将更多高级功能转移到iPhone Pro设备上的趋势,今年秋天iPhone 15 Pro与谷歌Pixel 7 Pro的对决将是一场特别有趣的对决。去年发布的iPhone 14 Pro确实发生了这种情况,有传言称iPhone 15 Pro再次受到了苹果的大部分关注。 预计iPhone 15系列会有一些变化,例如切…

G. The Morning Star - 思维

分析: 直接暴力就会tle,不知道怎么下手,可以统计八个方向一条线上的所有坐标,这些坐标一定可以放在一起满足,分析都有哪些线,当横坐标相同时会有竖着的一条线都可以,也就是x c,当纵…

服务器安全-禁止ping

1、临时禁ping #禁ping echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all#启用ping echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all 2.永久禁ping(如果有此配置就无需重复添加,仅更新值即可) #禁ping echo "net.ipv4.icmp_echo_ignore_all1" >>…

【Linux】进程通信 — 信号(上篇)

文章目录 📖 前言1. 什么是信号1.1 认识信号:1.2 信号的产生:1.3 信号的异步:1.4 信号的处理: 2. 前后台进程3. 系统接口3.1 signal:3.1 - 1 不能被捕捉的信号 3.2 kill:3.2 - 1 killall 3.3 ra…

15.live555mediaserver-rtp打包

live555工程代码路径 live555工程在我的gitee下(doc下有思维导图、drawio图): live555 https://gitee.com/lure_ai/live555/tree/master 章节目录链接 0.前言——章节目录链接与为何要写这个? https://blog.csdn.net/yhb1206/art…

每天一道动态规划——第一天

动态规划一定要去尝试!题目一: 1)题目描述 一共有N个位置,机器人从当前位置cur走到目标位置aim,有res步可以走,问一共有多少种方法。 题目示例: 1 2 3 4 5 6 N6|cur2|aim3|res3 结果&#xf…

suricata初体验+wireshark流量分析

目录 一、suricata介绍 1.下载安装 2.如何使用-攻击模拟 二、wireshark流量分析 1.wireshark过滤器使用 2.wireshark其他使用 一、suricata介绍 1.下载安装 通过官网下载suricata,根据官网步骤进行安装。 官网地址: https://documentation.wazuh.…

Python高光谱遥感数据处理与高光谱遥感机器学习方法应用

本文提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 本文涵盖高光谱遥感的基础、方法和实践。基础篇以学员为中心,用通俗易懂的语言解释高光谱的基本概念和理论,旨在帮助学员深入理解科学原理。方法篇结合Python编程工具,专注…

二叉树的层序遍历及完全二叉树的判断

文章目录 1.二叉树层序遍历 2.完全二叉树的判断 文章内容 1.二叉树层序遍历 二叉树的层序遍历需要一个队列来帮助实现。 我们在队列中存储的是节点的地址,所以我们要对队列结构体的数据域重定义, 以上代码 从逻辑上来讲就是1入队,1出队&am…

【信创】未写完

信创比赛 模块A任务二:docker容器集群管理 模块C子任务一:数据库部署子任务二:数据库参数配置子任务三:数据库管理 模块A 任务二:docker容器集群管理 1.docker run 新建创建容器 2.docker loan 将文件导入镜像库里(将该文件变成镜…

DDR PHY

1.ddr phy架构 1.pub(phy unility block) 支持特性: (1)不支持SDRAM的DLL off mode (2)数据位宽是以8bit逐渐递增的(这样做的目的是因为可能支持16/32/64bit的总线位宽&#xff…

STM32F103 4G Cat.1模块EC200S使用

一、简介 EC200S-CN 是移远通信最近推出的 LTE Cat 1 无线通信模块,支持最大下行速率 10Mbps 和最大上行速率 5Mbps,具有超高的性价比;同时在封装上兼容移远通信多网络制式 LTE Standard EC2x(EC25、EC21、EC20 R2.0、EC20 R2.1&a…

QtCreator指定Windows Kits版本

先说下事件起因:之前一直在用Qt5.12.6+vs2017在写程序,后面调研了一个开源库Qaterial,但是翻来覆去的编译都有问题,后面升级到了Qt5.15.2+vs2019来进行cmake的编译,搞定了Qaterial,但…

家长如何将ChatGPT成为家庭日常活动的得力助手

人工智能已经在许多领域发挥作用,如播放音乐、关闭灯光和帮助我们更安全地驾驶。那么,在养育孩子方面呢? 使用像ChatGPT这样的应用,家长们可以更好地完成任务,但同时也要了解其中存在的风险。 许多家长表示&#xff…

KVM创建虚拟机可访问外网+可使用Xshell等工具连接

创建虚拟机时使用桥接网络模块即可,如下: 1、创建一个存储卷(虚拟机的磁盘) 2、创建虚拟机时选择网络 3、系统安装完成后配置固定IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOTyes BOOTPROTOstatic IPADDR16.32.15.60 GATEWAY16.32.15.2…

【JasperReport笔记05】JasperReport指定自定义字体文件,解决中文不显示问题

这篇文章,主要介绍JasperReport指定自定义字体文件,解决中文不显示问题。 目录 一、自定义字体文件 1.1、创建字体配置文件 1.2、创建fonts.xml字体文件 1.3、在Jasper Studio中添加字体 1.4、指定模板文件 1.5、案例代码 1.6、运行测试 1.7、服…

Base64与cv2读取的图片,格式互转

Base64编码 Base64编码是一种将二进制数据转换为可打印字符的方式,以便在文本格式中传输或存储。它通常用于将二进制数据编码为ASCII字符串,以便在电子邮件、网页或XML文件中传输。 Base64编码的原理是将3个8位字节的数据(即24位二进制数据…

最近在干什么

不知不觉这个月要过去一大半了,说好的一个月更新一两篇博客又要食言了。就来随便聊聊最近在干的事吧。 以图说话,作为程序员还有什么比 Git 提交记录更好说明你最近工作状态的呢。 当然这里所有的提交记录仅仅来自一个 Repository (库) ,就是…

【Acwing338】计数问题题解

题目描述 举个栗子分类讨论 求a~b中x的个数,可以转换为1~b中x的个数减去1~a-1中x的个数 所以核心是求1~n中x的个数,可以转换为求x在1~n中每一个数的每一位上出现的次数的和 假设要求1~abcdefg(这是一个七位数)中x1的个数&#…

Shell基础_Shell概述及脚本执行方式

文章目录 1. Shell概述1.1 Shell是什么1.2 Shell的分类1.3 Linux支持的Shell1.4 总结 2. Shell脚本的执行方式2.1 echo输出命令2.2 第一个脚本2.3 脚本执行 1. Shell概述 1.1 Shell是什么 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行…