基于数组的双端队列实现

2024-01-06

我正在关注一个在线示例并学习“使用数组在 Java 中实现循环双端队列”。这是我正在关注的在线资源:

循环队列实现 http://oppansource.com/queue-implementation-in-java-using-circular-array

我有一个基于数组的双端队列类,其最终容量为 5。现在,如果数组已满,那么我可以让方法创建所有对象的临时数组,然后将临时数组的所有对象复制回“object[] arr” ”。我已经这样做有一段时间了,但一直没能成功。如果有人能帮助我理解这里的过程,我将不胜感激。我有以下类方法:

  1. insertAtFront()
  2. 最后插入()
  3. size()
  4. 是空的()
  5. toString()

这是我的代码:

public class ArrayDeque {

    private static final int INIT_CAPACITY = 5;             
    private int front;                              
    private int rear;                                       
    private Object[] arr;                           


    public ArrayDeque(){

        arr = new Object[ INIT_CAPACITY ];
        front = 0;
        rear = 0;       
    }   


    public void insertAtFirst(Object item){

        if(size() >= arr.length){

            Object[] tmp = new Object[arr.length + INIT_CAPACITY];

            for(int i = 0; i < size(); ++i)
                tmp[i] = arr[i];

            arr = tmp;
        }
        arr[front] = item;
        ++front;
    }


    public void insertAtLast(Object item){

        if(size() >= arr.length){

            Object[] tmp = new Object[arr.length + INIT_CAPACITY];

            for(int i = 0; i < size(); ++i)
                tmp[i] = arr[i];

            arr = tmp;
        }
        arr[rear] = item;
        ++rear;
    }


    public int size(){

        return (rear - front);      
    }   


    public boolean isEmpty(){

        return (front == rear);

    }   


    public String toString(){

        String s = "";
        for(int i = 0; i < size(); ++i)
            s += arr[i] + "\n";
        return s;
    }   
}//CLASS    

尝试下面的代码,我通过跟踪数组的填充量稍微改变了逻辑。您的主要问题是 size() 函数,它给出了错误的指示。一些优化正在等待,因为我在结果中看到一些空值。

public class ArrayDeque {
    public static void main(String[] args) {
        ArrayDeque t = new ArrayDeque ();
        t.insertAtFirst("1");
        t.insertAtFirst("2");
        t.insertAtFirst("3");
        t.insertAtFirst("4");
        t.insertAtFirst("5");
        t.insertAtFirst("6");
        t.insertAtFirst("7");
        t.insertAtFirst("8");
        t.insertAtFirst("9");
        t.insertAtFirst("10");
        t.insertAtFirst("11");
        t.insertAtFirst("12");
        t.insertAtFirst("13");
        t.insertAtFirst("14");

        System.out.println("After first--"+t.toString());
        t.insertAtLast("1");
        t.insertAtLast("2");
        t.insertAtLast("3");
        t.insertAtLast("4");
        t.insertAtLast("5");
        t.insertAtLast("6");
        t.insertAtLast("7");
        t.insertAtLast("8");
        t.insertAtLast("9");
        t.insertAtLast("10");
        t.insertAtLast("11");
        t.insertAtLast("12");
        t.insertAtLast("13");
        t.insertAtLast("14");
        System.out.println("After last--"+t.toString());
    }
    private static final int INIT_CAPACITY = 5;             

    private int NEW_CAPACITY;
    private int ARRAY_SIZE;
    private Object[] arr;                           


    public TestClass(){

        arr = new Object[ INIT_CAPACITY ];

        NEW_CAPACITY = INIT_CAPACITY;
        ARRAY_SIZE = 0;
    }   


    public void insertAtFirst(Object item){

        if(ARRAY_SIZE == 0)
        {
            arr[0] = item;
            ARRAY_SIZE++;
        }
        else if(ARRAY_SIZE+1 < arr.length)
        {
            Object[] tmp = new Object[NEW_CAPACITY];
             for(int i = 1; i < arr.length; ++i)
                tmp[i] = (String)arr[i-1];

            arr = tmp;
            arr[0] = item;
            ARRAY_SIZE++;
        }
        else if(ARRAY_SIZE+1 >= arr.length)
        {
            NEW_CAPACITY = NEW_CAPACITY+INIT_CAPACITY;
            Object[] tmp = new Object[NEW_CAPACITY];
             for(int i = 1; i < arr.length; ++i)
                tmp[i] = (String)arr[i-1];

            arr = tmp;
            arr[0] = item;
            ARRAY_SIZE++;
        }
    }


