Java数组实现循环队列的两种方法

用java实现循环队列的方法:

1、增加一个属性size用来记录目前的元素个数。目的是当head=rear的时候,通过size=0还是size=数组长度,来区分队列为空,或者队列已满。

2、数组中只存储数组大小-1个元素,保证rear转一圈之后不会和head相等,也就是队列满的时候,rear+1=head,中间刚好空一个元素;当rear=head的时候,一定是队列空了。

import java.io.*;
public class QueueArray {
    Object[] a; //对象数组,队列最多存储a.length-1个对象
    int front;  //队首下标
    int rear;   //队尾下标
    public QueueArray(){
        this(10); //调用其它构造方法
    }
    public QueueArray(int size){
        a = new Object[size];
        front = 0;
        rear =0;
    }
    /**
     * 将一个对象追加到队列尾部
     * @param obj 对象
     * @return 队列满时返回false,否则返回true
     */
    public boolean enqueue(Object obj){
        if((rear+1)%a.length==front){
            return false;
        }
        a[rear]=obj;
        rear = (rear+1)%a.length;
        return true;
    }
    /**
     * 队列头部的第一个对象出队
     * @return 出队的对象,队列空时返回null
     */
    public Object dequeue(){
        if(rear==front){
            return null;
        }
        Object obj = a[front];
        front = (front+1)%a.length;
        return obj;
    }
    public static void main(String[] args) {
        QueueArray q = new QueueArray(4);
        System.out.println(q.enqueue("张三"));
        System.out.println(q.enqueue("李斯"));
        System.out.println(q.enqueue("赵五"));
        System.out.println(q.enqueue("王一"));//无法入队列,队列满
        for(int i=0;i<4;i++){
            System.out.println(q.dequeue());
        }
    }
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-26 07:20:39

Java数组实现循环队列的两种方法的相关文章

java 获取键盘输入常用的两种方法

java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine(); input.close(); 方法2: 通过 BufferedReader BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); String s = input.readLine(); 原文

使用java语言实现一个队列(两种实现比较)(数据结构)

一.什么是队列,换句话说,队列主要特征是什么? 四个字:先进先出 六个字:屁股进,脑袋出 脑补个场景:日常排队买饭,新来的排在后面,前面打完饭的走人,这就是队列: OK,思考一个问题,我为什么写了两种实现,它们的区别是什么,哪个性能更好一些? 我觉得学习一定要带着问题来学习: 二.队列的两种实现 1.数组队列 数组队列比较简单,基于之前写的动态数组所实现的,基本方法都是根据队列的特性从而选择性的调用动态数组的方法来实现的. public class ArrayQueue<E> implemen

java中调用dll文件的两种方法

一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676   JNative地址:http://www.jb51.net/article/35232.htm JNA方法: 介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA. JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架

数组去重(只讲两种方法)

数组去重的方法有很多,每个人都有自己喜欢用的方法,这里说两种我自己觉得比较简洁高效的方法,当然很多人都知道这些. 方法一 Array.prototype.unique = function(){ var obj = {}; var arr = []; var len = this.length; for(var i=0;i<len;i++){ if(!obj[this[i]]){ obj[this[i]] = 'a'; arr.push(this[i]); } } return arr; } 此

java生成解析xml的另外两种方法JAXB

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档.从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数. JAXBContext 类提供到 JAXB API 的客户端入口点.

从列表中提取数据的两种方法

从列表中提取数据除了循环外还有两种方法:过滤,列表解析式: #!/usr/bin/env python #coding:utf-8 #@Author:Andy # 生成一个随机列表:并选出其中的两大于零的数 from random import randint data = [randint(-10, 10) for i in range(1, 10)] print(data) # method 1 print("filter method:", list(filter(lambda

两种方法实现队满和队空的判断操作(循环队列)

本周的作业要求: 1.给出循环队列的存储结构定义. 2.完成循环队列的基本操作函数. 1)      初始化循环队列: 2)      建立循环队列: 3)      实现入队和出队操作: 4)     采用下面两种方法实现对满和队空的判断操作: 方法一:修改队满条件,浪费一个元素空间,队满时数组中只有一个空闲单元(必做):   方法二:设置标志flag,当front==rear且flag=0时为队空,当front==rear且flag=1时为队满(必做): 3.编写主函数实现基本操作函数功能,

Java构造和解析Json数据的两种方法详解一

原文链接:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多Java下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法示例. 用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二 一.介绍 JSO

【转】Java构造和解析Json数据的两种方法详解一

Java构造和解析Json数据的两种方法详解一 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法示例. 用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二 一.介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和J