【Java】栈和队列的模拟实现(包括循环队列)

news2024/11/18 19:38:44


异常为空栈异常:

public class EmptyStackException extends RuntimeException {
    public  EmptyStackException(){

    }
    public  EmptyStackException(String msg){
        super(msg);
    }

}

循环队列:

class MyCircularQueue {
    public  int[] elem;
    public  int front;//队头下标
    public  int rear;//队尾下标
    public MyCircularQueue(int k) {
        this.elem=new  int[k+1];
    }

    //入队
    public boolean enQueue(int value) {
        if(isFull()){
            return  false;
        }
        this.elem[rear]=value;
        rear=(rear+1) % elem.length;
        return  true;
    }
    //出队
    public boolean deQueue() {
        if (isEmpty()){
            return  false;
        }

        front=(front+1)%elem.length;
        return  true;

    }
    //获取队头元素
    public int Front() {
        if (isEmpty()){
            return  -1;
        }
        return  elem[front];

    }
    //获取队尾元素
    public int Rear() {
        if (isEmpty()){
            return  -1;
        }
        int index=(rear==0)?elem.length-1:rear-1;
        return  elem[index];
    }
    
    public boolean isEmpty() {
        return  rear==front;
    }
    public boolean isFull() {
        return (rear+1) % elem.length==front;
    }
}

普通队列:

import java.util.Queue;

//链式队列
public class MyQueue {
    static class Node{
        public  int val;
        public  Node next;
        public  Node(int val){
            this.val=val;
        }
        public  Node head;//队列的头
        public  Node tail;//队列的尾

        /*
        入队操作
         */
        public void offer(int val){
            Node node=new Node(val);
            if(head==null){
                head=node;
                tail=node;
            }else {
                tail.next=node;
                tail=tail.next;
            }
        }
        /*
        出队操作
         */
        public  int  poll(){
            if(head==null){
                return  -1;
            }
            int oldVal=head.val;
            if (head.next==null){
                head=tail=null;
            }else {
                head=head.next;
            }
            return  oldVal;
        }
        /*
        查看当前队头元素
         */
        public  int peek(){
            if(head==null){
                return  -1;
            }
            return  head.val;
        }
    }



}

栈:

import com.sun.scenario.effect.impl.prism.PrReflectionPeer;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Stack;
public class MyStack {
    public int[] elem;
    public  int usedSize;
    //当前栈当中存储的有效数据个数
    public  static  final  int size=10;
    public  MyStack(){
        elem=new int[size];
    }
    /*
    判断当前栈是否是满的
     */
    public  boolean isFull(){
        if(usedSize==elem.length){
            return  true;
        }
        return false;
    }
    /*
    判断栈是否为空
     */
    public boolean isEmpty(){
        return  usedSize==0;
    }

    /**
     * 压栈
     */
    public  void push(int val){
        //1.判断栈是否是满的
        if (isFull()){
            elem= Arrays.copyOf(elem,2*elem.length);
        }
        //存放到当前的下标,同时usedSize需要自增
        elem[usedSize]=val;
        usedSize++;
    }
    /*
    删除栈顶元素
     */
    public  int pop(){
        if(isEmpty()){
            throw new EmptyStackException("栈为空");
        }
        int oldVal=elem[usedSize-1];
        usedSize--;
        return  oldVal;
    }
    /*
    获取栈顶元素但是不删除
     */
    public int peek(){
        if (isEmpty()){
            throw new  EmptyStackException("栈为空了");
        }
        return  elem[usedSize-1];
    }


}

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

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

相关文章

绿色低碳,数字为先:万应低代码推动能源资产管理优化

10月7日,湘江新区经济发展局发布关于印发《湖南湘江新区推进碳达峰碳中和三年行动工作方案及责任分工(2023-2025)》的通知,把碳达峰碳中和工作纳入湖南湘江新区经济社会发展和生态文明建设整体布局。 随着科学技术的不断发展&…

10月第2周榜单丨飞瓜数据B站UP主排行榜榜单(B站平台)发布!

飞瓜轻数发布2023年10月9日-10月15日飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营…

线程池线程保活以及动态更新线程数

基本知识 各位大佬在面试过程肯定会被问到线程池或者多线程的问题,例如: 线程池核心参数及其作用线程池添加任务的执行顺序任务队列以及任务的拒绝策略等等 这些问题是相信稍微研究过线程池JDK源码的都能掌握。有兴趣的可以参数这篇博文。 在进入今天…

去除照片中多余人物方法分享-这些方法快收藏起来

拍照时经常会碰到一些意外的情况,比如不小心捕捉到了一些不需要的人或物,这会影响照片的美观效果,因此学习如何去除照片中多余人物就显得特别重,下面分享一些常用的去除照片中多余人物的方法,如果你也感兴趣的话&#…

使用按钮从 SAP 系统内打开 Excel 文件

了解如何通过 SAP 屏幕上创建的按钮打开所需的 Excel 文件。为了演示这一点,将指导您完成以下步骤。 使用 del 命令删除 SAP 上不必要的元素添加一个按钮,单击后打开弹出窗口创建一个函数来选择 excel 文件创建打开所需 excel 文件的函数 定制 登录 S…

Linux下程序(C语言)实现对文件的复制

目标&#xff1a; 使用系统调用实现cp命令。 原理&#xff1a; 使用系统调用fopen打开文件&#xff0c;使用fgets()从文件读数据&#xff0c;使用fputs() 向文件写数据。 linux 文件 创建命令为 vi (文件名&#xff09;.c 文件源码&#xff1a; #include<stdio.h>…