    public void insertAtLast(Object item){

        if(ARRAY_SIZE == 0)
        {
            arr[0] = item;
            ARRAY_SIZE++;
        }
        else if(ARRAY_SIZE+1 < arr.length)
        {

            arr[ARRAY_SIZE] = item;
            ARRAY_SIZE++;
        }
        else if(ARRAY_SIZE+1 >= arr.length)
        {
            NEW_CAPACITY = NEW_CAPACITY+INIT_CAPACITY;
            Object[] tmp = new Object[NEW_CAPACITY];
             for(int i = 0; i < arr.length; ++i)
                tmp[i] = (String)arr[i];

            arr = tmp;

            arr[ARRAY_SIZE] = item;
            ARRAY_SIZE++;
        }
    }


    public int size(){

        return ARRAY_SIZE;      
    }   


    public boolean isEmpty(){

        return (ARRAY_SIZE == 0);

    }   


    public String toString(){

        String s = "";
        for(int i = 0; i < arr.length; ++i)
            s += arr[i] + "\t";
        return s;
    }   
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于数组的双端队列实现 的相关文章

  • 如何将未知列数的 ResultSet 映射到 List 并将其显示在 HTML 表中?

    我使用 Netbeans GlassFish 和 JavaDB 创建了一个数据库应用程序 现在我的控制器 Servlet 代码执行一些动态 SQL 查询并返回结果集 或者我可以更改 toString 现在 如何以表格格式显示返回的结果集 我
  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • 在命令行java中突出显示文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一项任务是重新创建 unix cal 程序 除了一部分之外 相当简单 今天 它突出显示了该数字 我不知道该怎么做 关于如何在 Ja
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 如何为小程序提供对文件系统写入的访问权限

    我在设置小程序的策略文件时遇到问题 我是第一次这样做 不知道如何在java中设置小程序的策略文件 实际上我想授予小程序在文件系统上写入的权限 为此我必须向小程序授予文件权限 所以我创建了一个名为 java policy 的文件 并将以下代码
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut
  • 在 Junit 测试中使用 ReflectionTestUtils.setField()

    我是 JUnittesting 的新手 所以我有一个问题 谁能告诉我为什么我们使用ReflectionTestUtils setField 在我们的 Junit 测试示例中 正如评论中提到的 java 文档很好地解释了用法 但我还想给你们举
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • 如何使用 swagger-codegen-plugin (maven) 生成客户端代码?

    我需要使用 swagger codegen plugin for maven 在 eclipse 中生成服务器存根代码 你能帮忙怎么做吗 以及需要什么配置 在 pom xml 中 我找到了这个答案 您只需要像下面这样更改 pom xml 即
  • 在循环中按名称访问变量

    我正在开发一个 Android 项目 并且有很多可绘制对象 这些绘图的名称都类似于icon 0 png icon 1 png icon 100 png 我想将这些可绘制对象的所有资源 ID 添加到整数 ArrayList 中 对于那些不了解
  • Java 中处理异步响应的设计模式

    我读过类似问答的答案 如何在 JAVA 中创建异步 HTTP 请求 https stackoverflow com questions 3142915 how do you create an asynchronous http reque
  • 传递 Android DialogFragment 参数时,onCreateDialog 捆绑参数意外为 null

    我正在尝试使用 DialogFragment 在 Android 中显示一个基本对话框 并使用对话框消息的参数 如中所述StackOverflow线程 https stackoverflow com questions 15459209 p
  • java中的预增量/后增量

    有人可以帮助我理解为什么 int i 1 int j 1 int k 1 int l 1 System out println i i System out println j j System out println k k System
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • @Embeddable 中的 @GenerateValue

    我已将实体的 id 分离到一个单独的 Embeddable 类中 该实体如下 Entity Table name users public class Users EmbeddedId private Users pk id private
  • 如何使用 Jest 从 ElasticSearch 获取索引列表

    我正在尝试使用 Jest 检索索引列表 但我只得到 Stats statistics new Stats Builder build result client execute statistics 如何从结果中检索索引列表 除了统计之外
  • 使用 AmazonSNSClient 发送短信时的授权

    aws 官方文档如何发送短信 http docs aws amazon com sns latest dg sms publish to phone html使用 java 中的 aws SDK 非常简单 但是 当发送如底部示例所示的消息时
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐

  • java 8 中删除 JDBC ODBC 桥

    从 Java 8 开始 JDK 将不再包含 JDBC ODBC Bridge Class forName sun jdbc odbc JdbcOdbcDriver classNotFoundException is thrown 还有其他连
  • 在 PictureBox 中绘制火车时,C# 中出现内存不足异常

    我正在尝试创建一个应用程序来显示在线火车picturebox 所以为了实现这个我创建了一个worker thread为了获得在线火车位置 所以我定义了线程 如下所示 private Thread workerThread null priv
  • 应如何实施电子邮件地址选择加入?

