栈和队列java实现

news2025/1/16 20:13:24

栈和队列都是动态集合,且在其上进行DELETE操作所移除的元素是预先设定的。在栈中,被删除的是最近插入的元素:栈实现的是一种后进先出(last-in,first-out,LIFO) 策略。在队列中,被删去的总是在队列中存在时间最长的那个元素:队列实现的是一种先进先出(first-in,first-out,FIFO) 策略。

可以用一个数组A[1…n]来实现一个最多可容纳n个元素的栈。同时,需要有一个top属性,指向数组最新插入的元素,即栈顶元素。栈中包含的元素为S[1…top],其中S[1]是栈底元素。栈的示意图如下:
在这里插入图片描述
基于java数组简单实现的栈,代码如下:

/**
 * 数据结构-栈
 */
public class MyStack {
    /**
     * 栈顶指针
     */
    private int top;

    /**
     * 保存栈中数据的数组,默认初始容量为10
     */
    private int[] data;

    public MyStack() {
        this.data = new int[10];
    }

    public MyStack(int cap) {
        this.data = new int[cap];
    }

    /**
     * 判断栈是否为空
     *
     * @return 是否为空
     */
    public boolean isEmpty() {
        return this.top == 0;
    }

    /**
     * 入栈操作
     *
     * @param num 入栈的元素
     */
    public void push(int num) {
        // 保存数据的数组已满,需要扩容
        if (this.top == this.data.length - 1) {
            throw new Error("stack is full!");
        }
        this.top++;
        this.data[this.top] = num;
    }

    /**
     * 弹出栈顶元素
     *
     * @return 栈顶元素
     */
    public int pop() {
        if (isEmpty()) {
            throw new Error("stack is under flow!");
        }
        this.top--;
        return this.data[this.top + 1];
    }
}

队列

队列有队头(head)和队尾(tail)。head属性指向队头元素,tail属性指向下一个新元素将要插入的位置。基于数组实现的队列,示意图如下:
在这里插入图片描述
基于java数组简单实现的队列,代码如下:

/**
 * 数据结构-队列
 */
public class MyQueue {
    /**
     * 队头,指向队列的第一个元素
     */
    private int head = 0;

    /**
     * 队尾,指向下一个新元素将要插入的位置
     */
    private int tail = 0;

    /**
     * 队列中的元素个数
     */
    private int size = 0;

    /**
     * 数据
     */
    private final int[] data;

    public MyQueue() {
        this.data = new int[10];
    }

    public MyQueue(int cap) {
        data = new int[cap];
    }

    public boolean isEmpty() {
        return size == 0;
    }

    /**
     * 入队操作
     *
     * @param num 将要入队的元素
     */
    public void enQueue(int num) {
        if (size == data.length) {
            throw new Error("queue is full!");
        }
        data[tail] = num;
        size++;
        if (tail == data.length - 1) {
            tail = 0;
        } else {
            tail++;
        }
    }

    /**
     * 出队操作
     *
     * @return 队头元素
     */
    public int deQueue() {
        if (size == 0) {
            throw new Error("queue is empty!");
        }
        int x = data[head];
        size--;
        if (head == data.length - 1) {
            head = 0;
        } else {
            head++;
        }
        return x;
    }
}

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

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

相关文章

问鼎web服务