linux安装达梦数据库(命令行安装)

安装达梦数据库 创建安装用户 1,创建安装用户组dinstall [rootdmDMServer1 ~]# groupadd -g 12345 dinstallgroupadd : 创建组 -g : 指定组id&#xff08;GID&#xff09; 12345&#xff1a; 指定的组名称 dinstall &#xff1a; 组名 2,创建安装用户dmdba [rootdmDMSe…

如何使用 Python 在终端中创建令人惊叹的图形

说明 在当今数据驱动的世界中&#xff0c;可视化或图形确实表达了一个胜过千言万语的故事。可视化提供了快速有效的通信媒体来传达数据&#xff0c;如果与文本或表格共享&#xff0c;则可能难以理解。 虽然有许多强大的可视化工具可用&#xff0c;但有时我们需要一种快速简便的…

SpringBoot的多环境切换(已废除)

profile是Spring对不同环境提供不同配置功能的支持&#xff0c;可以通过激活不同的环境版本&#xff0c;实现快速切换环境 application-dev.yaml server:port: 8082 application-test.yaml server:port: 8081 我们在主配置文件编写的时候&#xff0c;文件名可以是 applicat…

58 乘积最大子数组

乘积最大子数组 题解1 DP换成三个变量&#xff08;因为是连续的&#xff0c;只和上一个状态有关的&#xff0c;所以三个暂存变量迭代就行&#xff09; 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的 非空连续子数组&#xff08;该子数组中至少包含一个数字&am…

出席第三届“一带一路”峰会的斯里兰卡总统会见深兰科技高层

10月16日&#xff0c;应斯里兰卡投资促进部的邀请&#xff0c;深兰科技集团董事副总裁刘园桂、集团营销中心总经理徐诗彪一行出席了在北京举行的“中斯投资论坛”。 图&#xff1a;刘园桂女士向斯里兰卡总统赠送熊猫智能公交模型 论坛期间&#xff0c;来北京参加第三届“一带一…

菜鸟智谷产业园正式开园!入驻企业可享受“城区+园区”双重政策扶持

位于杭州未来科技城的菜鸟智谷产业园正式开园了! 杭州未来科技城发布新电商产业加速“百千万亿”计划,菜鸟智谷产业园发布“产业赋能计划”,并设立天猫品牌孵化基地,落户中国(杭州)跨境电商综试区一带一路电商运营中心,引入悦汇跨境产业创新基金……10月17日,杭州未来科技城(海…

【ELK 使用指南 1】ELK + Filebeat 分布式日志管理平台部署

ELK和EFLK 一、前言1.1 日志分析的作用1.2 需要收集的日志1.3 完整日志系统的基本特征 二、ELK概述2.1 ELK简介2.2 为什么要用ELK?2.3 ELK的组件 三、ELK组件详解3.1 Logstash3.1.1 简介3.1.2 Logstash命令常用选项3.1.3 Logstash 的输入和输出流3.1.4 Logstash配置文件 3.2 E…

客户开发信怎么写?新手如何发客户开发信?

客户开发信模板有哪些&#xff1f;编写外贸客户邮件的技巧&#xff1f; 客户开发信是一种重要的商业沟通工具&#xff0c;用于建立和维护与现有客户之间的联系&#xff0c;以及吸引新客户。写一封成功的客户开发信需要一定的技巧和策略。在这篇文章中&#xff0c;我们将介绍如…

数据结构:二叉树(2)

二叉树的基本操作 获取树的结点总数 遍历思路&#xff1a; 每次遍历一个节点&#xff0c;遍历完nodeSize&#xff0c;然后遍历它的左右子树 如果遍历到空的节点&#xff0c;就返回0 public int nodeSize 0;int size(TreeNode root){if(root null){return 0;}nodeSize;siz…

智慧公厕:探索未来城市环境卫生设施建设新标杆

智慧公厕是当代城市建设的一项重要举措&#xff0c;它集先进技术、人性化设计和智能管理于一体&#xff0c;为人们提供更为舒适、便捷和卫生的厕所环境。现代智慧公厕的功能异常丰富&#xff0c;从厕位监测到多媒体信息交互&#xff0c;从自动化清洁到环境调控&#xff0c;每一…

电商数据平台西域根据ID取商品详情API接口采集产品详情数据、价格 、销量数据操作指南

商品详情API接口是一种用于访问和获取商品信息的接口&#xff0c;通常用于连接电商平台和商家应用程序。这个接口可以提供有关商品的各种详细信息&#xff0c;如名称、价格、描述、图片、类别、库存和评价等。它使得开发者能够为平台上的消费者提供更个性化和定制化的购物体验&…

通达OA saas化改造

登录页增加选择单位下拉菜单 <tr height"37" class"login_field"><td align"center"><b>用户名</b> <input type"text" class"text" name"UNAME" size"15" onmouseover&qu…

配电房无人值守方案

随着科技的不断进步&#xff0c;许多传统需要人工操作和维护的领域逐渐被自动化和智能化方案所替代。配电房作为电力供应的核心部分&#xff0c;也面临着同样的变革。 力安科技电易云配电室无人值守监控系统以智能物联数据采集和智能物联管控"为关键&#xff0c;通过加…

家装家具经营小程序商城的作用是什么

无论富贫&#xff0c;家里家具总是不可少的&#xff0c;也是人们生活所需&#xff0c;随着人们生活质量提升&#xff0c;市场中各式家装家具品牌也非常多&#xff0c;琳琅满目的商场里价格/质量高低可供消费者自由选择。 随着线上电商快速崛起&#xff0c;由于线上具备多品牌汇…