    设想 用户给您一个电子邮件地址 在他们注册服务之前 他们需要验证电子邮件地址 您通过电子邮件发送一个 URL 他们单击它 然后他们就可以订阅服务 问题 网址是什么样的 我认为随机指南就可以了 您是否使用相同的随机密钥来取消订阅请求 我应该考
  • boost 正则表达式中的链接器错误

    我想了解有关 boost lib 中的正则表达式的一些知识 我尝试编译这个简单的示例代码 regex search example include
  • Scala 2.10.1 中新的脱糖行为

    假设我有这个单子类 case class Foo A xs List A def map B f A gt B Foo xs map f def flatMap B f A gt Foo B Foo xs flatMap f andThen
  • 使用 App Engine SDK 进行并行模块部署

    TL DR 有没有办法并行部署 App Engine 模块 我使用 Google 构建了一个 go 应用程序适用于 Go 的 App Engine SDK https cloud google com appengine downloads
  • Async Await 等待所有结果并继续

    我对如何实现异步等待方法并在继续之前等待结果有点困惑 我想并行对后端进行 3 次调用 并等待它们响应 然后获取结果并在内部分配它们 像这样的事情 Private Sub GetParseExpressionResults If Not is
  • iOS Core Data:将获取请求的结果转换为数组

    我正在尝试将获取请求的结果放入数组中 我的代码 let appDelegate UIApplication sharedApplication delegate as AppDelegate let managedContext appDe
  • 在 PostgreSQL 中提取 xml 标签的值

    下面是我的 Postgres 表的列响应 我想从 Postgres 数据库中的所有行中提取状态 状态的大小可能不同 例如SUCCESS所以我不想使用子字符串函数 有办法做到吗
  • 实时显示 Google Analytics 数据

    我想显示自本月初以来网站上的访问者数量 当天和当前在网站上的用户数量 我安装了 Google Analytics 我尝试通过从开发人员控制台启用 Google Analytics API 来使用嵌入 API 来解决此问题 但我需要用户授权等
  • ES6模块的“导入”正式兼容CommonJS和AMD?

    从这篇文章 https hacks mozilla org 2015 08 es6 in deep modules https hacks mozilla org 2015 08 es6 in depth modules 文中写道 新标准旨
  • iPhone如何自动插入小数位?

    我知道过去曾多次问过这个问题 但我尝试的一切都失败了 我有一个带有 UILabel 的自定义数字键盘 当我点击 1 时 UILabel 显示一个 1 现在这就是我想做的 当我点击 1 按钮时 我想要 UILabel 中的 0 01 接下来是
  • 这是什么意思? “解析错误:语法错误,意外的 T_PAAMAYIM_NEKUDOTAYIM”

    T PAAMAYIM NEKUDOTAYIM 听起来确实很异国情调 但对我来说绝对是胡说八道 我将其全部追溯到这行代码 在构造函数中我创建了一个 Config 对象 这是课程 final c
  • 单例中的 Spring Prototype 作用域 bean

    我正在尝试注入prototype豆子在一个singleton这样 每次对单例 bean 方法的新调用都会有一个原型 bean 的新实例 考虑一个单例 bean 如下所示 Component public class SingletonBea
  • 停止正在运行的 SKAction - Sprite Kit

    以下代码将为旋转设置动画 let something SKSpriteNode SKSpriteNode func start let rotateAction SKAction rotateToAngle CGFloat M PI dur
  • if 与条件条件相比的速度

    我的想法是使用条件运算符将一些 if 块转换为单行 不过我想知道是否会有速度差异 我进行了以下测试 static long startTime static long elapsedTime static String s public s
  • 在合金模型中使用布尔值的最佳实践

    我正在构建一个简单的 Alloy 来生成简单的 Java Pojo 对象 并且该 pojo 的某些字段是布尔值 我现在使用以下机制来实现这个功能 one sig item autoPay String Price Int fact bool
  • Visual Studio 调试模式下显示奇怪的内存内容

    我正在编写一些多线程C 程序 我尝试修改函数体开头的几条指令 以将执行重定向到其他地方 但我注意到 在 Visual Studio 2015 中调试时 某些内存位置似乎是不可更改的 如Memory window 例如 下图中有一个函数ApS
  • 窗口关闭时销毁会话?

    我在 php 中创建了一个具有注销功能等的登录系统 但是我需要在窗口关闭时销毁会话 这需要 即时 或尽快将用户状态更改为离线 我真的不想在会话上设置时间 因为这对于必须一直登录的用户来说很烦人 欢迎任何建议 谢谢 默认情况下 当浏览器关闭时
  • 基于数组的双端队列实现

    我正在关注一个在线示例并学习 使用数组在 Java 中实现循环双端队列 这是我正在关注的在线资源 循环队列实现 http oppansource com queue implementation in java using circular