华子目录 www简介常见Web服务程序介绍:服务器主机主要数据浏览器网址及http介绍urlhttp请求方法 http协议请求的工作流程www服务器类型静态网站动态网站 快速安装Apache安装准备工作httpd所需目录主配置文件 实验操作 www简介 Web网络服务也叫www(world…

K8S部署mongodb-sharded-cluster(7.0.2)副本分片

添加源 helm repo add bitnami https://charts.bitnami.com/bitnami指定版本拉取 helm pull --repo https://charts.bitnami.com/bitnami mongodb-sharded --version 7.0.5安装时选择SCRAM-SHA-1默认是SCRAM-SHA-256 helm install -n prod mymongodb mongodb-sharded --value…

优先级队列(priority_queue)

文章目录 优先级队列的定义定义:接口头文件优先队列和堆的关系使用:排序的规则容器 仿函数应用 队列存指针问题: 优先级队列的定义 定义: 黄色部分是仿函数 接口 头文件 这里不需要包含其他的头文件只需要使用队列的头文件就可以…

蓝桥杯每日一题2023.11.22

题目描述 题目分析 由题目知其每个品牌积分一定小于315故直接暴力枚举每个品牌如果符合要求直接输出即可 &#xff08;答案&#xff1a;150&#xff09; #include<bits/stdc.h> using namespace std; int main() {for(int i 1; i < 315; i ){for(int j 1; j <…

三、防火墙-源NAT

学习防火墙之前&#xff0c;对路由交换应要有一定的认识 源NAT基本原理1.1.NAT No-PAT1.2.NAPT1.3.出接口地址方式&#xff08;Easy IP&#xff09;1.4.Smart NAT1.5.三元组 NAT1.6.多出口场景下的源NAT 总结延伸 ——————————————————————————————…

python实现调和反距离空间插值法AIDW

1 简介 AIDW 主要是针对 IDW 的缺点进行了改进&#xff0c;考虑了样本点与预测点的位置&#xff0c;即方向和距离&#xff0c;具体见下图&#xff1a; 2 改进 IDW 公式&#xff1a; 从IDW算法可看出&#xff0c;插值点的估算值仅与插值样本距插值点的远近相关&#xff0c;并未…

基于鹈鹕算法优化概率神经网络PNN的分类预测 - 附代码

基于鹈鹕算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鹈鹕算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鹈鹕优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

【LeetCode刷题】--40.组合总和II

40.组合总和II 本题详解&#xff1a;回溯算法 class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len candidates.length;List<List<Integer>> res new ArrayList<>();if (len 0) {return re…

基于python人脸性别年龄检测系统-深度学习项目

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介技术组成1. OpenCV2. Dlib3. TensorFlow 和 Keras 功能流程 二、功能三、系统四. 总结 一项目简介 # Python 人脸性别年龄检测系统介绍 简介 该系统基…

Windows、VMware问题集合

Windows、VMware问题集合 一. Windows11安装VMware17提升虚拟机性能1. 桌面右击图标点击属性——>兼容性&#xff0c;找到“以管理员身份运行此程序”勾选&#xff0c;最后点击确定即可。2. 关闭win11的内核隔离功能。 二. VMware虚拟机报错&#xff08;虚拟化性能计数器需要…

UML建模图文详解教程——类图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 类图概述 类图用来描述系统内各种实体的类型以及不同…

计算机毕业设计 基于微信小程序的“共享书角”图书借还管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

非结构化数据保护

计算机信息化系统中的数据分为结构化数据和非结构化数据。非结构化数据其格式非常多样&#xff0c;标准也是多样性的&#xff0c;而且在技术上非结构化信息比结构化信息更难标准化和理解。 非结构化数据是数据结构不规则或不完整&#xff0c;没有预定义的数据模型&#xff0c;…

阿里云 ACK 新升级,打造智算时代的现代化应用平台

云布道师 今天&#xff0c;能想到的或是想不到的领域&#xff0c;对容器和 Kubernetes 的需求都居高不减&#xff0c;使这项技术正在真正走向无处不在。 在 2023 云栖大会上&#xff0c;阿里云云原生产品线容器服务负责人易立关于容器服务 ACK 在本届亚运会上应用的介绍&#…

智慧法院档案数字化解决方案

智慧法院档案数字化解决方案可以采用以下步骤&#xff1a; 1. 确定数字化目标&#xff1a;明确数字化的目标和范围&#xff0c;比如将所有的案件相关文件、纸质档案和材料进行数字化。 2. 确定数字化流程&#xff1a;制定数字化的流程和标准&#xff0c;比如采用哪些设备和软件…

连接k8s和凌鲨

通过连接k8s和凌鲨&#xff0c;可以让研发过程中的重用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 架构 所有操作通过k8s proxy连接&#xff0c;通过设置namespace label赋予访问权限。只有赋予特定label的namespace才能被访问。 使用步骤 部署k8s proxy 你…

「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」

介绍 使用Docker开发Golang云原生应用程序&#xff0c;使用Golang服务和Redis服务 注&#xff1a;写得很详细 为方便我的朋友可以看懂 环境部署 确保已经安装Go、docker等基础配置 官网下载链接直达&#xff1a;Docker官网下载 Go官网下载 操作步骤 第一步 创建一个…

io+day5

1&#xff0c;select服务端 1 #include<myhead.h>2 3 #define PORT 8888 //端口号4 #define IP "192.168.228.165" //IP地址5 6 7 int main(int argc, const char *argv[])8 {9 //1、创建用于接受连接的套接字10 int sfd socket(…

elasticsearch安装分词器插件

查看插件安装情况 elasticsearch-plugin list 插件在线安装 bin/elasticsearch-plugin install analysis-icu 离线安装ik分词 cd plugins wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.7/elasticsearch-analysis-ik-7.17.7.zip unzi…

区域人员超限AI算法的介绍及TSINGSEE视频智能分析技术的行业应用

视频AI智能分析已经渗透到人类生活及社会发展的各个方面。从生活中的人脸识别、停车场的车牌识别、工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品的品质缺陷AI检测等&#xff0c;AI智能分析技术无处不在。在某些场景中&#xff0c;重点区域的人数统计与…